Consegui alterar o layout/mapeamento do teclado quando o X Window System está sendo executado usando ~/.Xmodmap
(e suponho que você também possa fazer isso diretamente pelo protocolo X , por exemplo, usando libxcb como um wrapper em torno de chamadas de protocolo X).
Consegui fazer o mesmo (um pouco) no console/tty (ou seja, quando o X não está em execução) usando loadkeys
.
Existe uma maneira de personalizar o layout do teclado de forma semelhante, mas a partir de uma única fonte , de tal forma que afete tanto o X quanto o console, ou seja. de uma forma que é "agnóstico X-and-console"?
(A única maneira que consigo pensar é escrevendo um "driver de teclado" que fale com a interface de entrada do kernel, evdev
, e envie a entrada que você deseja (através de uinput
?), ou algo assim, mas não sei se isso faz sentido , ou se houver uma maneira mais fácil.)
Sim, existe uma maneira, e é realmente assim que o pacote de configuração do console do Debian faz isso.
keyboard
, geralmente/etc/default/keyboard
. Esta é a fonte única. Pode ser editado com um editor de texto.setxkbmap
programa recebe essas mesmas configurações de XKB e configura um servidor X11 de acordo.setxkbmap
diretamente, com as/etc/default/keyboard
configurações, se ele se encontrar com uma tela X11. Assimdpkg-reconfigure keyboard-configuration
, a execução de um emulador de terminal GUI X11 afetará o layout do teclado X11.setupcon
script pega essas configurações de XKB, as passa pelockbcomp
utilitário para gerar um mapa de teclado e carrega esse mapa de teclado nos terminais virtuais do kernel comloadkeys
/kbdcontrol
.Outros sistemas operacionais systemd funcionam de maneira diferente, mas também possuem uma única fonte.
/etc/X11/xorg.conf.d/00-keyboard.conf
. Esta é a fonte única.systemd-localed
na inicialização. O arquivo não pode ser editado de forma útil com um editor de texto enquantosystemd-localed
estiver em execução, porque o serviço irá sobrescrevê-lo alegremente com suas próprias informações na memória.localectl
, que conversa com outro servidor que, por sua vez, conversa com osystemd-localed
.systemd-localed
converte as configurações de XKB em um nome de mapa de teclado de terminal virtual usando os mapeamentos em/usr/share/systemd/kbd-model-map
, nos quais ele grava/etc/vconsole.conf
. Ao contrário do sistema Debian, ele não gera mapas dinamicamente a partir das informações do XKB, mas seleciona apenas mapas estáticos pré-fornecidos listados no arquivo de mapas.systemd-vconsole-setup
é executado no bootstrap, lê/etc/vconsole.conf
e carrega o mapa do teclado nos terminais virtuais do kernel executandoloadkeys
.Leitura adicional
keyboard
. Manual do Usuário de configuração do console . Debian.ckbcomp
. Manual do Usuário de configuração do console . Debian.