As teclas modificadoras não podem ser mapeadas para teclas normais no teclado USB com o udev

As teclas modificadoras não podem ser mapeadas para teclas normais no teclado USB com o udev

Usando um arquivo hwdb, /etc/udev/hwdb.d/99-keyboard.hwdbposso 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 evtestindica 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.

informação relacionada