![Переназначение клавиатуры [Alt_L] + {ijkl} как стрелка {Вверх, Влево, Вниз, Вправо}](https://rvso.com/image/943141/%D0%9F%D0%B5%D1%80%D0%B5%D0%BD%D0%B0%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BA%D0%BB%D0%B0%D0%B2%D0%B8%D0%B0%D1%82%D1%83%D1%80%D1%8B%20%5BAlt_L%5D%20%2B%20%7Bijkl%7D%20%D0%BA%D0%B0%D0%BA%20%D1%81%D1%82%D1%80%D0%B5%D0%BB%D0%BA%D0%B0%20%7B%D0%92%D0%B2%D0%B5%D1%80%D1%85%2C%20%D0%92%D0%BB%D0%B5%D0%B2%D0%BE%2C%20%D0%92%D0%BD%D0%B8%D0%B7%2C%20%D0%92%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%7D.png)
Я хочу использовать «ijkl» вместе с alt, чтобы они действовали как клавиши со стрелками. Например, Alt+i = Вверх, Alt+K = Вниз и т. д.
я пыталсяxmodmapследующийэтот ответ. В ответе говорится, что Alt измененная клавиша - это третий столбец в xmodmap. Тем не менее,
xmodmap -e "keycode 31 = i I Up"
не назначает до Alt+i.
Я тоже пробовалxbindkeysследующийдругой ответ. Но это не работает.
"xvkbd -xsendevent -text '\[Left]'"
m:0x18 + c:44
alt + j
"xvkbd -xsendevent -text '\[Down]'"
m:0x18 + c:45
alt + k
"xvkbd -xsendevent -text '\[Right]'"
m:0x18 + c:46
alt + l
"xvkbd -xsendevent -text '\[Up]'"
m:0x18 + c:31
alt + i
Я был бы очень признателен за решение, желательно, которое не нарушает другие мои комбинации клавиш Alt, например, ctrl+alt+t для открытия терминала и т. д.
правка: (если это поможет для ответа) после того, как я это сделаюxmodmapпереназначение когда я запускаю xev и нажимаю Alt+i он возвращает следующее.
KeyPress event, serial 37, synthetic NO, window 0x2e00001,
root 0x66b, subw 0x0, time 35626163, (161,-15), root:(261,144),
state 0x10, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
FocusOut event, serial 37, synthetic NO, window 0x2e00001,
mode NotifyGrab, detail NotifyAncestor
KeyPress event, serial 37, synthetic YES, window 0x2e00001,
root 0x66b, subw 0x0, time 0, (1,1), root:(1,1),
state 0x0, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 37, synthetic YES, window 0x2e00001,
root 0x66b, subw 0x0, time 0, (1,1), root:(1,1),
state 0x1, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 37, synthetic YES, window 0x2e00001,
root 0x66b, subw 0x0, time 0, (1,1), root:(1,1),
state 0x0, keycode 111 (keysym 0xff52, Up), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 37, synthetic YES, window 0x2e00001,
root 0x66b, subw 0x0, time 0, (1,1), root:(1,1),
state 0x0, keycode 111 (keysym 0xff52, Up), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
FocusIn event, serial 37, synthetic NO, window 0x2e00001,
mode NotifyUngrab, detail NotifyAncestor
KeymapNotify event, serial 37, synthetic NO, window 0x0,
keys: 4294967216 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
KeyRelease event, serial 37, synthetic NO, window 0x2e00001,
root 0x66b, subw 0x0, time 35628444, (161,-15), root:(261,144),
state 0x18, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
Во-первых, я не знаю, почемуShift_Lпоявляется. Во-вторых, это показывает, чтоВверхНажатие клавиши каким-то образом регистрируется, но не оказывает никакого эффекта, например, не перемещает курсор вверх.
(Я использую Ubuntu 20.04)
решение1
Я сделал это, отредактировав соответствующий файл в/usr/share/X11/xkb/символыкаталог. Так как я использую немецкую раскладку клавиатуры, для меня это это./deфайл. Я добавил/изменил следующие строки в самом первом блоке:
xkb_symbols "базовый" {
...
key <AD08> { [ i, I, Up, Up ] };
key <AC07> { [ j, J, Left, Left ] };
key <AC08> { [ k, K, Down, Down ] };
key <AC09> { [ l, L, Right, Right ] };
...
include "level3(alt_switch)"
};
Первые несколько строк делают так, что ALTGR + I = Up и так далее, что для меня нормально, так как я никогда не использую эти комбинации. Затем последняя строка по сути заставляет ALT делать то же самое, что и ALTGR. Это делает работу, но это немного не круто, так как, как вы упомянули, это портит другие комбинации ALT. Моим решением было просто не использовать ALT для этого, а использовать какую-то другую клавишу, которая находится в хорошем месте и которая мне никогда не нужна: RWIN. Другими словами, я заменил последнюю строку на
include "level3(rwin_switch)"
Таким образом, теперь я могу удобно нажимать RWIN мизинцем, чтобы перемещаться с помощью ijkl в качестве клавиш со стрелками. Самое замечательное, что в отличие от некоторых других решений, вы все еще можете нажать, например, SHIFT + RWIN + L, чтобы выделить текст.
Надеюсь это поможет :)