Essa questão provavelmente deve ser retrocomputada, já que as pessoas devem usar o XKB, mas estou realmente curioso para saber como elas travaram a troca de grupo com xmodmap / XChangeKeyboardMapping()
.
Eu li o xmodmap man e a documentação do X11 lib, e parece que, para ter, digamos, layout de teclado em inglês e russo, é necessário mapear keysyms para algum keycode
(como [code_for_letter_l] --> XK_l XK_L XK_Cyrillic_de XK_Cyrillic_DE
) e, em seguida, mapear alguns códigos para MODE_SWITCH.
Pressionar este código junto com L fornece a letra russa "Д".
Mas como posso trancar isso?
Existe o modificador Lock, mas ele só pode ser usado com o XK_Caps_Lock keysym (e o ShiftLock que eu não entendo).
Adicionar bloqueio a MODE_SWITCH não tem efeito.
Com o mapa de teclado do console do Linux, posso adicionar o grupo a, digamos, AltGr e, em seguida, adicionar um código de acesso a AltGr_Lock para que ele seja travado. E isso funciona. Mas como faço isso no X?
Eu verifiquei vários modmaps para layouts cirílicos e outros não-latinos (as antigas distribuições têm muitos deles) e em todos os casos as pessoas usavam capslock para isso ou não tinham trava / trava.
Então, eu vim a idéia de que não era possível mudar o layout com teclas como "CTRL + Shift" antes do XKB (antes de 1996?), mas é ridículo.
Estou certo?