Робота з многокнопочнимі мишами в Xorg

    Два колеса і п'ять педалей: катаємося на нестандартних мишках
   
   
Незграбна вийшла б конструкція, якби мова йшла про велосипед. У мишках ж підвищення кількості кнопок покликане збільшити зручність використання. Але якщо додаткові кнопки не працюють і висять баластом, то ні про яку зручність не може бути й мови. Виробники таких мишок комплектують їх програмним забезпеченням (не для нашої улюбленої ОС, звичайно), що дозволяє глобально прив'язати якесь одне дію для кожної з додаткових кнопок. Однак хотілося б мати можливість налаштовувати їх поведінка в кожному додатку індивідуально, при можливості – штатними засобами. У даній статті ви дізнаєтеся, як це зробити.
   
   
    Підтримка можливих дій мишею в 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].
   
Ось так, злегка пошарудів двома файлами налаштувань, ми домоглися бажаного. Як завжди, відгуки, коментарі та цікаві ідеї в цій області я буду радий бачити у своїй поштовій скриньці.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*