Тачпад и мышка

Материал из Bryansk Linux Users Group.

Перейти к: навигация, поиск

Сегодня ноутбуки становятся доступнее и уже многие успели ими обзавестись. И многие уже обратили внимание на такое раздражающее неудобство, как переключение с активного окна при случайном касании тачпада во время набора текста. В этой статье рассматриваются два способа, устраняющие это неудобство. Оба способа разрабатывались для дистрибутива Ubuntu 8.04, хотя они пригодны и для других современных дистрибутивов без переделки, либо с небольшими изменениями.

Способ первый

Суть этого способа - назначение специальной комбинации клавиш для отключения тачпада. Он зависит от модели ноутбука, в моём случае это был ноутбук ASUS Z99Le (A8Le). Кроме того, на метод влияет модель тачпада, но, насколько я знаю, в большинстве случаев это продукция компании Synaptics, либо её аналоги.

Итак, сначала разрешаем настройку тачпада в конфигурационном файле /etc/X11/xorg.conf. Открываем этот файл командой

$ sudo gedit /etc/X11/xorg.conf

Затем находим переходим в секцию описания тачпада и добавляем опцию "SHMConfig" со значением "on".

Section "InputDevice"
	Identifier	"Synaptics Touchpad"
	Driver		"synaptics"
	Option		"SendCoreEvents"	"true"
	Option		"Device"		"/dev/psaux"
	Option		"Protocol"		"auto-dev"
	Option		"HorizEdgeScroll"	"0"
	Option		"SHMConfig"		"on"
EndSection

После этого перегружаем X. Теперь командой synclient мы можем включать и выключать тачпад:

$ synclient TouchpadOff=0
$ synclient TouchpadOff=1

Настало время назначить комбинацию клавиш для включения и выключения тачпада. Как правило для этого используется комбинация клавиш Fn+Fx (где Fn - модулирующая клавиша на клавиатуре ноутбука, а Fx - одна из клавиш F1-F12). В моём случае выбрана (причём это было "из коробки", в самом дистрибутиве) комбинация Fn+F9. Определить код этой комбинации можно с помощью программы acpi_listen. Ниже приведён пример для комбинации Fn+F9.

$ acpi_listen
hotkey ATKD 0000006b 00000000
hotkey ATKD 0000006b 00000001
hotkey ATKD 0000006b 00000002
hotkey ATKD 0000006b 00000003

Как видно из примера, код комбинации будет 0x6b, второе значение - количество нажатий, нам оно не пригодится.

Обработка нажатий специальных комбинаций (и многих других событий) в современных дистрибутивах выполняется системой acpi. Поэтому идём в каталог /etc/acpi/events и находим файл asus-touchpad (не забудьте, для вашего ноутбука это может быть другой файл). Открываем файл и убеждаемся, что данному событию назначена нужная нам комбинация:

$ cat /etc/acpi/events/asus-touchpad
# /etc/acpi/events/asus-touchpad
# This is called when the user presses the touchpad button and calls
# /etc/acpi/asus-touchpad.sh for further processing.

event=hotkey ATKD 0000006b
action=/etc/acpi/asus-touchpad.sh

Если значение ключа event отличается от нашего кода - правим на нужное значение. Можно заметить, что при получении нашего кода 0000006b система acpi вызовет скрипт /etc/acpi/asus-touchpad.sh. Давайте посмотрим, что находится в этом скрипте:

$ cat asus-touchpad.sh 
#!/bin/sh

# get the current state of the touchpad
TPSTATUS=`synclient -l | grep TouchpadOff | awk '{print $3}'`

# if getting the status failed, exit
test -z $TPSTATUS && exit 1

if [ $TPSTATUS = 0 ]; then
   synclient TouchpadOff=1
else
   synclient TouchpadOff=0
fi

Этот скрипт проверяет текущее состояние тачпада и меняет его на противоположное (включает или выключает).

Далее перезагрузим ноутбук и проверим работу нашей комбинации клавиш. Для контроля будем просматривать лог демона acpid:

$ tail -f /var/log/acpid
[Sun Jun  8 14:32:30 2008] received event "hotkey ATKD 0000006b 0000000d"
[Sun Jun  8 14:32:30 2008] notifying client 5230[111:123]
[Sun Jun  8 14:32:30 2008] notifying client 7087[0:0]
[Sun Jun  8 14:32:30 2008] executing action "/etc/acpi/asus-touchpad.sh"
[Sun Jun  8 14:32:30 2008] BEGIN HANDLER MESSAGES
[Sun Jun  8 14:32:30 2008] END HANDLER MESSAGES
[Sun Jun  8 14:32:30 2008] action exited with status 0
[Sun Jun  8 14:32:30 2008] completed event "hotkey ATKD 0000006b 0000000d"

