Работа с многокнопочными мышами в Xorg
Аппаратное обеспечение
Статья была опубликована 1 февраля 2010 года в 00:00, а последний раз правилась 1 февраля 2010 года в 10:46.
Постоянная ссылка: http://www.nixp.ru/articles/4.html
Неуклюжая получилась бы конструкция, если бы речь шла о велосипеде. В мышках же повышение количества кнопок призвано увеличить удобство использования.
Примечание: Статья была впервые опубликована в электронном издании «Open Source» (выпуск №019 от 10.08.2007). Ее размещение на nixp.ru производится в соответствии с разрешением со стороны редакции и автора материала.
Два колеса и пять педалей: катаемся на нестандартных мышках
Неуклюжая получилась бы конструкция, если бы речь шла о велосипеде. В мышках же повышение количества кнопок призвано увеличить удобство использования. Но если дополнительные кнопки не работают и висят балластом, то ни о каком удобстве не может быть и речи. Производители таких мышек комплектуют их программным обеспечением (не для нашей любимой ОС, конечно), позволяющим глобально привязать какое-то одно действие для каждой из дополнительных кнопок. Однако хотелось бы иметь возможность настраивать их поведение в каждом приложении индивидуально, при возможности — штатными средствами. В данной статье вы узнаете, как это сделать.
Поддержка возможных действий мышью в 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].
Вот так, слегка пошуршав двумя конфигурационными файлами, мы добились желаемого. Как всегда, отзывы, комментарии и интересные идеи в этой области я буду рад видеть в своем почтовом ящике.
-
Популярные в этом разделе:
- «Работа с USB-ключом eToken PRO под Slackware 12.2»,
- «Настройка мультимедийной клавиатуры»,
- «Рецепт приготовления Win-принтера для печати из Linux».
Последние комментарии
- OlegL, 17 декабря 2023 года в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1