Alterando o layout / mapeamento do teclado tanto no console (tty) como no X em uma maneira X / console agnóstica?

2

Eu consegui alterar o layout / mapeamento do teclado quando o Sistema X Window está sendo executado usando ~/.Xmodmap ( e suponho que você também poderia fazê-lo através do protocolo X diretamente, por exemplo, usando libxcb como um wrapper em torno das chamadas do protocolo X.

Eu consegui fazer o mesmo (um pouco) no console / tty (ou seja, quando o X não está rodando) usando loadkeys .

Is there a way to customize the keyboard layout similarly, but from a single source, in such a way that it affects both X and the console, ie. in a way that is "X-and-console agnostic"?

(A única maneira que posso pensar é escrevendo um "driver de teclado" que fala com a interface de entrada do kernel, evdev , e envia a entrada que você quer (através de uinput ?), ou algo assim, mas eu não sei se isso faz sentido, ou se há uma maneira mais fácil.)

    
por étale-cohomology 04.11.2018 / 01:56

1 resposta

4

Sim, existe uma maneira, e é de fato como o pacote de configuração do console do Debian faz isso.

  • Os layouts de teclado são especificados em termos de XKB (modelo, layout, variante e opções) pelo administrador em um arquivo denominado keyboard , geralmente /etc/default/keyboard . Esta é a única fonte. Pode ser editado com um editor de texto.
  • O programa setxkbmap recebe essas mesmas configurações de XKB e configura um servidor X11 de acordo.
    • O script do mantenedor de pós-instalação do pacote de configuração do teclado é executado setxkbmap diretamente, com as configurações de /etc/default/keyboard , se ele se encontrar em uma exibição X11. Assim, dpkg-reconfigure keyboard-configuration executado a partir de um emulador de terminal X11 GUI afetará o layout do teclado X11.
  • O script setupcon aceita essas configurações de XKB, passa-as pelo utilitário ckbcomp para gerar um mapa de teclado e carrega esse mapa de teclado nos terminais virtuais do kernel com loadkeys / kbdcontrol .
    • Este script é executado na inicialização do sistema por um serviço.
    • Também pode ser executado manualmente em outras situações.

Outros sistemas operacionais systemd funcionam de maneira diferente, mas também possuem uma única fonte.

  • O layout, a variante e as opções do XKB são armazenados em /etc/X11/xorg.conf.d/00-keyboard.conf . Esta é a única fonte.
    • Esse arquivo é lido diretamente pelo servidor X11 na inicialização e define o mapa do teclado X11 diretamente.
    • Este arquivo é analisado por systemd-localed na inicialização. O arquivo não pode ser editado com um editor de texto enquanto systemd-localed estiver sendo executado, porque o serviço irá substituí-lo alegremente por informações próprias na memória.
    • Para alterar as informações do XKB, uma pessoa executa localectl , que fala com outro servidor que, por sua vez, fala com systemd-localed .
  • systemd-localed converte as configurações do XKB em um nome de mapa de teclado do terminal virtual usando os mapeamentos em /usr/share/systemd/kbd-model-map , que são gravados em /etc/vconsole.conf . Ao contrário do sistema Debian, ele não gera mapas instantaneamente a partir das informações do XKB, mas seleciona apenas mapas estáticos pré-fornecidos listados no arquivo de mapa.
  • systemd-vconsole-setup é executado no bootstrap, lê /etc/vconsole.conf e carrega o mapa do teclado nos terminais virtuais do kernel executando loadkeys .

Leitura adicional

por 04.11.2018 / 12:31