Como posso alterar automaticamente o layout do teclado do sistema ao conectar um teclado externo?

4

Eu tenho um laptop estilo americano, o que é bom, mas eu também tenho um teclado USB ergonômico no estilo do Reino Unido.

Como tal, normalmente tenho o conjunto de esquemas dos EUA, mas quando me estabeleço na minha secretária e uso o teclado USB do Reino Unido, vejo-me a cometer erros estúpidos nos símbolos (normalmente um bom datilógrafo em ergo ou standard) .

Alguém pode pensar em uma maneira limpa de configurar o layout do teclado com base no layout inferido / USBID de qualquer teclado conectado?

Mesmo com uma configuração personalizada, como adicionar um ID USB específico a um script de tempo de execução que verifica se está conectado ou não. Isso pode ser feito sem o usuário ter que fazer o logout? Eu lembro de fazer algo parecido com o xorg.conf, mas isso exigia o logout.

    
por Andrew Bolster 09.11.2011 / 16:59

1 resposta

1

Você pode tentar escrever uma regra do udev. Conecte seu teclado e digite lsusb e anote sua ID de teclado, ela deve ser parecida com

Bus 001 Device 001: ID 13ab:001a name-of-the-keyboard

Nesse caso, o 13ab é o ID do fornecedor e o 001a é o ID do produto. Você pode desconectar seu teclado agora.

Vá para /etc/udev/rules.d/ e crie um novo arquivo, por exemplo, 80-keyboard.rules e escreva em (substitua idVendor e idProduct neste exemplo pelo id do seu teclado):

SUBSYSTEM=="input", ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="13ab", ATTRS{idProduct}=="001a", RUN+="/path/to/connect/script"
SUBSYSTEM=="input", ACTION=="remove", SUBSYSTEMS=="usb", ATTRS{idVendor}=="13ab", ATTRS{idProduct}=="001a", RUN+="/path/to/disconnect/script"

Você não pode simplesmente usar o setxkbmap do udev porque ele não possui as variáveis de ambiente necessárias definidas. Esta parte é emprestada de este aswer .

Script de conexão:

#!/bin/sh
/path/to/set-keyboard-layout.sh uk

Script de desconexão:

#!/bin/sh
/path/to/set-keyboard-layout.sh us

set-keyboard-layout.sh

#!/bin/sh
sleep 1
DISPLAY=":0.0"
HOME=/home/your-username
XAUTHORITY=$HOME/.Xauthority
export DISPLAY XAUTHORITY HOME
setxkbmap -layout 

Não esqueça de fazer chmod + x nos três scripts e mude o / home / seu-nome de usuário para o caminho da sua pasta pessoal.

Agora execute sudo service udev restart e conecte seu teclado e veja se o layout muda na conexão / desconexão.

Eu testei isso com meu hdd usb e ele funciona (exceto que eu tinha bloco em vez de entrada para subsistema).

    
por jeremija 21.08.2012 / 08:38