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
/ setxkbmap
e xset r rate
com 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-get
Debian 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 -i
opçã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-tweak
para 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-tweak
para corrigir o problema.
dconf write /org/gnome/desktop/input-sources/xkb-options "['caps:ctrl_modifier']"
A página de manual paraxkeyboard-config
tem uma lista de valores permitidos xkb-options
junto 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.