Recentemente, comprei um teclado Unicomp que vem com as teclas right-alt e Windows trocadas. O teclado se identifica assim em lsusb:
Bus 003 Device 002: ID 17f6:0822 Unicomp, Inc
Existe uma maneira de fazer com que o kernel (ou seja, não baseado no xmodmap) troque as teclas right-alt e windows para que cada aplicativo as veja nos locais trocados, mesmo que recebam entrada bruta do teclado (trocar coisas com o xmodmap não fará isso) ? Existe uma maneira de ter isso apenas para este teclado?
linux
keyboard-layout
FUZxxl
fonte
fonte
Respostas:
Sim, é possível usando o XKB. Diferentemente do xmodmap, o XKB pode remapear suas chaves para dispositivos individuais.
Nota: Verifique se você possui o xkbcomp> 1.2.0
Primeiro, liste seus dispositivos com:
xinput list
Você obterá algo como isto:
Identifique a string do seu dispositivo e edite o seguinte script de shell, alterando a linha sed por uma que se encaixe no nome do seu dispositivo. Em seguida, altere as teclas necessárias para remapear.
Exemplo: Carregue
xev
e pressione a tecla que deseja remapear. Suponha que você descubra o código-chave 84. Pesquise 84 em https://gist.github.com/zoqaeski/3880640 . O nome da chave existe<KP5>
. Em seguida, procure a chave pela qual você deseja que ela seja substituída (no mesmo link, mais abaixo ) e copie o que está dentro dos colchetes. Repita o processo para todas as chaves que você deseja.Em seguida, faça a fonte (você pode adicioná-lo ao seu .xinitrc). Tudo feito! Agora, pressionar as teclas deve gerar a saída desejada, apenas para o dispositivo que você especificou.
Edit : Recentemente, notei que, por algum motivo, a nova configuração não é aplicada imediatamente. Você deve primeiro pressionar uma tecla no outro teclado e testar as teclas configuradas no teclado modificado. Não sei por que isso acontece, talvez algum tipo de cache.
fonte
sed -n 's/.*G19 Gaming Keyboard.*id=\([0-9]*\).*keyboard.*/\1/p'
c) Sim, você definitivamente deve testá-lo primeiro substituindo$remote_id
pelo número de identificação. Observe que existem duas referências a$remote_id
isso, você mudou as duas?$remote_id
, certifique-se de comentar a linha,[ "$remote_id" ] || exit
caso ainda não a tenha, caso contrário ela será liberada.$9
não funcionará, você quis dizer9
?Para quem está vindo do Google e quer uma resposta mais alinhada com o que o questionador esperava originalmente, conheço duas maneiras de remapear eventos no
evdev
nível para que a alteração se aplique a todos os aplicativos:O udev fornece uma API para modificar as entradas do banco de dados de hardware que controlam os mapeamentos entre scancodes e keycodes. Esta página do ArchiWiki , que contém instruções, diz explicitamente que funcionará tanto para o X11 quanto para a entrada do console.
A essência é que você cria uma entrada personalizada na
/etc/udev/hwdb.d/
qual consiste em um padrão de correspondência de dispositivo e algumas definições de remapeamento de scancode para keycode, depois executasystemd-hwdb update
para reconstruir o banco de dados eudevadm trigger
aplicá-lo sem reinicialização.Como o Wayland não usa o subsistema de teclado do X11 e os principais compositores do Wayland, como o GNOME Shell e o Weston, não implementam interfaces de usuário para configurar os aspectos relevantes da libinput, alguém escreveu um daemon chamado evdevremapkeys que resolve o problema de maneira semelhante ao driver de espaço de usuário G15Daemon da Logitech Teclados para jogos G15.
(Ele engole os eventos que pretende remapear, para que mais ninguém escute no dispositivo possa vê-los, emite os eventos corrigidos por meio da
uinput
API para criar dispositivos de entrada no nível do kernel a partir do espaço do usuário.)fonte
Para aqueles que não tiveram sucesso com a opção @Watcom, basta colocar seu novo arquivo de mapeamento, como:
para / usr / share / X11 / xkb / symbols / como talvez root (ubuntu, pode ser diferente para o seu distrib), chame o arquivo de 'custom'. Peça sua string de layout atual
setxkbmap -device <device id> -print | grep xkb_symbols
e adicione-+custom
a. Defina um novo layout com chaves remapeadas e uma sequência de layout modificada:O efeito não é permanente e, infelizmente, é redefinido quando outro teclado está conectado, ainda não se sabe como corrigi-lo. Você pode adicionar o comando acima ao seu
.bashrc
, para que as chaves sejam trocadas na reinicialização, se necessário.fonte