Remapeando chaves que geram vários códigos de verificação

33

Eu tenho um ThinkPad W540. No teclado, existem quatro teclas multimídia acima do teclado numérico. Duas dessas chaves geram códigos de chave (e, aparentemente, scancodes) que correspondem à combinação de teclas, Win_L+ Le Win_L+ E. Em outras palavras, para a chave que gera Win_L+ L,
showkey --scancodesretorna isso:

0xe0 0x5b 0x26 0xa6 0xe0 0xdb

O setkeycodescomando requer sequências de dois bytes sem escape ou com escape de um byte para indicar códigos de varredura, e showkeyme dá muito mais do que isso, por isso não consigo mapear completamente essa chave para um dos códigos de chave gratuitos do meu sistema com um simples setkeycodes <scancode> <keycode>.

Eu realmente aprecio qualquer dica de como refazer essa tecla para outra coisa que simplesmente não duplique uma das combinações de teclas existentes no teclado.

Moonwalker
fonte
1
Você pode querer ter um olhar para isto: As teclas de atalho que são independentes de layout de teclado
terdon
1
Acho que isso pode ser complicado: pelo menos nos Thinkpads mais antigos, esse tipo de mapeamento é feito pelo controlador de bordo, não pelo sistema operacional.
mirabilos
1
Eu tenho um teclado de mídia multifuncional da Microsoft que tem o mesmo problema. Você conseguiu encontrar uma solução?
Osolmaz 20/04
5
Eu fiz algo semelhante em um Thinkpad t61 há pouco tempo, mapeando as teclas usando o /etc/acpi/events que está no acpidpacote e apenas definindo uma ação quando essas teclas de função foram pressionadas.
cesar
2
Você tem a configuração do Win_L como um modificador no X-windows? É padrão para mim.
mcr 12/07

Respostas:

1

Você pode fazer isso em duas etapas:

  1. pegar combinações de teclas
  2. para simular a digitação de teclas diferentes.

Você pode usar xchainkeyspara 1. e [xdotool][2]para 2 .:

Para criar a nova chave simulada com xdotool, a opção --clearmodifiersde keypode ser importante para neutralizar o modificador original simulado, pressione:

xdotool key --clearmodifiers Shift+a

Isso deve digitar uma capital Acomo teste.

Na configuração de xchainkeysin ~/.config/xchainkeys/xchainkeys.conf, podemos vincular o comando a uma combinação de teclas:

W-l :exec xdotool key --clearmodifiers Shift+a

Agora, a combinação de teclas Wine l( Winesquerda ou direita fazem o mesmo), bem como a chave que gera Win_L + L, devem criar um capital A.

(Existem muitos outros programas disponíveis para ambas as partes. No primeiro, pode-se usar a configuração de teclas de atalho de um ambiente de área de trabalho, mas eu prefiro mantê-lo independente dos DEs.)

Volker Siegel
fonte
2
O problema com esta solução, se não me engano, seria o mesmo que simplesmente usar a combinação de teclas para acionar uma ação - essa ação não seria acionada apenas por essa tecla, pressionando a combinação real de teclas que gera a mesma códigos também dariam o mesmo resultado. Em outras palavras, ele não satisfaz a condição "remapear essa chave para outra coisa que simplesmente não duplica uma das combinações de teclas existentes". Mas eu aprecio o esforço.
moonwalker
3
Sim, é verdade - eu não tinha certeza do que você quis dizer com essa frase, agora eu entendo. Mas parece que sua tecla produz os dois códigos de chave no hardware (ou seja, no firmware do teclado) - então não vejo problema, exceto se você detectar o tempo da tecla artificial pressionando "modifier down", "other key", "modificador ativado". Hmm ... talvez uma solução envolvendo solda é mais simples;)
Volker Siegel
1
@moonwalker Você pode tentar remapear o Win_L em vez da outra chave e verificar se ele remapeia o modificador da outra também?
Volker Siegel
1
hum, eu não estaria perdendo combinações como Win_L + R, Win + Break, Win + L, Win + etc. nesse caso?
moonwalker
1
Não, eu não penso assim. Win-L is Win-Shift-lMas você também pode mapear cadeias de combinações de teclas para um comando. Como Win-ae depois disso b. Sem o Win-a, bcomporta-se normal. Essa é de longe a característica mais útil xchainkeyse bastante singular, eu acho.
Volker Siegel
-2

Isso foi o que fiz no meu Thinkpad Yoga, a fim de religar a barra invertida / chave de tubo na chave correta. Porque, por algum motivo, em todas as máquinas virtuais do Linux, ele interpretava a tecla barra invertida \ pipe (\ |) como a chave menor que (<).

Primeiro, execute o comando: xev

Pressione a tecla desejada para obter o código da chave que você deseja religar:

Saída de evento xev KeyPress

Neste exemplo, o código-chave é 94 e a ação é "menor", mas queremos que ela tenha a ação de barra invertida e barra, também conhecida como "pipe"

Remapeie o código de chave 94 para a barra invertida e a tecla de barra, também conhecida como "pipe":

xmodmap -e 'keycode 94 = backslash bar'

Agora vamos tornar isso persistente:

xmodmap -pke | egrep "backslash|bar" | grep 94 > ~/.Xmodmap`

Retorna o seguinte para o arquivo ~/.Xmodmap:

keycode  94 = backslash bar backslash bar

Em seguida, você deve criar o seguinte arquivo para concluir a persistência:

echo "xmodmap .Xmodmap" > ~/.xinitrc
Kentgrav
fonte
1
A barra invertida / chave de pipe gera um único código de verificação, o tópico trata de remapear chaves que geram vários códigos de verificação.
moonwalker