Работа с многокнопочными мышами в Xorg

Источник: nixp

    Два колеса и пять педалей: катаемся на нестандартных мышках
   
   
    Неуклюжая получилась бы конструкция, если бы речь шла о велосипеде. В мышках же повышение количества кнопок призвано увеличить удобство использования. Но если дополнительные кнопки не работают и висят балластом, то ни о каком удобстве не может быть и речи. Производители таких мышек комплектуют их программным обеспечением (не для нашей любимой ОС, конечно), позволяющим глобально привязать какое-то одно действие для каждой из дополнительных кнопок. Однако хотелось бы иметь возможность настраивать их поведение в каждом приложении индивидуально, при возможности - штатными средствами. В данной статье вы узнаете, как это сделать.
   
   
    Поддержка возможных действий мышью в Xorg
   
   
    Прежде всего необходимо убедиться, что X-сервер правильно работает с мышкой. Вопросы использования мышек в консоли оставим эстетам, не разделяющим моего мнения о том, что мышка в консоли - вообще явление необязательное (тем более такая). Рассмотренная конфигурация: Xorg 7.x, A4 tech WOP-49 (5 нажимаемых кнопок, включая одно из колес, 2 колеса прокрутки).
   
    Для этого в соответствующей секции xorg.conf (следует ориентироваться на "InputDevice" с говорящим идентификатором, драйвером или устройством - прим. ред.) внесем изменения:
   

Option	"Protocol" "ExplorerPS/2"
Option	"Buttons" "9"
Option	"ButtonMapping" "1 2 3 8 9"
Option	"ZAxisMapping" "4 5 6 7"

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

Option	"ButtonMapping" "1 2 3 6 7"
Option	"ZAxisMapping" "4 5"

   
    Итак, все манипуляции мышью (кроме перемещения) X-сервер воспринимает как нажатия кнопок. Соответственно, в моем случае 1, 2, 3, 8 и 9 обозначают левую, среднюю, правую и две боковые кнопки, а 4, 5, 6 и 7 - движения колес прокрутки. Для унификации все это я буду в дальнейшем называть нажатиями кнопок.
   
    Запустим X-сервер и убедимся, что все работает правильно. Можно покрутить какой-нибудь документ в книжной ориентации в обоих направлениях. Но окончательный вердикт вынесет утилита xev. При возникновении каких-либо событий она отправляет их описание в консоль. И если на нажатия боковых кнопок в ее выводе присутствует button 8 и button 9 (6 и 7 для одноколесной мыши) - значит, все нормально и кнопки видны X-серверу.
   
   
    Привязка нажатий кнопок мыши к действиям
   
   
    Следующая задача - получить возможность назначать произвольное действие боковым (в принципе, любым) кнопкам, по возможности - штатными средствами самих приложений. Очень напоминает горячие клавиши, не так ли? Основная идея в этом и состоит: эмулировать нажатие комбинации клавиш при нажатии кнопки мыши. В дальнейшем мы можем назначить ей в каждом приложении свое действие.
   
    Для этого нам понадобятся xbindkeys и xvkbd из одноименных пакетов. Вся магия будет совершаться при помощи следующих строк в ~/.xbindkeysrc:
   

"xvkbd -xsendevent -text "\[Control_L]\[KP_Divide]""
	b:8
"xvkbd -xsendevent -text "\[Control_L]\[KP_Multiply]""
	b:9

   
    Таким образом, боковые кнопки будут эмулировать нажатие на клавиатуре сочетаний <Ctrl>+<*> и <Ctrl>+</>. Эти комбинации выбраны потому, что одной рукой их выполнять неудобно, а значит, вряд ли они будут использоваться.
   
    Комбинацию можете подобрать и сами, воспользовавшись значением keysym для клавиши, определить которое можно при помощи все той же xev. Запись кода в качестве параметра xvkbd должна выглядеть как \[keysym].
   
    Вот так, слегка пошуршав двумя конфигурационными файлами, мы добились желаемого. Как всегда, отзывы, комментарии и интересные идеи в этой области я буду рад видеть в своем почтовом ящике.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=21865