Замена кнопок в linux. — Мысли злого плебея — ЖЖ
Есть два способа настройки клнопок в linux.
1. Простой, при помощи xmodmap. Он даже проще реализации в windows, но считается устаревшим и не рекомендуется для использования.
2. Редактирование текстового файла длиной в несколько сотен строк.
Как это делается в windows описано здесь.
По-гуглив я остановился на возможностях Windows. а точнее редактора реестра (Пуск-Выполнить: regedit).
1. В ветке
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControl Set\Control\Keyboard Layout
создайте бинарный параметр с именем «Scancode Map»
2. В параметр «Scancode Map» записываем следующие значения:
00.00.00.00.00.00.00.00.02 — девятый байт (02) в этой записи означает количество клавиш которое мы будем менять (и равен количеству клавиш +1) в нашем случае это 02, так как мы меняем значения одной клавиши. После этого вписываем еще три «пустых» байта, и теперь наш параметр выглядит так:
00.00.00.00.00.00.00.00.02.00.00.00.
Поскольку мы уже определили все Скан-коды, то продолжая наш параметр, нам следует указать скан-код значения новой кнопки (в нашем случае это 2A.00), а затем скан-код старой (заменяемой) кнопки 56.00. Теперь необходимо закрыть эту функцию четырьмя «пустыми» байтами, то есть 00.00.00.00:
image
3. Перезагружаем компьютер и пользуемся нашими новыми кнопками.PS: Если нужно сделать ремаппинг не на всем ПК, а только в вашем сеансе, то значения необходимо менять в HKEY_CURRENT_USER\SYSTEM\CurrentControlS et\Control\Keyboard Layout
UPD: Если вы боитесь работать в реесте, то создайте текстовый файл с расширением *.reg, и впишите туда следующее:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentContro lSet\Control\Keyboard Layout]
«Scancode Map»=hex:00,00,00,00,00,00,00,00,02,00,0 0,00,2a,00,56,00,00,00,00,00
затем сохраните, запустите, и перезагрузите ПК.
Переназначение клавишь при помощи xmodmap заключается в создании командной строки вида: ‘xmodmap -e » = » -e » = » -e » = «. ‘.
Что бы получить десятичный код кнопки и символ кнопки надо выполнить такую длинную команду: «xinit /usr/bin/xterm -e «/bin/sh -c /usr/bin/xev | grep -A2 —line-buffered ‘^KeyPress’ | sed -nE ‘/keycode /s/^.*[[:space:]]+keycode[[:space:]]+([[ :digit:]]+)[[:space:]]+\(keysym[[:space: ]]+(0x[[:xdigit:]]+),[[:space:]]+(.+)\). *$/\t\t\t\t\1 \2 \3/ p'» — :1».
После чего понажиамть нужную кнопку, в результате на консоле поятся строки содержащие десятичный код кнопки, шестнадцетиричный символ кнопки и текстовую строку соответствующую кнопке. Все эти значения лучше всего записать на бумажку, как скопировать их с экрана, возможно, не получиться. После чего выйти в физическую консоль при помощи ++, в которой выполнить команду «killall xev» и комбинацией кнопок ++ вернуться в х. окна.Теперь можно сконструировать требуемую команду xmodmap. Я это использовал для обмена функций кнопок VolumeUp и VolumeDown. Соответственно получил две равноценные команды: «xmodmap -e «keycode 122 = 0x1008FF13» -e «keycode 123 = 0x1008FF11»» или «xmodmap -e «keycode 123 = XF86AudioLowerVolume» -e «keycode 122 = XF86AudioRaiseVolume»».
Теперь эту команду надо пеместить в автозагрузку, так как каждый последующий этап загрузки linux перенастраивает предыдущий, то их надо пестить в самый конец процесса, то есть в каталог ярлыков автозагрузки (папку «~/.config/autostart/»). Как создавать ярлык описал здесь.
Текст моего ярлыка (файла с расширением «desktop»).
[Desktop Entry]
Type=Application
Exec=xmodmap -e «keycode 123 = XF86AudioLowerVolume» -e «keycode 122 = XF86AudioRaiseVolume»
X-GNOME-Autostart-enabled=true
NoDisplay=true
Hidden=false
Name=»key exchange»
Comment=»Exchange key VolUp and VolDown»
X-GNOME-Autostart-Delay=0
Предыдущий способ считается устаревшим, так как он слишком простой, для него достаточно одной команды, а linuxоиды ищут сложные пути. Поэтому правильным методом считается выполнить следующие действия.
1. Выполнить команду «xkbcomp -xkb $DISPLAY xkbmap«, она создат текстовый файл xkbmap с текущими настройками клавиатуры.
2. В любимом текстовом редакторе его отредактировать этот xkbmap. У меня он содержит 2000 строк. Хотя этого не надо пугаться так интересуют только первые 300 строк, хотя они могут быть не первыми:) Эти строки находяться в «функции» ‘xkb_keycodes «evdev+aliases(qwerty)»‘.
Фрагмент xkbmap поясняющий их нахождение.
xkb_keycodes «evdev+aliases(qwerty)» minimum = 8;
maximum = 255;
= 9;
= 10;
= 11;
= 12;
<. >
= 122;
= 123;
<. >
indicator 6 = «Sleep»;
indicator 7 = «Suspend»;
indicator 8 = «Mute»;
indicator 9 = «Misc»;
indicator 10 = «Mail»;
indicator 11 = «Charging»;
virtual indicator 12 = «Shift Lock»;
virtual indicator 13 = «Group 2»;
virtual indicator 14 = «Mouse Keys»;
<. >
alias = ;
alias = ;
alias = ;
>;
В нем интересуюют равенства типа »
Опять таки, в этом случае необходимо получить код кнопки, для этого можно воспользоваться командой из предыдущего пункта, а можно такой: «xinit /usr/bin/xterm -e «/bin/sh -c /usr/bin/xev | grep -A2 —line-buffered ‘^KeyPress’ | sed -nE ‘/keycode /s/^.*[[:space:]]+keycode[[:space:]]+([[ :digit:]]+)[[:space:]]+\(.*$/\t\t\t\t\1/ p'» — :1». Она проще, так как символ кнопки не требуется.
3. В автозагрузку поместить ярлык выполняющий команду xkbcomp -w 0 xkbmap $DISPLAY.
[Desktop Entry]
Type=Application
Exec=xkbcomp -w 0 /home/user/xkbmap $DISPLAY
X-GNOME-Autostart-enabled=true
NoDisplay=true
Hidden=false
Name=»key exchange»
Comment=»Exchange key VolUp and VolDown»
X-GNOME-Autostart-Delay=0
Где user необходимо заменить на имя пользователя. Желательно еще xkbmap сделать скрытым, то есть к началу имени прибавить точку и соответствующим образом изменить ярлык.
Переназначение клавиш в Linux (Ubuntu)
Современные клавиатуры и мыши имеют множество дополнительных клавиш, назначение которых иногда не очень полезно или не удобно расположено. Иногда драйвера неправильно определяют кнопки. Поэтому приходится переназначать клавиши. Этим мы и займемся.
Для простых комбинации можно использовать стандартные настройки Ubuntu. Заходим в Настройки->Клавиатура и задаем комбинацию клавиш и команду к ней, ну и имя данного хоткея чтобы потом не путаться.
Если же вам недостаточно данного функционала, перед вами стоит более продвинутая задача то будем использовать более тонкие настройки.
Первым делом нужно получить код кнопок для которых планируется переназначение. Для этого используем утилиту xev. После запуска утилиты из командной строки, появится окошко в котором нужно протестировать кнопку. При этом в терминале будет выводится информация, включая коды, для нажимаемых клавиш.
Нас интересует параметр keycode, или иногда, для клавиш мыши это имя может иметь вид “button 8”.
Для считывания клавиш также подойдет xbindkeys о котором пойдет речь дальше.
После получения кода можно использовать утилиту xbindkeys для переназначения эффекта от нажатия.
Если xbindkeys не установлен:
sudo apt-get install xbindkeys
sudo apt-get install xbindkeys
Также для переназначения одной комбинации клавиш в другую вам понадобится xautomation:
sudo apt-get install xautomation
sudo apt-get install xautomation
после установки, нужно сгенерировать дефолтный файл конфигурации:
xbindkeys --defaults > $HOME/.xbindkeysrc
xbindkeys --defaults > $HOME/.xbindkeysrc
Для считывания кодов xbindkeys -k:
Редактируем файл конфигурации в котором задаем параметры переназначения: nano
Формат файла: если строка начинается с “#”, строка является комментарием. Кстати в сгенерированом по дефолту файле много примеров в виде комментариев. Первая строка в правиле это выполняемая команда при нажатии, команда задается в кавычках, вторая строка это коды клавишь для которых будет производится команда из первой строки. Можно иметь множество таких пар: команда + код клавиш.
Примеры правил переназначения:
1. Запустить Firefox при нажатии Control + b:
2. Симулирование нажатия Control + C (Копирование) при нажатии дополнительной клавиши мыши. Используем утилиту xautomation, b:9 – код дополнительной клавиши на мыши
"xte 'keydown Control_L' 'key c' 'keyup Control_L'"
"xte 'keydown Control_L' 'key c' 'keyup Control_L'"
How can I remap keyboard keys? [duplicate]
I am looking for general instructions on remapping keys. Can someone tell me how to remap F9 to PrtScr and F10 to ScrollLock button? I have looked through every thread here and none of the suggestions worked. I am using a Swedish keyboard setup and Ubuntu 12.04.
Have you tried using the Search function selecting the «votes» tab/button to filter results at AskUbuntu? The link at end of this comment may help you understand Argusvisions’s answer and i will post one to in order to try and help. Here is one answer from search results when searching for «rempap key» using the advice just given — askubuntu.com/a/24930/102029
3 Answers 3
This answer has been mostly made up using the information from the first three steps of this Ask Ubuntu answer and this Ubuntu Forums thread to which it links/refers to. This other Ask Ubuntu answer was very helpful to. So all credit to NES, llazarte, bodhi.zazen and Argusvision.
To simply swap two keys functions: From Terminal run xev and then press F9 which would give something like
Doing the same for PrtSc did not give any output in xev for me (or I could not find the «KeyPress event») so I used Argusvision’s advice for using the Custom Shortcuts in All Settings but doing so in order to disable PrtSc as screenshot button by reassigning as Shift + Alt then tried pressing again which gave me keycode 107 for PrtSc in xev like so
Repeating the process for all four keys gave me
- F9 = keycode 75
- PrtSc = keycode 107, action Print
- F10 = keycode 76
- Scroll Lock = keycode 127, action Pause
To change a keys function we need to know the keycode of the NEW key being pressed and the «action» of the OLD or existing key for that function.
Now that we have the key codes for identifying the keys we now make the system do what we want by using xmodmap and as we know F9 has «keycode 75» and PrtSc has the action of «Print» all we need to do is
xmodmap -e "keycode 75 = Print"
to make the F9 key behave as if the PrtSc key has been pressed. i.e. the keycode stays the same but pressing the F9 key will have different results.
Using xev with Scroll Lock also gave
which confirms the «action» for the Scroll Lock key is «Pause» so for making the F10 act as Scroll Lock trying
xmodmap -e "keycode 76 = Pause"
should give the desired results.
That is until you log out or shutdown etc so what we have to do after confirming the commands
xmodmap -e "keycode 75 = Print" xmodmap -e "keycode 76 = Pause"
do give the desired results is sort out SysRec which is modified PrtSc and swap over the other buttons so we do not have multiple instances of same key action . Adding
xmodmap -e "keycode 107 mod1 = F9 Sys_Req"
should swap F9 to where PrtSc was keeping the modified SysReq ( Alt + PrtSc ) again we can use xev to help verify this.
Swapping the Scroll Lock and F10 buttons is easier
xmodmap -e "keycode 127 = F10"
After making sure that when running
xmodmap -e "keycode 75 = Print" xmodmap -e "keycode 107 mod1 = F9 Sys_Req" xmodmap -e "keycode 76 = Pause" xmodmap -e "keycode 127 = F10"
does indeed do what is intended all that is left to do is get this happening at startup time. To do this run
xmodmap -pke|egrep -e '(F9|Print)'
we are only interested in the keycodes 75 and 107. Do the same for
xmodmap -pke|egrep -e '(F10|Pause)'
and we are only interested in the keycodes 76 and 127.
Create a new text document with your favourite text editor copy and paste the relevant information
keycode 75 = Print NoSymbol Print keycode 107 = F9 Sys_Req F9 Sys_Req keycode 76 = Pause NoSymbol Pause keycode 127 = F10 NoSymbol F10
naming the file as .Xmodmap and saving it in your Home directory would allow you to run the changes simply by logging on after rebooting.