MyTetra Share
Делитесь знаниями!
Как настраивать дополнительные кнопки мышки в Linux
Время создания: 25.11.2012 23:56
Текстовые метки: linux, мышь, xbindkeys, кнопки, udev, event, событие, xevent
Раздел: Компьютер - Linux - Манипуляторы - Мышка
Запись: xintrea/mytetra_syncro/master/base/1353873381vq8aizr5ld/text.html на raw.github.com

Автор — очень сложно и в корне неверный подход.


1) Уже предложили xbindkeys — это первый вариант если у кнопок есть номера. А обычно так и есть, даже у наклона колёсика есть свой номер кнопки.


2) Настройки компиза. Compiz прекрасно понимает нажатие любых кнопок мыши и на них можно всё что угодно повесить. Compiz Config Settings Manager — команды — комбинации клавиш — прокручиваем вниз, дальше я надеюсь можно разобраться. Комбинации можно городить даже вместе с управляющими клавишами клавиатуры.

Минус этого способа очевиден — не все используют Compiz.


3) Есть третий вариант, который я считаю самым правильным и надёжным, не смотря на то, что что-то неправильное в нём всё же есть.


Минусами предыдущих способов было то, что на кнопки приходилось вешать определённые команды, выполнявшие определённые программы. Когда как хотелось чтобы нажатие кнопки было нативным, отсылало нужный код, который бы понимала рабочая оболочка и все программы внутри неё. Допустим на нажатие кнопки реагировал регулятор громкости системы, а на другое нажатие мультимедиая-кнопок реагировали все плееры.


Дело в том, что соответствия клавиш сканкодам ставит udev, у него есть для этого специальный каталог таких соответствий: /lib/udev/keymaps Но там перечислены далеко не все модели устройств. Мы можем исправить это для нашего устройства:


1) По аналогии с имеющимися файлами, создаём новый, например logitech-revolution-mouse


2) Находим скан-коды кнопок с помощью


sudo evtest /dev/input/eventX


где X — номер того event'а, на котором висит мышь. Вместо evtest можно попробовать


sudo /lib/udev/keymap -i input/eventX


работает только в виртуальном терминале (ctrl + alt + f1), не требует установки дополнительных приложений.


3) Заполняем файл /lib/udev/keymaps/logitech-revolution-mouse, вот как он выглядит у меня:


0x90005 FORWARD

0x90004 BACK

0x90009 NEXTSONG

0x9000D PLAYPAUSE

0x9000B PREVIOUSSONG


Названия клавиш содержатся в файле /usr/include/linux/input.h можно выбирать практически любое (только префикс видимо нужно убирать).


В том числе, можно на наклон колёсика повесить какие-нибудь левые коды, а потом в своём любимом рабочем окружении повесить на эту полноценную КЛАВИШУ (а не номер кнопки мыши!) любую команду.


4) Нужно создать ещё правило udev для мыши. udev должен знать какому устройству какой файл должен соответствовать. Создаём файл /etc/udev/rules.d/96-kemap.rules и вписываем туда что-то вроде:


ACTION=="remove", GOTO="keyboard_end"

SUBSYSTEM!="input", GOTO="keyboard_end"

KERNEL!="event*", GOTO="keyboard_end"


SUBSYSTEMS=="usb", ENV{ID_VENDOR}=="", IMPORT{program}="usb_id --export %p"

SUBSYSTEMS=="usb", GOTO="keyboard_usbcheck"

GOTO="keyboard_end"


#

# The following are external USB keyboards

#


LABEL="keyboard_usbcheck"


ENV{ID_VENDOR_ID}=="046d", ENV{ID_MODEL_ID}=="c525", ENV{ID_VENDOR}=="Logitech*", RUN+="keymap $name logitech-revolution-mouse"


GOTO="keyboard_end"


LABEL="keyboard_end"


Посмотреть примеры можно в файле: /lib/udev/rules.d/95-keymap.rules


lsusb вам в помощь для определения VENDOR_ID и MODEL_ID


Всё, после этого по-моему достаточно вынуть/вставить устройство и правило сработает. Всё вышенаписанное про udev справедливо для клавиатур, причём даже в большей мере чем для мышей.


Кажется довольно громоздко, но это самый лучший способ заставить работать клавиши мышей/клавиатур. Я много лет пробовал разные способы, собаку на этом съел, и давно остановился на этом способе.


Чтение и запись в hidraw насколько я знаю нужно в исключительных ситуациях, при настройке клавиатуры/мыши, получения информации с них, отрисовка на экране клавиатуры, и, как я понимаю, в случае клавиатуры G15 для её спец. клавиш.


 
MyTetra Share v.0.65
Яндекс индекс цитирования