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


18

Este xtecomando, quando o executo em um terminal, aciona o modo Expo:

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

No entanto, quando eu 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 encadernação faz com que a letra X apareça no meu console quando 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 -vquando você clica no botão 11:

Pressione o botão!
e.xbutton.button = 11
e.xbutton.state = 16
"xte 'keydown Super_L' 'chave W' 'keyup Super_L'"
    m: 0x0 + b: 11 (mouse)
tem tela 0 para a janela 2bb
Iniciar programa com chamada fork + exec
Liberação de botão!
e.xbutton.button = 11
e.xbutton.state = 16

E nada acontece. Isso tem algo a ver com a maneira como xbindkeyso comando é executado? (chamada fork ou exec)


Tentativa número dois.

expo.sh:

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

A execução desse script a partir da linha de comando ativa a Expo. Vinculando-o em xbindkeys:

"sh ~/expo.sh"
  b:11

Clicando no botão 11 do mouse:

Pressione o botão!
e.xbutton.button = 11
e.xbutton.state = 16
"sh ~ / expo.sh"
    m: 0x0 + b: 11 (mouse)
tem tela 0 para a janela 2bb
Iniciar programa com chamada fork + exec

Nada acontece!


11
Você está tentando pressionar <Super> <S>? Eu sei que xbindkeys + xte pode ser exigente às vezes.
Seth

@ Set: Correto. Alguma maneira de contornar a seletividade?
Hubro 19/07/2014

11
Tente 'keydown Super_L' 'keydown S' 'keyup S' 'keyup Super_L'.
Seth

@Seth: Não fez diferença, eu tenho medo :(
Hubro

Você reiniciou o xbindkeys depois de fazer as alterações? Às vezes isso é necessário. Seu objetivo final é abrir a visão geral do espaço de trabalho, eu acho?
Seth

Respostas:


17

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

Exemplo:

"sh ~/expo.sh"
  b:11 + release

2
Hubro deve voltar aqui e marcar este como a resposta correta ...
David Ljung Madison Stellar

7

Isso é muito estranho. Acontece que, se o botão do mouse ainda estiver pressionado (ainda não solto), quando a Super+Wcombinação de teclas é simulada, nada acontece. Não sei a quem culpar por isso (talvez canela?). Eu trabalhei em torno disso, adicionando um pequeno atraso ao xtecomando:

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

Agora aguarda 0,1 segundos antes de simular Super+S. Se eu pressionar e segurar o botão do mouse por mais de 0,1 segundos, nada acontece.

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


Hubro, consulte a resposta mais elevado avaliado por user215129 e marcá-lo como correto
David Ljung Madison Stellar

11
@DavidLjungMadison Não. Nem sequer é uma resposta para minha pergunta, apenas uma sugestão para uma solução alternativa.
Hubro

11
Gostaria de saber se você entende a resposta. O problema é que você está tentando enviar as chaves enquanto o botão ainda está pressionado. Aguardar a liberação do botão significa que ele não enviará as chaves até que o botão seja liberado, solucionando o problema. Não é uma solução alternativa, é uma explicação do problema e uma maneira de resolvê-lo.
David Ljung Madison Stellar

11
Então você ainda não entende. O problema é que você está tentando digitar as teclas enquanto o botão está pressionado, e o que quer que inicie a Expo está procurando Super-S, não Btn-2 + Super-S. Sua correção é uma solução alternativa, pois não resolve o problema, garantindo que o botão esteja aberto e não funcione em muitas circunstâncias. A solução é (como costuma ser o caso de lidar com eventos do mouse) aguardar a liberação do botão antes de acionar qualquer comando, isso garante que o botão não seja misturado com o pressionamento de tecla.
David Ljung Madison Stellar

2
Pode confirmar que a resposta do usuário215129 realmente não está correta e não responde à pergunta. Fazer minha própria investigação sobre esse problema agora e, no meu caso, alterá-lo para liberação ou atraso não é uma opção, pois preciso executar uma ação enquanto o botão é pressionado, com ações diferentes na liberação. Veja: askubuntu.com/questions/984054/…
Ethuil UI

2

Eu enfrentei o mesmo problema.

"xte 'key b'"

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

"xte 'key Ox62'"

Funcionou para mim


1

Experimente com + Release

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

Isso pode ajudar.


1

Tem um problema semelhante ao usar o keymapper sxhkcd. Acontece que suas teclas de atalho reais são detectadas como ainda sendo pressionadas.

Existem algumas soluções alternativas:

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

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.