[ @manjaro @hardware @mouse @xbindkeys @xev @xdotool @изображения ]
У меня мышь с дополнительными клавишами. Хочу одну из них назначить на дабл-клик.
Это инструкция для Debian. См. то же для Manjaro:HowTo:Управление клавишами мыши
Простой сценарий
Поставить дополнительный софт
sudo aptitude install xbindkeys xdotool
- xbindkeys
- xorg xev
- xdottool
Ещё нужна утилита ’xev’, но похоже, что она уже установлена в составе какого-то другого пакета. Ну ок.
Общепринято переназначать действия кнопок через утилиту “xdotool”. Также есть утилита “xte” (отдельно не существует, устанавливается только через пакет “xautomation”, и “xvkbd” (если не ошибаюсь, это из RedHat).
Опознать клавиши на мышке
xev | grep ', button'
Откроется маленькое окно для захвата действий мыши. Каждый клик с мыши будет зарегистрирован в журнале событий и отображён на экране.
root 0x6a8, subw 0x4e00002, time 9051645, (64,24), root:(923,501),
state 0x10, button 1, same_screen YES
Обычно первая кнопка определяется как “button 1”.
Кнопка "2" — колесо мыши.
Правая кнопка мыши будет определяться как “button 3”.
Если всё работает именно так, и на экране возникнет номер дополнительной кнопки, то задача почти решена.
Но если на этом шаге дополнительные кнопки мыши не распознаются, следует перейти к сложному сценарию.
Добавить изменения в/usr/include/X11/keysymdef.h конфиг
Сбросить настройки xbindkeys в default в файл "~/.xbindkeysrc" (обычно он не существует и его надо создать):
xbindkeys --defaults > ~/.xbindkeysrc
Загрузить в систему новые настройки xbindkeys
Прочитать их из нового файла:
xbindkeys -f ~/.xbindkeysrc
Добавить в файл "~/.xbindkeysrc" новые настройки
mcedit ~/.xbindkeysrc
Что именно добавить – зависит от ситуации. Вот примеры с использованием “xdtool” — здесь в каждом случае вызывается “xdotool” с какими-то параметрами. Список возможных команд для xdtool см. в файле "/usr/include/X11/keysymdef.h". Файл на 2500 строк, открывать его через cat нет смысла – сразу через mcedit.
Вместо “xdtool” можно написать название утилиты вроде kcalc или путь к исполняемому sh-файлу.
# Mouse Button Forward -- #8
# Show main menu
"xdotool key super"
# Mouse Button Back -- #9
# Show all applications
"xdotool key super+a"
# запустить новое окно Konsole по “Ctrl + правая кнопка мыши”
"konsole"
# запустить новое окно Firefox по “Ctrl + Alt + f”
"firefox"
Некоторые действия лучше назначать на момент, когда клавиши «отпускают» — “release+control+alt + f”.
Также есть мнение, что команды можно снабжать указанием местоположения курсора на экране в момент клика (нулевой пиксель, так сказать):
m:0x0 + control + b:3
Даблклик
xdotool click --repeat 2 1
Здесь “2” — количество повторов, а “1” — номер кнопки на мыши (левая).
Перезапустить xbindkeys
Тут можно застрять надолго, поэтому удобно будет сразу открывать файл с настройками:
killall xbindkeys && xbindkeys -f ~/.xbindkeysrc && mcedit /home/astenix/.xbindkeysrc
Сложный сценарий
Бывают ситуации и посложнее. Например, на моей мыши нажатие дополнительной кнопки в сокращённом логе “xev | grep ', button'” не отображается. А в полном логе видно вот это:
- Кнопка нажата
root 0x6a8, subw 0x4c00002, time 9767181, (56,41), root:(915,518),
state 0x10, keycode 133 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
XKeysymToKeycode returns keycode: 92
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
root 0x6a8, subw 0x4c00002, time 9767181, (56,41), root:(915,518),
state 0x90, keycode 40 (keysym 0xb0, degree), same_screen YES,
XLookupString gives 2 bytes: (c2 b0) "°"
XmbLookupString gives 2 bytes: (c2 b0) "°"
XFilterEvent returns: False
- Кнопка отжата
root 0x6a8, subw 0x4c00002, time 9767413, (56,41), root:(915,518),
state 0x90, keycode 133 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
XKeysymToKeycode returns keycode: 92
XLookupString gives 0 bytes:
XFilterEvent returns: False
root 0x6a8, subw 0x4c00002, time 9767413, (56,41), root:(915,518),
state 0x10, keycode 40 (keysym 0x64, d), same_screen YES,
XLookupString gives 1 bytes: (64) "d"
XFilterEvent returns: False
Можно и так
xbindkeys --multikey
Дополнительная кнопка на моей мыши отображается так:
m:0x90 + c:133
Mod2+Mod5 + ISO_Level3_Shift
m:0x10 + c:40
Mod2 + d
- The first line represents a command.
- The second line contains the state (0x8) and keycode (32) as reported by the tool xev.
- The third line contains the keysyms associated with the given keycodes.
Похоже, что нам в логе записали нажатие по кнопке и её возвращение в исходное состояние.
Понятно только то, что дополнительная клавиша отзывается так:
keycode 133 (keysym 0xfe03, ISO_Level3_Shift)
В файле “~/.xbindkeysrc” её можно указать как “c:133”.
# запустить новое окно Konsole по “Ctrl + правая кнопка мыши”
"konsole"
Есть проблема. После прописывания настроек полезно вызвать окно со списком забинденных клавиш (Ctrl+Shift+q) или это можно сделать в консоли “xbindkeys -s”.
Вызов кнопки “c:133” всегда сопровождается дополнительной командой. На картинке видно, что сразу после вызова “c:133” отображается ещё одно сочетание клавиш — “Control + Super_L”.

А “Super_L” это левая кнопка “Win”. И если нажать “Ctrl + Win” то откроется новое окно Konsole, как и прописано в файле.
Можно указать команду 0xfe03, ISO_Level3_Shift)”
Для отлова клика кнопки можно задействовать gui-приложение:
sudo pacman -Syu xbindkeys_config-gtk2
Запускается по ”xbindkeys_config”. Содержимое окна взято из уже знакомого нам файла “~/.xbindkeysrc”, а любые изменения будут записаны в него же.
А можно запустить только детектор кнопки мыши:
xbindkeys --key
Инструкция:
Press combination of keys or/and click under the window. You can use one of the two lines after "NoCommand" in $HOME/.xbindkeysrc to bind a key.
В моём случае отловилось это:
"(Scheme function)" m:0x90 + c:133 Mod2+Mod5 + ISO_Level3_Shift
Ок, будем считать, что нажатие нужной мне кнопки определяется как “Mod2+Mod5 + ISO_Level3_Shift”.