How can I assign actions to all my mouse buttons?
I have a mouse with lots of buttons, but it’s not a mainstream make like Logitech. For Windows, I have a driver that lets me assign actions like close-window (Ctrl+W) or next-tab (Ctrl+Tab), but I don’t have a Linux driver. Since Linux is so flexible, I thought perhaps there is a general way to do this, regardless of brand? Update: Based on input from Cyrex, I installed and ran sudo apt-get install btnx which found several but not all mouse buttons.
Found: left, right, wheel, wheelclick, thumb fwd, thumb back.
Not found: wheel left, wheel right, thumb middle button.
Vendor ID is 0x04d9, Model ID is 0xa015. Update 2: In System>Prefs>Mouse there’s a lightbulb icon for testing double-click speed. Every working button can turn the bulb on&off, but the missing buttons can’t. It would seem that Ubuntu isn’t aware of these buttons and thus doesn’t register their clicks. I guess I need to hunt for a driver, though a mainstream mouse is probably the easier way.
11 Answers 11
I have a MX Anywhere «M-R0001»
I use my forward and Back buttons as Copy and Paste.
Steps:
1) All buttons are detected with last kernel. at least with
uname -a 3.8.0-25-generic #37-Ubuntu SMP Thu Jun 6 20:47:07 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
2) So, basically, you only need to map those buttons with desired actions. How to know with button is pressed and the correspondent numeric code? Well, you can use the ‘xev’ program:
This program is a key and mouse events sniffer. When it’s running, you can see a window in which you can press mouse buttons and see if they are detected. For example, with the zoom button of the Performance MX you will see something like that:
ButtonPress event, serial 35, synthetic NO, window 0x5800001, root 0x15a, subw 0x0, time 64521438, (84,117), root88,144), state 0x10, button 13, same_screen YES
that means that 13 is the code for that mouse button. You can try every mouse buttons on your hand . for easy access, here is the map for Performance MX:
- Back button: 8
- Forward button: 9
- Zoom button: 13
- Show windows button: 10
the other buttons are well recognized and you don’t need to map to actions.
3) Now, you need to install a little program to re-map mouse and keyboard inputs. The magician is ‘xbindkeys’ . the easy installation is using:
sudo apt-get install xbindkeys
4) Once installed, you can do the magic. The idea is configure the mouse buttons to send key combinations to activate other desktop functionalities (as the matter of fact, xbindkeys can be used for execute any other program when you press a mouse button). In KDE you can do that with Ctrl+F10 keys combination. The point is create a xbindkeys’ configuration file to do the job.
5) To create the configuration file, just run the following command:
xbindkeys --defaults > $HOME/.xbindkeysrc
6) And we need to edit the file to specify your button’s mapping:
7) We need to add our button-to-key configurations. For example, I have the following:
# Back changed to Copy "xte 'keydown Control_L' 'key C' 'keyup Control_L'" b:8 # Forward "xte 'keydown Alt_L' 'key Right' 'keyup Alt_L'" b:9 # Present desktops "xte 'keydown Control_L' 'key F8' 'keyup Control_L'" b:13 # Present windows "xte 'keydown Control_L' 'key F10' 'keyup Control_L'" b:10
8) There was a new requirement. the ‘xte’ program, which basically simulates user key press combinations. Install it using:
sudo apt-get install xautomation
Now, if you run on a terminal something like:
xte 'keydown Control_L' 'key F10' 'keyup Control_L'
that means simulate a Ctrl + F10 keypress. The idea is using xbindkeys to say: «when I press 13th mouse button, send a Ctrl + F10 keyboard press using xte program to generate that»
9) And finally, you need to configure ‘xbindkeys’ to run automatically on system startup. Startup Applications / Add program button and type ‘/usr/bin/xbindkeys’ on the dialog.
Дополнительные кнопки мыши в Linux
Я долго не знал, как подступиться к настройке дополнительных кнопок мыши в Linux. В отличие от Windows здесь нет или почти нет для этого программок с графическим интерфейсом. Меня пугало, что придётся возиться с командной строкой и какими-нибудь мутными конфигами. Теперь, вспоминая эти страхи, как-то даже смешно. На деле всё оказалось слишком просто.
Инструкция годиться для любых современных версий Ubuntu, как впрочем и многих других дистрибутивов Linux. Все сразанное далее опробовано в Elementary OS 0.4 Loki, 5.0 Juno, 5.1 Hera. Я пользуюсь этой операционной системой, поэтому в статье чуть больше внимания будет именно ей.
Внимание! Вам сюда, если у вас Wayland. В Ubuntu 22.04 и новее Wayland по умолчанию.
Моя мышка Logitech VX Revolution из-за которой пришлось заморочиться:
Я привык на подобные мышки на боковые кнопки назначать функции копирования и выставки. Конечно, функции дополнительным кнопкам можно назначить любые — разные сочетания кнопок клавиатуры, комбинации одновременного нажатия кнопок на клавиатуре и мышке.
Аналогично всё настраивается и для мышек очень многих других моделей и производителей. Позднее я настраивал:
Для начала открываем консоль. В основном все действия будут производиться с её помощью.
Устанавливаем необходимый софт в Ubuntu/Debian/etc:
sudo apt install xbindkeys xautomation x11-utils
sudo dnf install xbindkeys xautomation
К сожалению в Fedora нет особого смысла настраивать xbindkeys, т.к. программа не будет обрабатывать нажатия кнопок в приложениях, написанных для Wayland. Решение здесь.
Драйвер или что-то ещё дополнительное для вашей мышки искать не надо! Она ведь у вас работает, курсор движется? Значит всё и так уже есть, обычно этого достаточно. Убедиться в работе всех кнопок мышки поможет следующая команда:
Она откроет над консолью небольшое окошко. Вам нужно будет навести на него курсор мыши и нажимать те её дополнительные кнопки, которые требуется настроить. Так вы узнаете порядковые номера этих кнопок, запишите их, они потребуются чуть позже.
Закройте маленькое окошко, чтобы закончить.
Следующая команда создаёт в домашней папке текущего пользователя файл конфигурации, редактируя его потом мы будем настраивать кнопки. Вы должны выполнять эту команду под тем пользователем, под которым обычно работаете в системе. Если вы её выполните под root, то соответственно файл поместиться в домашнюю папку root, а это часто не то, что надо.
xbindkeys --defaults > $HOME/.xbindkeysrc
В моём случае файл разместился по такому пути:
Теперь редактируем его своим любимым редактором. Если у вас такового нет, могу порекомендовать встроенные редакторы файловых коммандеров mc или Double Commander.
По умолчанию в файле на 40 строке присутствует включенный пример:
# Examples of commands: "xbindkeys_show" control+shift + q
Можно его отключить (закомментировать), установив вначале строк символ # . Следом пишем свои команды. Например, я для боковых кнопок мышки добавил две следующие:
"xte 'keydown Control_L' 'key Insert' 'keyup Control_L'" b:9 "xte 'keydown Shift_L' 'key Insert' 'keyup Shift_L'" b:8
Из кода видно, что происходит. В первом случае, держим левый «Ctrl», нажимаем кнопку «Insert», отпускаем левый «Ctrl». Вся эта эмуляция клавиатуры происходит по нажатию кнопки мышки под номером 9.
Комбинации кнопок Ctrl+Insert и Shift+Insert для копирования и вставки считаются общепринятыми, как и Ctrl+C и Ctrl+V. В настройки лучше прописывать именно первый вариант. Он будет работать всегда, при любой включенной раскладке клавиатуры.
А вот комбинации Ctrl+C и Ctrl+V будут работать, только если будет включена латинская. Во всяком случае так в Elementary OS, возможно в простой Ubuntu такого нет. На англоязычных интернет-ресурсах часто советуют следующий код, т.к. у них нет трудностей с раскладками:
"xte 'keydown Control_L' 'key c' 'keyup Control_L'" b:9 "xte 'keydown Control_L' 'key v' 'keyup Control_L'" b:8
Пример, когда нужно просто эмулировать нажатие кнопок клавиатуры:
"xte 'key Control_L'" b:13 "xte 'key q'" b:14
Эмуляция нажатия комбинации CTRL + левая кнопка мыши, чтобы по дополнительной кнопке 10 мыши в веб-браузере открывать вкладку в новом окне:
"xte 'keydown Control_L' 'mouseclick 1' 'keyup Control_L'" b:10 + Release
Следующей командой можно посмотреть справку, где приводятся коды других функциональных кнопок клавиатуры, которые могут пригодиться для конфига:
Ещё можно узнать коды вообще любых кнопок так:
А такая команда позволяет протестировать сделанные в файле .xbindkeysrc настройки:
Если всё готово и вы хотели бы начать пользоваться дополнительными кнопками мыши, надо просто запустить ту же самую программу:
Ну и соответственно, чтобы оно всегда работало надо добавить эту программу в автозапуск.
В Ubuntu 20.04 есть специальная программа «Автоматически запускаемые приложения». Скорее всего там xbindkeys уже будет, тогда ничего делать не нужно.
В Elementary OS заходим в «Приложения» → «Параметры системы» → «Приложения» → Вкладка «Автозапуск» → В нижнем левом углу есть кнопка «Добавить программу в автозапуск. ». Здесь просто вписываем «xbindkeys»:
Всё, можно пользоваться. Согласитесь, ничего сложного.
Я когда с этим разбирался, то у меня был косяк в том, что нужные мне дополнительные кнопки мыши не распознавались xev. Вот именно те две кнопки, которые я и хотел настроить. С остальными сразу всё было без проблем.
В теории, если такая ситуация, то это означает, что используемый вами драйвер мышки не обеспечивает работу всех её кнопок. Где брать другой драйвер под Linux — не понятно. Производители железа редко когда заморачиваются и делают для своих устройств драйверы под эту операционную систему.
Но благо, эта ситуация крайне редкая, обычно, как я понял из информации в интернете, кнопки мышек распознаются сразу без проблем. В моём случае это была аппаратная проблема. Две нужные мне кнопки тупо вообще не работали. Видать, слишком давно ими не пользовался. Разобрал грызуна, почистил, покликал, — заработали. После этого повесил на них нужные действия за считанные минуты.
Определить, что кнопки вообще не работают помог другой компьютер с Windows. А так, наверное, еще долго бы ломал голову, почему нифига не работает и что с этим делать.