Costumo plugar um teclado USB no meu laptop (além do monitor e mouse externos, que virtualmente convertem meu laptop em um computador de mesa) e prefiro usar um layout de teclado diferente.
Eu tenho que alterar manualmente o layout do teclado atual cada vez que plugo este teclado USB.
E eu gostaria de usar uma maneira automatizada para isso, se possível.
A resposta de Radu à pergunta aqui fornece algumas pistas, mas parece que vou precisar de um script de inicialização para esta tarefa, pois o ID do dispositivo do meu teclado USB muda sempre que o computador é iniciado.
Esse script de inicialização provavelmente incluirá primeiro o comando xinput -list | grep "USB Keyboard"
e outro comando para pegar o primeiro número de ID do teclado USB exibido e depois usá-lo no comando final para definir o layout escolhido para o teclado USB, conforme abaixo:
setxkbmap -device <NUMBER> -layout <LAYOUT>
fonte
Respostas:
Depois de um pouco de pesquisa, encontrei uma solução, embora ainda esteja aberto a outras respostas (provavelmente melhores).
Aqui está um script de inicialização (que pode ser adicionado a aplicativos de inicialização ) que irá definir o maually entrou usbkbd_layout variável para o usbkbd dispositivo id constatada s na -list xinput :
Esse script é bastante útil (e mais estável) para cenários em que o usuário começa a usar o laptop em uma configuração de área de trabalho (com teclado, mouse e monitor externos etc.) e também pode ser executado manualmente sempre que o teclado USB externo estiver conectado ...
==================================================== ========================
A MELHOR (quase perfeita) SOLUÇÃO - encontrada graças ao MinimusHeximus e aos respectivos colaboradores do tópico que ele mencionou em seu comentário abaixo:
Agora posso apenas conectar meu teclado USB e aplicar automaticamente seu layout de teclado (TR-F) diferente, mantendo o layout de teclado padrão (TR-Q) no meu laptop!
Aqui estão os arquivos e seu conteúdo que tornam isso possível:
/etc/udev/rules.d/00-usb-keyboard.rules
/home/sadi/.bin/usb-keyboard-in_udev
/home/sadi/.bin/usb-keyboard-in
/home/sadi/.bin/usb-keyboard-out_udev
/home/sadi/.bin/usb-keyboard-out
Notas:
chmod - 755 /home/sadi/.bin/usb-keyboard-*
PARA ADAPTAR ESTA CONFIGURAÇÃO A DIFERENTES REQUISITOS:
lsusb
(Por exemplo, a minhalsusb
saída tem isso para o meu teclado USB:Bus 001 Device 006: ID 09da:0260 A4 Tech Co., Ltd
)xinput -list | grep "USB Keyboard"
me fornece duas linhas;↳ USB Keyboard id=14 [slave keyboard (3)]
e↳ USB Keyboard id=16 [slave keyboard (3)]
; que são filtradasawk
usando "=" como delimitador de campo e capturando a segunda parte; depois cortando apenas o dois primeiros dígitos e, em seguida, usando apenas o valor na primeira linha)fonte
IF
, tive que usar umFOR
. Funciona para mim agora, obrigado! gist.github.com/zvictor/193b567c14b5b6a679fePode-se especificar as opções do driver X11 dentro da regra do udev, nenhum script personalizado é necessário. Como exemplo, aqui está o conteúdo de minhas /etc/udev/rules.d/99-usb-kbd.rules
Essa regra garante que um teclado USB específico use o layout dos EUA no Xorg (o teclado interno do meu laptop é alemão e esse também é o meu layout principal). Pontos importantes:
idVendor
eidProduct
do seu dispositivo usandolsusb
ouevtest
/usr/share/X11/xkb/symbols
. Preste atenção para especificar um layout válido e uma variante válida./lib/udev/rules.d/64-xorg-xkb.rules
fonte
/var/log/Xorg.0.log
possíveis problemas. Você também pode usarudevadm info
para verificar se as configurações foram aplicadas corretamente.gsettings set org.gnome.settings-daemon.plugins.keyboard active false
. Se você também adicionar essa nota, eu vou tentar marcar o seu como a resposta (em vez de que desajeitado, estrada longa e sinuosa ;-)/usr/share/X11/xkb/rules/evdev.lst
Acabei de melhorar esta solução para um teclado bépo Typematrix (versão francesa do excelente dvorak otimizado) e em um amplo contexto do sistema (supõe-se que você tenha acesso root à máquina). Ele precisa de apenas 3 arquivos para funcionar. Você pode consultar um arquivo de log em caso de falha para descobrir o que está falhando.
/etc/udev/96-usb-keyboard.rules
/etc/udev/bepo-typematrix-kbd.sh (absolutamente necessário para usar um script de segundo plano intermediário)
/ etc / udev / bepo-typematrix-kbd
fonte
Depois de mexer bastante, é para isso que eu tenho agora. Talvez eu escreva um artigo completo e publique o código em um repositório, se isso for interessante.
Configure um novo conjunto de regras para o udev assim:
A regra deve chamar um script de shell sempre que alguma ação é acionada por um dispositivo com a combinação fornecida de fornecedor e ID do produto.
Após adicionar o novo conjunto de regras, reinicie o serviço udev:
Nota: Não consegui obter resultados confiáveis fornecendo regras de correspondência mais específicas nesse arquivo. Mais significativamente, a adição de uma
ACTION
regra de correspondência não funcionou. Até onde eu sei, o script foi acionado de qualquer maneira. Ao adicionarACTION=="add"
, o script ainda seria chamado ao remover o dispositivo. Muito estranho e confuso.No entanto, a ação que acionou a regra do udev estará disponível para o script chamado, como mostrado abaixo.
Em seguida, o próprio script. Bem, não exatamente. Anote o
wrapper
sufixo no nome do arquivo. Isso indica que esse não é o script real, mas um wrapper que chama o script e o executa em segundo plano para que o udev possa concluir seu processo.~/.bin/switch-kb-layout-wrapper.sh
:A variável
ACTION
contém a ação do udev que foi acionada pelo dispositivo. Ele gera valores comoadd
(o dispositivo foi conectado) eremove
(o dispositivo foi removido). Nós os usaremos mais tarde.~/.bin/switch-kb-layout.sh
:Substitua meu nome de usuário pelo seu ao definir a
HOME
variável ($(whoami)
não funcionará aqui, pois isso não será chamado pelo usuário, mas porroot
).Para fins de teste, adicionei algumas linhas que registram determinados eventos em um arquivo no meu diretório pessoal para ver se tudo funciona. Você pode removê-los com segurança.
Finalmente, esses scripts precisam ter permissões de execução. Também pode ser importante observar que esses scripts serão chamados pelo
root
usuário, portanto, tenha cuidado com o que você faz lá.fonte
gsettings set org.gnome.settings-daemon.plugins.keyboard active false
não funciona como pretendido, pois o script é executadoroot
. Nos meus testes, a linha não teve efeito sobre essa configuração.gsettings set org.gnome.settings-daemon.plugins.keyboard active false
como usuário de uma vez por todas, e, em seguida, usar esse script sem osgsettings set
comandos ...Eu tive algum problema de permissão com o script executado pelo udev. Eu resolvi com o sudo da seguinte maneira:
Defina o mapa do teclado para cada dispositivo
fonte
Você também pode defini-lo em um arquivo de configuração do Xorg.
É apresentado nesta resposta de stackexchange: /superuser//a/946575/437492
fonte
/etc/X11/xorg.conf.d/
(esse é o lugar para você).