zepete: (Default)
[personal profile] zepete
Есть два способа настройки клнопок в linux.
1. Простой, при помощи xmodmap. Он даже проще реализации в windows, но считается устаревшим и не рекомендуется для использования.
2. Редактирование текстового файла длиной в несколько сотен строк.

Как это делается в windows описано здесь.


По-гуглив я остановился на возможностях Windows. а точнее редактора реестра (Пуск-Выполнить: regedit).<....>

1. В ветке
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\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\CurrentControlSet\Control\Keyboard Layout

UPD: Если вы боитесь работать в реесте, то создайте текстовый файл с расширением *.reg, и впишите туда следующее:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,2a,00,56,00,00,00,00,00
затем сохраните, запустите, и перезагрузите ПК.







Переназначение клавишь при помощи xmodmap заключается в создании командной строки вида: 'xmodmap -e "<десятичный код кнопки1> = <новый символ кнопки1>" -e "<десятичный код кнопки2> = <новый символ кнопки2>" -e "<десятичный код кнопки3> = <новый символ кнопки3>".....'.
Что бы получить десятичный код кнопки и символ кнопки надо выполнить такую длинную команду: «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».
После чего понажиамть нужную кнопку, в результате на консоле поятся строки содержащие десятичный код кнопки, шестнадцетиричный символ кнопки и текстовую строку соответствующую кнопке. Все эти значения лучше всего записать на бумажку, как скопировать их с экрана, возможно, не получиться. После чего выйти в физическую консоль при помощи <Ctrl>+<Alt>+<1>, в которой выполнить команду "killall xev" и комбинацией кнопок <Ctrl>+<Alt>+<6> вернуться в х. окна.Теперь можно сконструировать требуемую команду 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;
     <ESC> = 9;
    <AE01> = 10;
    <AE02> = 11;
    <AE03> = 12;
<....>
    <VOL-> = 122;
    <VOL+> = 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 <LatB> = <AB05>;
    alias <LatN> = <AB06>;
    alias <LatM> = <AB07>;
};
В нем интересуюют равенства типа "<AE01> = 10;". Левая часть равенства обозначает символ кнопки, а правая - код кнопки. Для замены назначения конкретных кнопок необходимо заменить левые части равенства. В моем случае необходимо строку "<VOL-> = 122" заменить на "<VOL+> = 122", а "<VOL+> = 123" на "<VOL-> = 123".

Опять таки, в этом случае необходимо получить код кнопки, для этого можно воспользоваться командой из предыдущего пункта, а можно такой: «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 сделать скрытым, то есть к началу имени прибавить точку и соответствующим образом изменить ярлык.

Profile

zepete: (Default)
zepete

January 2026

S M T W T F S
    1 23
4 56 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 14th, 2026 08:31 am
Powered by Dreamwidth Studios