Impedir a redefinição do layout do teclado quando o teclado USB estiver conectado

Impedir a redefinição do layout do teclado quando o teclado USB estiver conectado

Sempre que conecto um teclado USB, o layout de todos os teclados é redefinido para algum padrão do sistema (um layout dos EUA que não possui modificadores e outras teclas do jeito que eu quero). Observei isso em muitos sistemas Debian e Ubuntu, incluindo Ubuntu 16.04 e 18.04. Esse comportamentojá existe há muito tempo.

Eu uso o X11 sem ambiente de desktop (embora alguns demônios do Gnome tendam a começar). Defino o layout do meu teclado com XKB (especificamente … | xkbcomp - "$DISPLAY") quando faço login.

Quando insiro um teclado USB, quero que ele tenha o meu layout, não o layout do sistema. Na verdade, gostaria que o sistema continuasse usando meu layout atual para os teclados já presentes, se houver, e para o teclado recém-inserido. Se isso não for possível, eu me contentaria em reaplicar um layout queEUescolheu.

Da mesma forma, a taxa de repetição em ambos os teclados é definida como o padrão de tempo de login, em vez da taxa que defini com xset r.

Como posso evitar que um hotplug de teclado redefina o layout do teclado e a taxa de repetição?Ou, na falta disso, como posso pelo menos redefini-lo para o layout escolhido?

Há uma maneira bastante desajeitada que écom uma regra do udev. É desajeitado porque pressupõe que existe um único servidor X e, o mais problemático, pressupõe que o usuário tenha permissão de root.Eu não tenho permissões de root, portanto, qualquer método que envolva a definição de regras ou edição do udev Xorg.confé inaplicável aqui.

Responder1

Defino o layout do meu teclado com XKB (especificamente… | xkbcomp - "$DISPLAY") quando faço login.

Como posso evitar que um hotplug de teclado redefina o layout do teclado e a taxa de repetição?

Não é que isso o redefina. Se você já tiver um teclado conectado e estiver adicionando um segundo, o teclado antigo continuará usando as mesmas configurações.

O problema é que a maneira do lado do cliente de carregar uma configuração xkb (com xkbcomp) ou do lado do servidor (com setxkbmap) aplicará apenas o layout aos dispositivos reais existentes, não à abstração do "Teclado principal". Quando um dispositivo é desconectado, suas configurações são perdidas.

A solução é monitorar-se quando um teclado for adicionado e ligar para xkbcomp/ setxkbmape xset r ratecom suas configurações preferidas.

Para isso, você faznãoprecisa de qualquer regra do udev ou de quaisquer privilégios de root;qualquerO programa cliente X11 pode monitorar alterações nos dispositivos de entrada por meio da extensão de entrada X11 e agir sobre elas.

Um programa que pode ser usado a partir do shell para isso e é facilmente instalável no apt-getDebian e distros similares é o inputplug.

Exemplo:

$ cat ./on-new-kbd
#! /bin/sh
keymap=/path/to/your/keymap

echo >&2 "$@"
event=$1 id=$2 type=$3

case "$event $type" in
'XIDeviceEnabled XISlaveKeyboard')
        xset r rate 200 50
        xkbcomp -i "$id" "$keymap" "$DISPLAY"
esac

$ chmod 755 ./on-new-kbd

$ inputplug -d -c ./on-new-kbd

<plug keyboard>

XIDeviceEnabled 13 XISlavePointer GASIA USB KB V11
XISlaveAdded 13 XIFloatingSlave GASIA USB KB V11
XISlaveAdded 14 XIFloatingSlave GASIA USB KB V11
XIDeviceEnabled 14 XISlaveKeyboard GASIA USB KB V11

Observe a -iopção xkbcomp– você pode usar configurações diferentes para cada teclado. O protocolo também permite definir a taxa de repetição por dispositivo, mas não sei como fazer isso com o xset.

É claro que seu gerenciador de janelas/ambiente de área de trabalho pode escutar esses eventos e substituir suas configurações.

Responder2

Acabei de encontrar o mesmo problema ao usar um switch USB para compartilhar um teclado entre dois sistemas. Quando volto para meu sistema Pop!_OS 20.04 LTS, um sistema derivado do Debian/Ubuntu, as configurações desaparecem. Eu tenho usado gnome-tweakpara configurar Caps Lockpara agir como um arquivo Ctrl.

Este é o cenário que continuou agindo para mim. Encontrei essa maneira de linha de comando para configurá-lo como desejo, para não precisar continuar correndo gnome-tweakpara corrigir o problema.

dconf write  /org/gnome/desktop/input-sources/xkb-options "['caps:ctrl_modifier']"

A página de manual paraxkeyboard-configtem uma lista de valores permitidos xkb-optionsjunto com breves descrições.

Não sei como evitar que o problema aconteça, mas é menos irritante agora que posso corrigi-lo na linha de comando.

informação relacionada