Usando um arquivo hwdb, /etc/udev/hwdb.d/99-keyboard.hwdb
posso remapear a Alttecla esquerda do meu teclado USB como a Ctrltecla:
keyboard:usb:v*p*
KEYBOARD_KEY_700e2=leftctrl
Isso também funciona quando tento remapear a Shifttecla esquerda como Ctrlchave.
Mas ao tentar remapear Caps Lockcomo Ctrlchave, não funciona:
keyboard:usb:v*p*
KEYBOARD_KEY_70039=leftctrl
Running evtest
indica que deveria estar funcionando:
Event: time 1399438713.757082, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70039
Event: time 1399438713.757082, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 1
Event: time 1399438713.757082, -------------- SYN_REPORT ------------
Event: time 1399438713.885078, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1399438713.885078, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 0
Event: time 1399438713.885078, -------------- SYN_REPORT ------------
Também não funciona em outras teclas não modificadoras que experimentei, como Z.
Também tentei mapear Caps Lockpara a tecla esquerda Ctrlem um teclado não USB, como tal:
keyboard:dmi:bvn*:bvr*:bd*:svn*:pn*:pvr*
KEYBOARD_KEY_3a=leftctrl
Isso funciona perfeitamente. Experimentei as versões 208 e 212 do udev com alguns teclados USB e não USB diferentes, no Fedora 20 e no Arch Linux.
Como posso remapear uma tecla não modificadora, como Caps Lockuma tecla modificadora, como Ctrlem um teclado USB usandoudev?
Atualizar
Se a própria esquerda Ctrlfor remapeada para outra tecla, a tecla remapeada começará a funcionar como a Ctrltecla esquerda. Por exemplo:
keyboard:usb:v*p*
KEYBOARD_KEY_700e0=grave
KEYBOARD_KEY_70035=esc
KEYBOARD_KEY_70039=leftctrl
KEYBOARD_KEY_70029=capslock
Esse comportamento é diferente de um teclado não USB, onde tanto a tecla remapeada quanto a tecla original podem permanecer como modificadores.