Как автоматически отключать тачпад при подключённой мыши (Fedora 13)
Кому пригодится это руководство
- Пользователи Fedora 13 на ноутбуках, у которых тачпад видится как PS/2-мышь.
- Те, кто хочет, чтобы тачпад автоматически отключался при подключении внешней мыши и включался снова при её отключении.
Краткий план действий
- Установить утилиту xinput.
- Определить имя устройства тачпада и значение свойства “Device Enabled”.
- Создать правило udev для обработки событий add/remove.
- Обновить /etc/gdm/Init/Default, чтобы покрыть загрузку с уже подключённой мышью.
- Добавить скрипт в /etc/pm/sleep.d для восстановления после suspend/resume.
Требования и предпосылки
- Fedora 13 (или совместимая версия).
- Права root для создания файлов в /etc/udev/rules.d/, /etc/gdm/ и /etc/pm/sleep.d/.
- Утилита xinput (из пакета xorg-x11-apps).
Важно: команды и имена устройств могут отличаться для других моделей ноутбуков. Пример в этом руководстве написан для Dell Precision M4500, где тачпад определяется как “PS/2 Generic Mouse”.
Установка xinput
Выполните как root:
# yum -y install xorg-x11-appsЭта команда установит xinput, который умеет перечислять устройства X и менять их свойства.
Как найти ваше устройство и свойство включения
Выполните:
$ xinput listПример вывода, который я видел на своём ноутбуке:
? Virtual core pointer id=2 [master pointer (3)]
? ? Virtual core XTEST pointer id=4 [slave pointer (2)]
? ? USB Optical Mouse id=10 [slave pointer (2)]
? ? PS/2 Generic Mouse id=13 [slave pointer (2)]Чтобы увидеть свойства конкретного устройства, выполните:
$ xinput list-props "PS/2 Generic Mouse"Типичный ответ начинающегося свойства:
Device 'PS/2 Generic Mouse':
Device Enabled (119): 1
...Значение “Device Enabled” — это 1 (включено) или 0 (отключено). Для моего устройства команды были такие:
Отключить тачпад:
xinput --set-prop "PS/2 Generic Mouse" "Device Enabled" 0Включить тачпад:
xinput --set-prop "PS/2 Generic Mouse" "Device Enabled" 1Если у вас другое имя устройства — замените “PS/2 Generic Mouse” на своё точное имя из вывода xinput.
Правило udev: автоматическая реакция на hot-plug
Создайте файл /etc/udev/rules.d/61-touchpad.rules со следующим содержимым (как root):
# 61-touchpad.rules
#
# this rules file must be named 61* or later because it won't work
# unless it runs after '/lib/udev/rules.d/60-persistent-input.rules'
#
# NOTE: will only affect DISPLAY :0
#
# run:
# udevadm test --action=add /sys/devices/platform/i8042/serio1/input/input6/mouse1
# or similar to test the following rules
#
# disable PS/2 touchpad on DISPLAY :0 if a mouse is added to the system
ACTION=="add", SUBSYSTEM=="input", ENV{ID_INPUT_MOUSE}=="1", RUN+="/bin/sh -c 'DISPLAY=:0 /usr/bin/xinput --set-prop PS/2\ Generic\ Mouse Device\ Enabled 0'"
# enable PS/2 touchpad on DISPLAY :0 if a mouse is removed from the system
ACTION=="remove", SUBSYSTEM=="input", ENV{ID_INPUT_MOUSE}=="1", RUN+="/bin/sh -c 'DISPLAY=:0 /usr/bin/xinput --set-prop PS/2\ Generic\ Mouse Device\ Enabled 1'"Пояснения:
- Имя файла 61-* важно, так как он должен выполняться после системных правил (например, 60-persistent-input.rules).
- ENV{ID_INPUT_MOUSE}==”1” фильтрует события по устройствам-мышам.
- Мы явно задаём DISPLAY=:0, потому что скрипт запускается системным демоном вне X-сессии.
Важно: экранирование пробелов в имени устройства (PS/2\ Generic\ Mouse) сохранено в соответствии с примерами xinput/udev.
GDM Init: проверить при загрузке, если мышь уже подключена
Если система загружается с уже подключённой внешней мышью, udev event add мог уже произойти до того, как наше правило применяется в контексте X. Чтобы покрыть этот случай, дополните /etc/gdm/Init/Default, добавив перед строчкой exit 0 следующий блок:
# disable touchpad if more than one mouse is available
if [ `ls -d /sys/class/input/mouse* | wc -l` -gt 1 ]; then
/usr/bin/xinput --set-prop PS/2\ Generic\ Mouse Device\ Enabled 0
fiЭтот фрагмент проверяет количество устройств в /sys/class/input/mouse* и отключает внутреннюю мышь, если внешняя обнаружена.
sleep.d: обработка suspend / resume
После suspend/resume тачпад может снова активироваться. Чтобы это исправить, создайте файл /etc/pm/sleep.d/99touchpad с содержимым (как root) и сделайте его исполняемым (chmod +x):
#!/bin/sh
#
# disable touchpad if more than one mouse is available
#
# NOTE: will only affect DISPLAY :0
#
disable_touchpad()
{
/bin/sh -c 'DISPLAY=:0 /usr/bin/xinput --set-prop PS/2\ Generic\ Mouse Device\ Enabled 0'
}
case "$1" in
thaw|resume)
if [ `ls -d /sys/class/input/mouse* | wc -l` -gt 1 ]; then
disable_touchpad
fi
;;
*) exit $NA
;;
esacЭтот скрипт выполняется при восстановлении системы и снова отключает тачпад, если присутствует больше одного устройства мыши.
Тонкости и распространённые проблемы
- DISPLAY=:0. Скрипты запускаются не из X-сессии, поэтому нужно указать, на какой дисплей отправлять xinput. Если у вас другой DISPLAY (например :1), замените значение.
- Имя устройства. На разных ноутбуках тачпад может называться по-другому (SynPS/2 Synaptics, ETPS/2 Elantech Touchpad и т.д.). Используйте xinput list, чтобы узнать точное имя.
- Порядок правил udev. Правило должно исполняться после системных правил (поэтому имя 61-*; может потребоваться и другое число на другой системе).
- Количество мышей. Проверка по /sys/class/input/mouse* простая и работает в большинстве случаев, но не идеальна для сложных конфигураций (несколько внутренних устройств, HID over USB, виртуальные мыши и т.д.).
Альтернативные подходы
- Синпатические тачпады: утилита syndaemon или драйвер synclient умеет блокировать тачпад при вводе, но она не реагирует автоматически на hot-plug внешних мышей.
- Настройки окружения рабочего стола: современные DE (GNOME, KDE) имеют опции “Отключать тачпад при подключенной мыши” — предпочтительный путь для новых дистрибутивов.
- Скрипты, отслеживающие событие через udev + systemd user service: в новых системах systemd может предложить более надёжные хуки для пользовательских сессий.
Когда этот способ не сработает (контрпримеры)
- Если тачпад управляется контроллером, который не представлен как отдельное устройство в xinput, то описанные команды будут бесполезны.
- Если у вас несколько X-сессий на разных дисплеях, правило с DISPLAY=:0 может отключать неправильную сессию.
- Если DE уже управляет устройствами ввода (например, NetworkManager-like power management), могут возникнуть конфликты.
Проверка и отладка
- Проверьте список устройств: xinput list.
- Убедитесь, что ваш xinput set-prop вручную отключает/включает устройство.
- Протестируйте udev rule локально:
# udevadm test --action=add /sys/devices/platform/i8042/serio1/input/input6/mouse1 2>&1 | grep "run:"Вы увидите строку с запуском команды:
udevadm_test: run: '/bin/sh -c 'DISPLAY=:0 /usr/bin/xinput --set-prop PS/2\ Generic\ Mouse Device\ Enabled 0''
udevadm_test: run: 'socket:@/org/freedesktop/hal/udev_event'Аналогично для remove:
# udevadm test --action=remove /sys/devices/platform/i8042/serio1/input/input6/mouse1 2>&1 | grep "run:"Если команда присутствует в выводе udevadm test, правило корректно интерпретируется udev.
Критерии приёмки
- При подключении USB-мыши внутренний тачпад становится неактивным (проверить через xinput list-props).
- При отключении внешней мыши тачпад возвращается в рабочее состояние.
- После перезагрузки или загрузки с уже подключённой мышью тачпад отсутствует (или выключен).
- После suspend/resume поведение сохраняется: тачпад остаётся выключенным при подключённой внешней мыши.
Быстрый чек-лист для внедрения (роль: системный администратор)
- Установлен пакет xorg-x11-apps.
- Найдено корректное имя тачпада через xinput list.
- Создан /etc/udev/rules.d/61-touchpad.rules.
- Обновлён /etc/gdm/Init/Default перед exit 0.
- Добавлен и сделан исполняемым /etc/pm/sleep.d/99touchpad.
- Проверено поведение при add/remove, reboot и resume.
Короткий глоссарий
- xinput — утилита для управления устройствами X (перечисление и изменение свойств).
- udev — подсистема Linux, обрабатывающая события устройств (hot-plug, remove и т.д.).
- DISPLAY — идентификатор X-сессии (обычно :0 для первой графической сессии).
Итог и рекомендации
Это рабочее решение для аппаратов, где тачпад видится как PS/2-мышь. Если у вас более новый дистрибутив или современное окружение рабочего стола, проверьте сначала встроенные настройки DE — они могут сделать всё автоматически и безопаснее. Для сложных конфигураций рассмотрите создание systemd user-сервиса, привязанного к сессии пользователя.
Важно: не меняйте имена файлов правил произвольно — соблюдайте порядок выполнения udev-правил. Тестируйте на живой системе через udevadm test и вручную через xinput перед тем, как полагаться на автоматизацию.
Краткие шаги ещё раз:
- yum -y install xorg-x11-apps
- определить имя устройства через xinput list
- добавить /etc/udev/rules.d/61-touchpad.rules
- обновить /etc/gdm/Init/Default
- добавить /etc/pm/sleep.d/99touchpad и сделать исполняемым
Спасибо за внимание. Если у вас есть другой хардвер или вы нашли более универсальное решение — поделитесь, это улучшит инструкцию для других.
Резюме
- Автоматическое отключение тачпада на Fedora 13 возможно с помощью xinput + udev + скриптов и будет работать для большинства PS/2-подобных тачпадов.
- Проверяйте имена устройств, указывайте правильный DISPLAY и тестируйте правила udev прежде чем полагаться на них в повседневной работе.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента