Переназначение клавиатуры [Alt_L] + {ijkl} как стрелка {Вверх, Влево, Вниз, Вправо}

Переназначение клавиатуры [Alt_L] + {ijkl} как стрелка {Вверх, Влево, Вниз, Вправо}

Я хочу использовать «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, чтобы выделить текст.

Надеюсь это поможет :)

Связанный контент