Настройка мыши Logitech VX Revolution
1. Подключение.
После того как приемник мыши был воткнут в свободный USB порт, она сразу заработала . Благо предыдущая мышь также была привязана к USB порту, были некие минимальные настройки, позволившие заработать и новой. Однако кроме стандартных кнопок (3 кнопки мыши + колесо) остальные не работали. Ради интереса я посмотрел вывод cat /proc/bus/input/devices (как оказалось потом, не зря). Вывелось много чего, здесь я привожу только то, что касается мыши:
Код: Выделить всё
I: Bus=0003 Vendor=046d Product=c518 Version=4204
N: Name="Logitech USB Receiver"
P: Phys=usb-0000:00:1d.0-2/input0
S: Sysfs=/class/input/input3
H: Handlers=mouse1 event3 ts1
B: EV=7
B: KEY=ffff0000 0 0 0 0 0 0 0 0
B: REL=143
I: Bus=0003 Vendor=046d Product=c518 Version=4204
N: Name="Logitech USB Receiver"
P: Phys=usb-0000:00:1d.0-2/input1
S: Sysfs=/class/input/input4
H: Handlers=kbd event4
B: EV=10000f
B: KEY=7 c0002 1400 0 0 1 f80 7c000 6639fa d84157ed 8e0000 0 0 0
B: REL=40
B: ABS=1 0
Сначала было немного непонятно, откуда взялось два устройства, причем второе – какая-то клавиатура. Как оказалось потом, в роли клавиатуры выступает кнопка поиска, расположенная над колесом прокрутки.
2. Настройка мыши в X-ах через evdev.
Полазив в сети, я обнаружил, что лучше использовать протокол evdev.
Стоит отметить, что evdev должен поддерживаться в ядре, должны быть отмечены следующие опции:
Код: Выделить всё
Device Drivers ->
Input Device Support ->
<*> Event Interface
USB Support --->
<*> USB Human Interface Device (full HID) support
[*] HID input layer support
Кроме того, в системе должен присутствовать evdev драйвер X-ов. в Арче он называется xf86-input-evdev.
Далее я подкорректировал файл /etc/X11/xorg.conf.
Я взял конфигурацию, как это было предложено в Gentoo-Wiki для мыши Logitech LX3:
Код: Выделить всё
Section "InputDevice"
Identifier "USB Mouse"
Driver "evdev"
Option "Name" "Logitech USB Receiver"
Option "HWHEELRelativeAxisButtons" "7 6"
Option "ZAxisMapping" "4 5"
Option "Buttons" "14"
EndSection
Подробнее о параметрах: первые две строчки и так понятны, далее в третьей строке я указываю драйверу, какое устройство, собственно, использовать. В том же Gentoo-Wiki предложено 3 способа определения необходимого устройства: по адресу устройства, по имени устройства и с помощью автоматического обнаружения. Я использовал второй способ, так как недостаток первого – необходимость привязки к конкретному адресу устройства, а он, как я понял, может изменяться после перезагрузки; третий же способ я откровенно не понял. Впрочем, ниже привожу примеры для всех трех, может кому-то и понравится.
Способ 1 – определение по адресу устройства:
Код: Выделить всё
Section "InputDevice"
Identifier "Mouse0"
Driver "evdev"
Option "Device" "/dev/input/event0"
EndSection
Способ 2 – определение по имени устройства:
Код: Выделить всё
Section "InputDevice"
Identifier "Mouse0"
Driver "evdev"
Option "Name" "Logitech USB Receiver"
EndSection
Способ 3 – автоматическое обнаружение устройства:
Код: Выделить всё
Section "InputDevice"
Identifier "Mouse0"
Driver "evdev"
Option "evBits" "+1-2"
Option "keyBits" "~272-287"
Option "relBits" "~0-2 ~6 ~8"
EndSection
Назание устройства можно выцепить из вывода cat /proc/bus/input/devices
Четвертая строчка, Option "HWHEELRelativeAxisButtons" "7 6", как я понял, привязывает кнопки 7 и 6 мыши (на самом деле это отклонение колеса прокрутки вправо и влево) к прокрутке по горизонтали, за что в мышке отвечает отклонение колеса прокрутки в соответствующую сторону. По крайней мере у меня именно так работает .
Пятая строчка, Option "ZAxisMapping" "4 5", включает колесо прокрутки, последняя показывает количество кнопок. Оказывается в мышке 14 кнопок!
После успешной перезагрузки Х-сервера сразу заработало перемещение по горизонтали (за него, как я уже говорил, отвечает отклонение колеса прокрутки) и кнопка поиска, расположенная над колесом прокрутки.
3. Назначение на действий на остальные кнопки мыши.
Чтобы посмотреть, как работают остальные кнопки, я использовал xev. В результате получилось следующее:
Левая кнопка - кнопка 1,
Нажатие на колесо прокрутки – кнопка 2,
Правая кнопка – кнопка 3,
Прокрутка вперед – кнопка 4,
Прокрутка назад – кнопка 5,
Боковая кнопка со стрелкой назад – кнопка 8,
Боковая кнопка со стрелкой вперед – кнопка 9,
Кнопка Zoom+ - кнопка 13,
Кнопка Zoom- - кнопка 14,
Кнопка поиск генерировала код нажатия 144 (у меня такой же код генерирует на клавиатуре кнопка перемотки музыки вперед, поэтому, к сожалению, по-разному их использовать не удастся)
Для назначения действий на дополнительные кнопки мыши раньше я использовал утилитку imwheel, однако, насколько я понял, она не поддерживает более 9 кнопок, поэтому от imwheel пришлось отказаться.
Выход – не очень изящный, но какой есть (если кто знает лучше, подскажите!) - я нашел на форуме Ubuntu. Здесь предлагалось воспользоваться связкой xbinbkeys+xvkbd. xbindkeys позволяет привязать выполнение программ к событиям нажатия на кнопки клавиатуры или мыши, а xvkbd способна генерировать коды нажатия на кнопки. Т. е. в целом осуществляется трансляция событий нажатия на кнопки мыши в коды кнопок клавиатуры. Для задействования этой возможности я написал файл ~/.xbindkeysrc такого содержания:
Код: Выделить всё
"/usr/bin/xvkbd -xsendevent -text "\[End]""
m:0x0 + b:8
"/usr/bin/xvkbd -xsendevent -text "\[Home]""
m:0x0 + b:9
"/usr/bin/xvkbd -xsendevent -text "\[XF86Launch0]""
m:0x0 + b:13
"/usr/bin/xvkbd -xsendevent -text "\[XF86Launch1]""
m:0x0 + b:14
Таким образом, я связал с нажатиями на боковые кнопки нажатия на кнопки «Home» и «End». С кнопками Zoom пришлось повозиться, так как существующие коды «XF86ZoomIn» и «XF86ZoomOut» ни одно приложение почему-то не воспринимало . Пришлось выбрать нейтральные «XF86Launch0» и «XF86Launch1», которые, к счастью, воспринимались без проблем. Список кодов кнопок можно посмотреть в файлах /usr/include/X11/keysym.h, /usr/include/X11/keysymdef.h и /usr/include/X11/XF86keysym.h.
После сохранения файла я запустил xbindkeys и с помощью xev убедился, что назначение кодов прошло успешно.
Чтобы каждый раз не запускать руками xbindkeys, необходимо сделать, чтобы он автоматически запускался при запуске X-сервера. Так как это весьма специфично (зависит от дистрибутива, способа запуска Х-сервера), описывать эти действия тут я не буду.
Вот собственно и все! Теперь можно назначать кнопки в конкретных приложениях на необходимые действия.
Кто знает, как еще можно поиздиваться над грызунами подобного типа, пожалуйста, расскажите!