Xbindkeys não funcionará corretamente

7

Eu tenho um pequeno problema. Eu queria remapear algumas teclas de atalho com as quais estou acostumado no meu sistema anterior, mas não consigo fazer com que funcione corretamente com xbindkeys .

xbindkeys reconhece a combinação mas de alguma forma o comando não dispara.

Se eu usar o comando

xdotool key braceleft

Ele me envia o sinal { correto no console. No entanto, se eu usar o mesmo comando em xbindkeys, nada acontece. Se eu substituir o comando por firefox , ele funcionará corretamente e abrirá o firefox, então eu acho que xbindkeys funciona.

Eu quero alcançar o seguinte:

Eu quero digitar o caractere { na janela ativa com Alt_R + 7 ou Alt_Left + Ctrl + 7 para que eu possa usar os dois. Eu sei que Alt_R (AltGr) é o caminho certo, mas em teclados alemães é difícil digitar o braceleft com a tecla AltGr (Alt_R) então eu tenho que usar Alt_L + Controle + 7 (como eu estava acostumado no meu sistema anterior). De alguma forma, consegui que funcionasse corretamente em 12.04, mas não consigo trabalhar em 14.04.

Alguma sugestão? Eu tentei vários comandos. Todos eles trabalharam no console, mas nenhum deles funcionou quando executado por xbindkeys

xdotool type '{'
xdotool key braceleft
xdotool key ISO_Level3_Shift+7
xvkbd -xsendevent -text '{'
xvkbd -xsendevent -text '\[Alt_R]+7'

Esta é minha configuração, que não funciona

"xdotool key braceleft"
Control+Alt + 7

No entanto, isso funciona:

"firefox"
Control+Alt + 7

Solução de edição

Como eu tentei várias outras coisas, notei que xdotool parece desencadear muito cedo. Eu alterei a configuração assim:

"sleep 1 && xdotool type --delay 15 '{'"
Control+Alt + 7

AGORA, ele envia o sinal {correto para a janela ativa. Agora, a única coisa que resta é reduzir o sono e atrasar para um valor viável, porque 1 segundo parece um pouco longo demais:)

** Informações Adicionais ** Bem, agora consegui encontrar valores adequados. No entanto, isso só funciona se você soltar as teclas até que a duração do sono termine. Se você for muito lento se não funcionar.

Esta é a minha configuração atual para todos os caracteres AltGr alemães não-convencionais

"sleep 0.2 && xdotool type --delay 15 '{'"
Control+Alt + 7

"sleep 0.2 && xdotool key --delay 15 at"
Control+Alt + q

"sleep 0.2 && xdotool type --delay 15 '€'"
Control+Alt + e

"sleep 0.2 && xdotool type --delay 15 '['"
Control+Alt + 8

"sleep 0.2 && xdotool type --delay 15 ']'"
Control+Alt + 9

"sleep 0.2 && xdotool type --delay 15 '}'"
Control+Alt + 0

"sleep 0.2 && xdotool type --delay 15 '~'"
Control+Alt + plus

No entanto, se você quiser digitar vários sinais @ (por exemplo), pressione Ctrl + Alt + Q como pretendido, mas libere todas as teclas e pressione-as novamente. Isso, no entanto, é muito, muito melhor do que não ter a opção Control + Alt em vez de AltGr, mas não é tão eficaz quanto eu fui usado também. Talvez eu encontre uma solução para isso também.

    
por Ello 26.04.2014 / 14:01

4 respostas

3

O problema com xdotool é enquanto chaves reais são pressionadas O Xorg envia repetidamente eventos keypress (veja em xev output). Para superar isso, você precisa desativar temporariamente o recurso de repetição e gerar o evento KeyRelease na chave que estava desativada.

Em vez de

"sleep 0.2 && xdotool type --delay 15 '{'"
  Control+Alt + 7

tente o seguinte:

"xset r off; xdotool keyup --window 0 7 type --clearmodifiers --window 0 '{'; xset r on"
  Control+Alt + 7
    
por midenok 14.05.2015 / 13:20
3

Como eu tentei várias outras coisas, notei que xdotool parece desencadear muito cedo. Eu alterei a configuração assim:

"sleep 1 && xdotool type --delay 15 '{'"
Control+Alt + 7

AGORA, ele envia o sinal {correto para a janela ativa. Agora, a única coisa que resta é reduzir o sono e atrasar para um valor viável, porque 1 segundo parece um pouco longo demais:)

** Informações Adicionais ** Bem, agora consegui encontrar valores adequados. No entanto, isso só funciona se você soltar as teclas até que a duração do sono termine. Se você for muito lento se não funcionar.

Esta é a minha configuração atual para todos os caracteres AltGr alemães não-convencionais

"sleep 0.2 && xdotool type --delay 15 '{'"
Control+Alt + 7

"sleep 0.2 && xdotool key --delay 15 at"
Control+Alt + q

"sleep 0.2 && xdotool type --delay 15 '€'"
Control+Alt + e

"sleep 0.2 && xdotool type --delay 15 '['"
Control+Alt + 8

"sleep 0.2 && xdotool type --delay 15 ']'"
Control+Alt + 9

"sleep 0.2 && xdotool type --delay 15 '}'"
Control+Alt + 0

"sleep 0.2 && xdotool type --delay 15 '~'"
Control+Alt + plus

No entanto, se você quiser digitar vários sinais @ (por exemplo), pressione Ctrl + Alt + Q como pretendido, mas libere todas as teclas e pressione-as novamente. Isso, no entanto, é muito, muito melhor do que não ter a opção Control + Alt em vez de AltGr, mas não é tão eficaz quanto eu fui usado também. Talvez eu encontre uma solução para isso também.

    
por Ello 26.04.2014 / 23:27
2

Como documentado em perguntas similares ( Por que esses comandos xte funcionam no terminal, mas não quando ligados com xbindkeys? ), você pode pedir ao xbindkeys para acionar eventos no release (na chave acima) :

"xdotool key braceleft"
   Release+Control+Alt + 7

Dessa forma, não há conflito entre as chaves usadas para o atalho e as enviadas.

    
por Michaël 30.10.2016 / 12:48
1

Não sei por que não funciona com xbindkeys , suponho que você precise especificar a janela para a qual escrever. Como alternativa, você pode usar xvkbd .

  1. Instale xvkbd

    sudo apt-get install xvkbd
    
  2. Adicione isso ao seu arquivo .xbindkeysrc

    "xvkbd -text '{'"
    Control+Alt + 7
    

Isso deve funcionar.

NOTAS

Por algum motivo, na minha máquina, xvkbd está usando um dos meus layouts secundários (espanhol) em vez do meu principal (inglês dos EUA) e isso faz com que { imprima " . Se você também tiver esse problema, basta brincar um pouco para descobrir qual chave corresponde a { com o layout usado. Como alternativa, você pode se aprofundar e descobrir onde xvkbd obtém suas configurações de locale .

    
por terdon 26.04.2014 / 14:47