HOWTO: Многокнопочная мышь

Изображение пользователя Gremlin.

Автор: http://lice.wordpress.com/multibutton-mouse/

Мышку следует подключить к USB порту, а не PS/2. Хорошо бы подсчитать количество кнопок у мыши (напомню, что кнопка скролла идёт за три: скролл вверх, скролл вниз и нажатие на эту кнопку). В моём случае у моей мыши A4Tech RBW-5 10 кнопок.

Xorg 6.8.2, Slackware 10.0

Первое, что нужно сделать - это взять исходники иксов и приложить патч evdev. Там они идут под номерами 9000 и 9002. Теперь командой
#strings /usr/X11R6/bin/X | grep evdev
можно проверить, установился ли evdev. Если да, то появится некий вывод. Теперь преобразуем xorg.conf к следующему виду:

Section “InputDevice”
Identifier “Mouse1?
Driver “mouse” Option “Protocol” “evdev”
Option “Buttons” “10? #количество кнопок
Option “ZAxisMapping” “9 10? #скроллер, вверх и вниз
Option “Dev Name” “A4Tech RF USB Mouse” #/proc/bus/input/devices
Option “Dev Phys” “usb-*/input0? #/proc/bus/input/devices
Option “Device” “/dev/input/event1? #/proc/bus/input/devices
EndSection

Теперь в файл ~/.xinit.rc добавим следующие строчки:
/usr/X11/bin/xmodmap -e “pointer = 1 2 3 6 7 8 9 10 4 5?
/usr/X11/bin/xmodmap -pp

Теперь можно запустить
#/usr/X11/bin/xev
и удостовериться, что каждая кнопка мыши имеет свой номер.

Для того чтобы задать кнопкам мыши какие-либо функции, я использую пакеты xbindkeys и xvkbd. Например, вот мой ~/.xbindkeysrc:
“/usr/X11/bin/xvkbd -xsendevent -text “\[Alt_L]\[Left]” &”
m:0?10 + b:6
“/usr/X11/bin/xvkbd -xsendevent -text “\[Alt_L]\[Right]” &”
m:0?10 + b:7
“/usr/X11/bin/xvkbd -xsendevent -text “\[Left]” &”
m:0?10 + b:8
“/usr/X11/bin/xvkbd -xsendevent -text “\[Right]” &”
m:0?10 + b:9
“konsole -e mc”
m:0?10 + b:10

Xorg 7.0, Archlinux (Slackware 11.0, Xorg 6.9)

Поскольку Xorg теперь включает в себя evdev, то патчить его исходники не надо. В Archlinux достаточно установить пакет xf86-input-evdev (Xorg 7.0 модульный).Теперь надо настроить xorg.conf для своей мышки. Делается это теперь очень просто. Выполним
cat /proc/bus/input/devices

В строке “Handlers” можно найти что-нибудь вроде
H: Handlers=mouse0 event3

Это означает, что утройство типа мышь располагается по адресу /dev/input/event3. Лучше всего создать “статическую” ссылку на мышь, чтобы её расположение не зависело от различных подключенных устройств. Но я пока этого описывать не буду, как сделаю, так и напишу :), работы минут на пять максимум.

Настроим теперь xorg.conf: секция мыши должна выглядеть примерно так:

Section "InputDevice"
Identifier "Mouse1"
Driver "evdev"
Option "Device" "/dev/input/event3"
EndSectionТеперь начинается самая весёлая часть :). Почему-то Xorg 7.0 считает, что у моей мышки аж 32 кнопки :). Многие из них перепутаны местами. xev поможет разобраться во всём этом, а я напишу строчку, которую я внёс в .xinitrc:

xmodmap -e "pointer = 1 3 2 4 5 11 12 7 6 8 9 10 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32"

Теперь кнопки пронумерованы по порядку, осталось лишь научиться ими пользоваться (опять же xbindkeys, xvkbd).

Xorg 7.1, Archlinux, 2.6.17

Теперь Xorg считает правильное количество кнопок у мыши, поэтому в .xinitrc я прописал такую строчку:

xmodmap -e "pointer = 1 2 3 4 5 7 6 8 9 10"

Вся остальная настройка совпадает с настройкой в Xorg 7.0