Видно, что после нажатия комбинации Fn+F9 система получила событие "hotkey ATKD 0000006b ...", что привело к выполнению скрипта /etc/acpi/asus-touchpad.sh. Соответственно, тачпад должен перестать работать. Повторное нажатие комбинации клавиш должно включить тачпад. Таким образом, наша цель достигнута. Теперь при начале работы с текстом мы можем отключить тачпад и спокойно работать, не опасаясь, что от случайного прикосновения к тачпаду наш курсор улетит в неизвестном направлении.

Если у вас ноутбук не ASUS, проверьте содержимое каталогов /etc/acpi и /etc/acpi/events на наличие скриптов и настроек для вашего ноутбука.

Способ второй

Не секрет, что тачпад - вещь довольно неудобная и пользуются им неохотно (хотя, вы, возможно, думаете иначе), стараясь в каждом удобном случае воткнуть USB-мышку. А если есть мышка - то зачем нам включенный тачпад? Не проще ли предусмотреть, чтобы при подключении мышки тачпад отключался, а при её отключении тачпад вновь подключался? Именно это и позволяет делать второй способ настройки тачпада.

Во-первых, не забудьте разрешить настройку тачпада, включив опицию "SHMConfig on" в /etc/X11/xorg.conf, как это сделано в первом случае.

Теперь нам нужно настроить систему udev так, чтобы она, при подключении или отключении мышки вызывала нужный нам скрипт, изменяющий состояние тачпада. Для этого мы идём в каталог /etc/udev/rules.d/ и создаём файл 99-touchpad.rules следующего содержания:

#/etc/udev/rules.d/99-touchpad.rules
ENV{ID_CLASS}=="mouse", RUN+="/etc/udev/scripts/touchpad.sh"

Затем создаём каталог /etc/udev/scripts/ (если он не был создан ранее) и записываем в него файл touchpad.sh следующего содержания:

#!/bin/sh
case "$ACTION" in
	add)
		synclient TouchpadOff=1
		;;
	remove)
		synclient TouchpadOff=0
		;;
esac

Не забываем назначить ему соответствующие права:

$ sudo chmod +x /etc/udev/scripts/touchpad.sh

Теперь можно перезагрузить машину и проверить отключение тачпада при подключении мышки и его восстановление при её отключении. Дополнительно контролировать процесс можно просматривая лог файл syslog:

$ tail -f /var/log/syslog

# --- произведено подключение мышки ---
kernel: [15626.875997] usb 2-2: new low speed USB device using uhci_hcd and address 2
kernel: [15627.048832] usb 2-2: configuration #1 chosen from 1 choice
NetworkManager: <debug> [1212922633.427592] nm_hal_device_added(): New device added (hal udi is '/org/freedesktop/Hal/devices/usb_device_9da_a_noserial'). 
kernel: [15627.329475] usbcore: registered new interface driver hiddev
kernel: [15627.341425] input: A4Tech PS/2+USB Mouse as /devices/pci0000:00/0000:00:1a.1/usb2/2-2/2-2:1.0/input/input9
kernel: [15627.367153] input,hidraw0: USB HID v1.10 Mouse [A4Tech PS/2+USB Mouse] on usb-0000:00:1a.1-2
kernel: [15627.367169] usbcore: registered new interface driver usbhid
kernel: [15627.367173] /build/buildd/linux-2.6.24/drivers/hid/usbhid/hid-core.c: v2.6:USB HID core driver
NetworkManager: <debug> [1212922633.742955] nm_hal_device_added(): New device added (hal udi is '/org/freedesktop/Hal/devices/usb_device_9da_a_noserial_if0'). 
NetworkManager: <debug> [1212922633.853019] nm_hal_device_added(): New device added (hal udi is '/org/freedesktop/Hal/devices/usb_device_9da_a_noserial_if0_logicaldev_input'). 

# --- произведено отключение мышки ---
kernel: [15631.683458] usb 2-2: USB disconnect, address 2
NetworkManager: <debug> [1212922638.086834] nm_hal_device_removed(): Device removed (hal udi is '/org/freedesktop/Hal/devices/usb_device_9da_a_noserial_if0_logicaldev_input'). 
NetworkManager: <debug> [1212922638.093573] nm_hal_device_removed(): Device removed (hal udi is '/org/freedesktop/Hal/devices/usb_device_9da_a_noserial_if0'). 
NetworkManager: <debug> [1212922638.097985] nm_hal_device_removed(): Device removed (hal udi is '/org/freedesktop/Hal/devices/usb_device_9da_a_noserial'). 

Вот и всё.

Кстати, на ноутбуке можно реализовать оба метода одновременно, тогда даже подключив мышку при необходимости можно включить тачпад (вот только для чего - это вы сами решите :) )


Ссылки

  1. Настройка тачпада Synaptics на сайте Ubuntu ссылка
  2. Отключение тачпада при втыкании USB-мышки ссылка

Автор: xbow 8 июня 2008