Por que esses comandos xte funcionam no terminal, mas não quando ligados com xbindkeys?

14

Este comando xte , quando eu o executo em um terminal, aciona o modo Expo:

xte 'keydown Super_L' 'key S' 'keyup Super_L'

No entanto, quando coloco isso no meu arquivo .xbindkeysrc:

"xte 'keydown Super_L' 'key S' 'keyup Super_L'"
  b:11

Nada acontece quando clico no botão. A seguinte ligação faz a letra X aparecer no meu console quando eu pressiono o botão 11:

"xte 'key X'"
  b:11

Então, por que a ligação da Expo não funciona?

Esta é a saída detalhada de xbindkeys -n -v ao clicar no botão 11:

Button press !
e.xbutton.button=11
e.xbutton.state=16
"xte 'keydown Super_L' 'key W' 'keyup Super_L'"
    m:0x0 + b:11   (mouse)
got screen 0 for window 2bb
Start program with fork+exec call
Button release !
e.xbutton.button=11
e.xbutton.state=16

E nada acontece. Isso tem alguma coisa a ver com a maneira como xbindkeys executa o comando? (fork + exec call)

Tentativa de número dois.

expo.sh:

#!/usr/bin/env bash
export DISPLAY=:0
xte 'keydown Super_L' 'key S' 'keyup Super_L'

Executar este script a partir da linha de comando ativa a Expo. Ligando-o em xbindkeys:

"sh ~/expo.sh"
  b:11

Clique no botão 11 do mouse:

Button press !
e.xbutton.button=11
e.xbutton.state=16
"sh ~/expo.sh"
    m:0x0 + b:11   (mouse)
got screen 0 for window 2bb
Start program with fork+exec call

Nada acontece!

    
por Hubro 19.07.2014 / 17:20

5 respostas

5

Isso é muito estranho. Acontece que, se o botão do meu mouse ainda estiver pressionado (ainda não liberado) quando o pressionamento de tecla Super+W for simulado, nada acontecerá. Eu não sei quem culpar por isso (talvez Cinnamon?). Eu tenho trabalhado com isso, adicionando um pequeno atraso ao comando xte :

xte 'usleep 100000' 'keydown Super_L' 'key S' 'keyup Super_L'

Aguarda agora 0,1 segundos antes de simular Super+S . Se eu mantiver pressionado o botão mais do que 0,1 segundos, nada acontece.

Esta é uma resposta alternativa. Eu preferiria mais uma resposta adequada.

    
por Hubro 19.07.2014 / 19:17
12

Outra solução mais simples: em vez de usar apenas "b: 11" na definição de xbindkeys, use "b: 11 + release". Ele vai esperar até você soltar o botão para disparar o comando.

Exemplo:

"sh ~/expo.sh"
  b:11 + release
    
por user215129 08.10.2014 / 22:34
2

Eu enfrentei o mesmo problema.

"xte 'key b'"

estava funcionando no console, mas não no arquivo de parâmetro xbindkeys. Eu mudei b pelo seu código de keysym, usando o comando "xev" para obtê-lo:

"xte 'key Ox62'"

Funcionou para mim

    
por sebastien cossin 01.11.2015 / 11:21
1

Experimente com + Release

"xte 'keydown Super_L' 'key S' 'keyup Super_L'"
b:11 + Release

Isso pode ajudar.

    
por Ivan Nikitovic 15.01.2016 / 21:45
1

Tenha um problema semelhante ao usar o keymapper sxhkcd. Acontece que as teclas de atalho atuais são detectadas como ainda sendo pressionadas.

Existem algumas semias alternativas:

  • procure o evento de lançamento
  • adicione sleep 0.2 na frente do seu comando
  • use o atalho com a chave do líder
  • libere seus modificadores de atalho na frente de sua sequência de xte

No entanto, você não pode obter ações em tempo real com isso =)

    
por Possum Gallo 14.09.2017 / 09:38