Warum funktionieren diese xte-Befehle im Terminal, aber nicht, wenn sie an xbindkeys gebunden sind?

18

Dieser xteBefehl löst, wenn ich ihn in einem Terminal ausführe, den Expo-Modus aus:

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

Wenn ich dies jedoch in meine .xbindkeysrc-Datei lege:

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

Wenn ich auf die Schaltfläche klicke, passiert nichts. Mit der folgenden Bindung wird der Buchstabe X in meiner Konsole angezeigt, wenn ich die Taste 11 drücke:

"xte 'key X'"
  b:11

Warum funktioniert die Expo-Bindung nicht?


Dies ist die ausführliche Ausgabe von, xbindkeys -n -vwenn Sie auf Schaltfläche 11 klicken:

Knopfdruck!
e.xbutton.button = 11
e.xbutton.state = 16
xte 'keydown Super_L' 'key W' 'keyup Super_L' "
    m: 0x0 + b: 11 (Maus)
habe Bildschirm 0 für Fenster 2bb
Starten Sie das Programm mit fork + exec
Knopf loslassen!
e.xbutton.button = 11
e.xbutton.state = 16

Und nichts passiert. Hat dies etwas mit der Art und Weise zu tun, wie xbindkeysder Befehl ausgeführt wird? (Fork + Exec-Aufruf)


Versuch Nummer zwei.

expo.sh:

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

Durch Ausführen dieses Skripts über die Befehlszeile wird Expo aktiviert. Binden in xbindkeys:

"sh ~/expo.sh"
  b:11

Mausklick 11:

Knopfdruck!
e.xbutton.button = 11
e.xbutton.state = 16
"sh ~ / expo.sh"
    m: 0x0 + b: 11 (Maus)
habe Bildschirm 0 für Fenster 2bb
Starten Sie das Programm mit fork + exec

Nichts passiert!

Hubro
quelle
1
Sie versuchen, <Super> <S> zu drücken? Ich weiß, dass xbindkeys + xte manchmal wählerisch sein können.
Seth
@Seth: Richtig. Gibt es eine Möglichkeit, die Pingeligkeit zu umgehen?
Hubro
1
Versuchen Sie es 'keydown Super_L' 'keydown S' 'keyup S' 'keyup Super_L'.
Seth
@Seth: Hat keinen Unterschied gemacht Ich fürchte :(
Hubro
Haben Sie xbindkeys neu gestartet, nachdem Sie die Änderungen vorgenommen haben? Manchmal ist das notwendig. Ihr letztes Ziel ist es, die Übersicht über den Arbeitsbereich zu öffnen, denke ich?
Seth

Antworten:

17

Eine andere einfachere Lösung: Anstatt nur "b: 11" in der xbindkeys-Definition zu verwenden, verwenden Sie "b: 11 + release". Es wird warten, bis Sie die Taste loslassen, um den Befehl auszulösen.

Beispiel:

"sh ~/expo.sh"
  b:11 + release
user215129
quelle
2
Hubro sollte hierher zurückkommen und dies als die richtige Antwort markieren ...
David Ljung Madison Stellar
7

Das ist sehr seltsam. Es stellt sich heraus, dass Super+Wnichts passiert , wenn meine Maustaste beim Simulieren des Tastenanschlags immer noch gedrückt (noch nicht losgelassen) wird. Ich weiß nicht, wen ich dafür verantwortlich mache (vielleicht Zimt?). Ich habe es jedoch umgangen, indem ich dem xteBefehl eine kurze Verzögerung hinzugefügt habe :

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

Es wartet nun 0,1 Sekunden, bevor es simuliert Super+S. Wenn ich die Maustaste länger als 0,1 Sekunden drücke und halte , passiert nichts.

Dies ist eine Umgehungslösung. Ich würde eine richtige Antwort sehr bevorzugen.

Hubro
quelle
Hubro, bitte lesen Sie die höher bewertete Antwort von user215129 und markieren Sie sie als korrekt
David Ljung Madison Stellar
1
@DavidLjungMadison Nein. Es ist nicht einmal eine Antwort auf meine Frage, sondern nur ein Vorschlag zur Umgehung.
Hubro
1
Ich frage mich, ob Sie die Antwort verstehen. Das Problem ist, dass Sie versuchen, die Schlüssel zu senden, während die Taste noch gedrückt ist. Wenn Sie auf das Loslassen der Taste warten , werden die Schlüssel erst gesendet, wenn die Taste losgelassen wird, wodurch das Problem behoben wird. Keine Problemumgehung, sondern eine Erklärung des Problems und eine Möglichkeit, es zu lösen.
David Ljung Madison Stellar
1
Dann verstehst du immer noch nicht. Das Problem ist, dass Sie versuchen, Tasten einzugeben, während die Taste gedrückt ist, und bei jedem Start von Expo nach Super-S und nicht nach Btn-2 + Super-S gesucht wird. Ihr Fix ist eine Problemumgehung, da das Problem dadurch nicht behoben wird, dass sichergestellt wird, dass die Schaltfläche aktiv ist und unter vielen Umständen nicht funktioniert. Die Lösung besteht darin (wie es bei Mausereignissen häufig der Fall ist), auf das Loslassen der Taste zu warten, bevor Befehle ausgelöst werden. Dadurch wird sichergestellt, dass die Taste nicht mit dem Tastenanschlag gemischt wird.
David Ljung Madison Stellar
2
Kann bestätigen, dass die Antwort von user215129 in der Tat nicht korrekt ist und die Frage nicht beantwortet. Es ist keine Option, dieses Problem jetzt selbst zu untersuchen und es in meinem Fall auf Freigabe oder Verzögerung zu ändern, da ich eine Aktion ausführen muss, während die Taste gedrückt wird, mit einer anderen Aktion beim Freigeben. Siehe: askubuntu.com/questions/984054/…
Ethuil UI
2

Ich hatte das gleiche Problem.

"xte 'key b'"

funktionierte in der Konsole, aber nicht in der xbindkeys-Parameterdatei. Ich habe b durch seinen Keysym-Code geändert, indem ich den Befehl "xev" verwendet habe, um ihn zu erhalten:

"xte 'key Ox62'"

Es hat bei mir funktioniert

Sebastian Cossin
quelle
1

Versuchen Sie es mit + Release

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

Das könnte helfen.

Ivan Nikitovic
quelle
1

Bei Verwendung von sxhkcd keymapper tritt ein ähnliches Problem auf. Es stellt sich heraus, dass Ihre tatsächlichen Tastenkombinationen als noch gedrückt erkannt werden.

Es gibt einige Problemumgehungen:

  • Suchen Sie nach dem Release-Ereignis
  • fügen Sie sleep 0.2vor Ihrem Befehl hinzu
  • benutze die Abkürzung mit der Leader-Taste
  • Geben Sie Ihre Shortcut-Modifikatoren vor Ihrer xte-Sequenz frei

Allerdings kann man damit keine Echtzeitaktionen bekommen =)

Possum Gallo
quelle