../interception-tools
interception-tools и dual-function-keys
Published:
Возможно вам повезёт, когда вы начинаете с Linux, опытные товарищи вам подскажут, что раскладку клавиатуры лучше переключать одной клавишей. И возможно вы преодолев синдром утёнка захотите это сделать. Один из популярных вариантов переключения раскладки это Caps_Lock. Нажимаем - меняем раскладку, нажимаем через Shift - включается Caps Lock.
(Если вы до сих пор меняете раскладку двумя клавишами, то возможно вы что-то делаете не так)
Позже, когда вы овладели vim или emacs, вам может остро захотеться сделать так, чтобы Ctrl
был на месте Caps_Lock
или Tab
или даже сменить клавиатуру на HHKB, Pok3r или что-то ещё. Но в Linux есть замечательная interception-tools с плагином dual-function-keys, которые позволяют не только сменить Caps на Ctrl, но и добавить действие при удержании клавиши.
Можно например перебиндить клавиши так (как у меня):
Caps_Lock
по короткому нажатию этоEsc
, а при удерживании этоL_Ctrl
Tab
по короткому нажатию этоTab
, а при удерживании этоL_Alt
L_Alt
меняется наL_Meta
Caps_Lock
переносится наR_Alt
(Caps Lock остаётся переключателем раскладки)L_Shift
по короткому нажатию это(
R_Shift
по короткому нажатию это)
В конфиге важно не ошибиться с названием клавиатуры (NAME). Посмотреть название клавиатуры можно так (ZSH):
~ > for x (/dev/input/by-id/*-kbd) sudo uinput -p -d $x | rg NAME ± master | 25 Jan 09:43:09 (2)
NAME: A4TECH USB Device Keyboard
NAME: SEM HCT Keyboard
/etc/interception/udevmon.yaml:
- JOB: "intercept -g $DEVNODE | dual-function-keys -c /etc/interception/dual-function-keys/mappings.yaml | uinput -d $DEVNODE"
DEVICE:
NAME: "SEM HCT Keyboard"
EVENTS:
EV_KEY: [KEY_TAB, KEY_CAPSLOCK, KEY_LEFTSHIFT, KEY_LEFTCTRL, KEY_LEFTMETA, KEY_LEFTALT, KEY_RIGHTSHIFT, KEY_RIGHTALT]
/etc/interception/dual-function-keys/mappings.yaml:
MAPPINGS:
- KEY: KEY_CAPSLOCK
TAP: KEY_ESC
HOLD: KEY_LEFTCTRL
- KEY: KEY_TAB
TAP: KEY_TAB
HOLD: KEY_LEFTALT
- KEY: KEY_LEFTCTRL
TAP: KEY_UNKNOWN
HOLD: KEY_UNKNOWN
- KEY: KEY_LEFTMETA
TAP: KEY_RIGHTMETA
HOLD: KEY_LEFTCTRL
- KEY: KEY_LEFTALT
TAP: KEY_LEFTMETA
HOLD: KEY_LEFTMETA
- KEY: KEY_RIGHTALT
TAP: KEY_CAPSLOCK
HOLD: KEY_LEFTCTRL
- KEY: KEY_LEFTSHIFT
TAP: [ KEY_LEFTSHIFT, KEY_9, ]
HOLD: KEY_LEFTSHIFT
- KEY: KEY_RIGHTSHIFT
TAP: [ KEY_RIGHTSHIFT, KEY_0, ]
HOLD: KEY_RIGHTSHIFT
KEY_UNKNOWN
вырубает действие/клавишу
В mappings.yaml я делаю некоторые лишние действия которые я не описал, возможно они вам не понадобятся
Остаётся только запустить сервис и эти биндинги у вас будут работать даже без графического окружения