Eu tenho um pouco de problema. Eu queria remapear algumas teclas de atalho que estou acostumado no meu sistema anterior, mas não consigo fazê-lo funcionar corretamente xbindkeys
.
xbindkeys
reconhece a combinação, mas de alguma forma o comando não dispara.
Se eu usar o comando
xdotool key braceleft
Isso gera o {
sinal correto no console. No entanto, se eu usar o mesmo comando no xbindkeys, nada acontece. Se eu substituir o comando, firefox
ele funcionará corretamente e abrirá o Firefox, então acho que xbindkeys
funciona.
Eu quero alcançar o seguinte:
Quero digitar o caractere {
na janela ativa com
Alt_R+ 7ou Alt_Left+ Ctrl+ 7para que eu possa usar os dois. Eu sei que Alt_R(AltGr) é a maneira correta, mas em teclados alemães é difícil digitar o braceleft com a AltGrtecla (Alt_R), então eu tenho que usar Alt_L+ Control+ 7(como eu estava acostumado no meu sistema anterior). De alguma forma, consegui que funcionasse corretamente no 12.04, mas não consigo fazê-lo no 14.04.
Alguma sugestão? Eu tentei vários comandos. Todos eles funcionaram 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 é a minha configuração, que não funcionará
"xdotool key braceleft"
Control+Alt + 7
No entanto, isso funciona:
"firefox"
Control+Alt + 7
Solução Editar
Enquanto eu tentava outras coisas, notei que o xdotool parece disparar 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 o atraso para um valor viável, porque 1 segundo parece um pouco longo :)
** Informações de adição ** 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ê é muito lento, se não funcionar.
Esta é a minha configuração atual para todos os caracteres AltGr alemães não convenientes
"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 conforme pretendido, mas solte todas as teclas e pressione-o 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 também fui usado. Talvez eu encontre uma solução para isso também.
xdotool
repetir a tecla enquanto pressionado?xdotool getactivewindow key Home
Respostas:
O problema
xdotool
é que, enquanto as teclas reais são pressionadas, o Xorg envia repetidamente eventos de pressionamento de tecla (veja axev
saída). Para superar isso, você precisa desativar temporariamente o recurso de repetição e gerar o evento KeyRelease na chave que estava inativa.Ao invés de
tente o seguinte:
fonte
Enquanto eu tentava outras coisas, notei que o xdotool parece disparar muito cedo. Eu alterei a configuração assim:
AGORA ele envia o sinal {correto para a janela ativa. Agora, a única coisa que resta é reduzir o sono e o atraso para um valor viável, porque 1 segundo parece um pouco longo :)
** Informações de adição ** 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ê é muito lento, se não funcionar.
Esta é a minha configuração atual para todos os caracteres AltGr alemães não convenientes
No entanto, se você quiser digitar vários sinais @ (por exemplo), pressione Ctrl + Alt + Q conforme pretendido, mas solte todas as teclas e pressione-o 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 também fui usado. Talvez eu encontre uma solução para isso também.
fonte
sleep
, acho que você deseja adicionar+ release
aos combos de teclas. Isso dizxbindkeys
para esperar até que a chave seja liberada antes de disparar o comando.Conforme documentado em perguntas semelhantes ( por que esses comandos xte funcionam no terminal, mas não quando associados a xbindkeys? ), Você pode pedir
xbindkeys
para disparar eventos na liberação (na tecla acima):Dessa forma, não há conflito entre as teclas usadas para o atalho e as enviadas.
fonte
Recentemente, tive esse problema, em que tentei simular a tecla Reproduzir / Pausar da mídia (XF86AudioPlay) usando Ctrl + G. Depois de algumas pesquisas, parecia não apenas que eu precisava cancelar o Controle , mas também a tecla g (que é o que precisava do
sleep 0.1
atraso para começar). Se eu cancelar essas duas chaves usando okeyup
xdotool e a opção --clearmodifiers, ele funcionará. Este é o meu novo comando, no meu arquivo .xbindkeys.rc:fonte
Não sei por que não funciona
xbindkeys
, acho que você precisa especificar a janela na qual gravar. Como solução alternativa, você pode usarxvkbd
.Instalar
xvkbd
Adicione isso ao seu
.xbindkeysrc
arquivoIsso deve funcionar.
NOTAS
Por alguma razão, na minha máquina,
xvkbd
estou usando um dos meus layouts secundários (espanhol) em vez do principal (inglês dos EUA) e isso faz{
com que seja realmente impresso"
. Se você também tiver esse problema, basta brincar um pouco para descobrir qual tecla corresponde ao{
layout usado. Como alternativa, você pode se aprofundar e descobrir de ondexvkbd
obtém suaslocale
configurações.fonte