Perché questi comandi xte funzionano nel terminale, ma non quando associati a xbindkeys?


18

Questo xtecomando, quando lo eseguo in un terminale, attiva la modalità Expo:

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

Tuttavia, quando lo inserisco nel mio file .xbindkeysrc:

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

Non succede nulla quando faccio clic sul pulsante. La seguente associazione fa apparire la lettera X nella mia console quando premo il pulsante 11:

"xte 'key X'"
  b:11

Allora perché la rilegatura Expo non funziona?


Questo è l'output dettagliato di xbindkeys -n -vquando si fa clic sul pulsante 11:

Premi il pulsante!
e.xbutton.button = 11
e.xbutton.state = 16
"xte 'keydown Super_L' 'key W' 'keyup Super_L'"
    m: 0x0 + b: 11 (mouse)
ottenuto lo schermo 0 per la finestra 2bb
Avvia il programma con fork + exec call
Rilascio del pulsante!
e.xbutton.button = 11
e.xbutton.state = 16

E non succede nulla. Questo ha qualcosa a che fare con il modo in cui xbindkeysesegue il comando? (fork + exec call)


Tentativo numero due.

expo.sh:

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

L'esecuzione di questo script dalla riga di comando attiva Expo. Legandolo in xbindkeys:

"sh ~/expo.sh"
  b:11

Fare clic sul pulsante del mouse 11:

Premi il pulsante!
e.xbutton.button = 11
e.xbutton.state = 16
"sh ~ / expo.sh"
    m: 0x0 + b: 11 (mouse)
ottenuto lo schermo 0 per la finestra 2bb
Avvia il programma con fork + exec call

Non accade nulla!


1
Stai provando a premere <Super> <S>? So che xbindkeys + xte può essere schizzinoso a volte.
Seth

@Seth: corretto. Qualche modo per aggirare il problema?
Hubro,

1
Prova 'keydown Super_L' 'keydown S' 'keyup S' 'keyup Super_L'.
Seth,

@Seth: Temo che non faccia alcuna differenza :(
Hubro,

Hai riavviato xbindkeys dopo aver apportato le modifiche? A volte è necessario. Il tuo obiettivo finale è quello di aprire la panoramica dell'area di lavoro, immagino?
Seth,

Risposte:


17

Un'altra soluzione più semplice: invece di usare solo "b: 11" nella definizione di xbindkeys, usa "b: 11 + release". Attenderà fino al rilascio del pulsante per eseguire il comando.

Esempio:

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

2
Hubro dovrebbe tornare qui e contrassegnarlo come la risposta corretta ...
David Ljung Madison Stellar

7

Questo è molto strano. Si scopre che se il mio pulsante del mouse è ancora premuto (non ancora rilasciato) quando Super+Wviene simulato il tasto, non accade nulla. Non so di chi sia la colpa (forse Cinnamon?). Ci ho comunque aggirato, aggiungendo un breve ritardo al xtecomando:

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

Ora attende 0,1 secondi prima di simulare Super+S. Se si tiene premuto il pulsante del mouse per più di 0,1 secondi, non accade nulla.

Questa è una soluzione alternativa. Preferirei di gran lunga una risposta adeguata.


Hubro, per favore vedi la risposta più votata dall'utente215129 e contrassegnala come corretta
David Ljung Madison Stellar

1
@DavidLjungMadison No. Non è nemmeno una risposta alla mia domanda, solo un suggerimento per una soluzione.
Hubro,

1
Mi chiedo se capisci la risposta. Il problema è che stai tentando di inviare le chiavi mentre il pulsante è ancora inattivo. Attendere il rilascio del pulsante significa che non invierà i tasti fino a quando il pulsante non viene rilasciato, risolvendo così il problema. Non una soluzione alternativa, è una spiegazione del problema e un modo per risolverlo.
David Ljung Madison Stellar,

1
Allora non capisci ancora. Il problema è che stai cercando di digitare i tasti mentre il pulsante è inattivo e qualunque cosa lanci Expo cerca Super-S, non Btn-2 + Super-S. La tua soluzione è una soluzione alternativa perché non risolve il problema garantendo che il pulsante è attivo e non funziona in molte circostanze. La soluzione è (come spesso accade nella gestione degli eventi del mouse) attendere il rilascio del pulsante prima di attivare qualsiasi comando, questo assicura che il pulsante non sia mischiato alla sequenza di tasti.
David Ljung Madison Stellar,

2
Può confermare che la risposta user215129 non è corretta e non risponde alla domanda. Fare la mia indagine su questo problema in questo momento e nel mio caso cambiarlo in rilascio o ritardare non è un'opzione perché ne ho bisogno per eseguire un'azione mentre il pulsante è premuto, con un'azione diversa al rilascio. Vedi: askubuntu.com/questions/984054/…
Ethuil UI

2

Ho affrontato lo stesso problema.

"xte 'key b'"

funzionava nella console ma non nel file dei parametri xbindkeys. Ho cambiato b con il suo codice keysym, usando il comando "xev" per ottenerlo:

"xte 'key Ox62'"

Ha funzionato per me


1

Prova con + Release

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

Questo può aiutare.


1

Problemi simili durante l'utilizzo del keymapper sxhkcd. Si scopre che i tasti di scelta rapida effettivi vengono rilevati come ancora premuti.

Esistono alcune soluzioni alternative:

  • cerca l'evento di rilascio
  • aggiungi sleep 0.2davanti al tuo comando
  • usa la scorciatoia con il tasto leader
  • rilascia i modificatori di scorciatoia davanti alla sequenza xte

Tuttavia non puoi ottenere azioni in tempo reale con that =)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.