Wie erstelle ich eine Verknüpfung, die einen xdotool-Befehl ausführt, um einen Tastendruck zu simulieren?

10

Ich versuche, einen Medientastendruck mithilfe einer benutzerdefinierten Verknüpfung zu simulieren.

Bisher konnte ich die benötigte Simulation mit dem folgenden Befehl erreichen:

xdotool key XF86AudioPlay

Es funktioniert perfekt, es pausiert oder startet den Musik-Player jedes Mal, wenn er ausgeführt wird.

Das Problem tritt auf, wenn versucht wird, es als Verknüpfung auszuführen.

Zuerst habe ich versucht, einen Alias ​​mit einer benutzerdefinierten Verknüpfung auszuführen, aber es hat nicht funktioniert.

Wie zu dieser Frage erklärt :

Die von Tastaturbindungen ausgeführten Befehle werden nicht über eine Shell analysiert. Am besten erstellen Sie ein Verzeichnis in Ihrem Homedir.

Als nächstes habe ich das vorgeschlagene Skript erstellt und es benannt simplay:

#!/bin/sh
xdotool key XF86AudioPlay

Es befindet sich in einem Bin-Ordner, der Teil von PATHist. Dies funktioniert einwandfrei und kann von jedem Ort aus ausgeführt werden.

Beim Versuch, die benutzerdefinierte Verknüpfung zu erstellen, konnte ich sie nicht ausführen. Die Konfiguration lautet wie folgt:

Name: test
Command: simplay

Shortcut: Ctrl+Alt+R

Nachdem ich ein bisschen mehr gesucht hatte, fand ich einen anderen Weg, um die Verknüpfung auszuführen:

gnome-terminal -e simplay

Ich habe es auf einem Terminal versucht und festgestellt, dass beim Ausführen schnell ein neues Terminalfenster geöffnet, der untergeordnete Prozess ausgeführt, die Musik angehalten und das Fenster sofort geschlossen wird.

Ich habe den Befehl in der Verknüpfung geändert, und als ich ihn drückte, bemerkte ich dasselbe Verhalten beim Öffnen eines Terminals und beim sofortigen Schließen, aber dieses Mal hat der untergeordnete Prozess die Musik nicht angehalten, was mich glauben lässt, dass das Skript bei allen meinen vorherigen Versuchen aufgerufen wurde aber es ist irgendwie nicht in der Lage auszuführen.

Wie kann ich dieses Problem nach Ihrem Wissen lösen?

Jorge Cuevas
quelle

Antworten:

12

Das Thema

Ihre Verknüpfung wird gleichzeitig mit Ihrem simulierten Tastendruck ausgeführt

Wenn Sie einen Befehl ausführen, der einen Tastendruck simuliert, der mit ... einem weiteren Tastendruck aufgerufen wird, simulieren Sie tatsächlich einen dritten Tastendruck, bei dem es sich um die Kombination aus beiden handelt :)

Lösen

Sie müssen verhindern, dass Ihre Verknüpfung gleichzeitig mit dem simulierten Tastendruck ausgeführt wird. Fügen Sie also eine Verzögerung hinzu:

/bin/bash -c "sleep 1 && xdotool key XF86AudioPlay"

Fügen Sie diesen Befehl einer Verknüpfung hinzu, und er sollte funktionieren.

Hinweis

Natürlich können Sie ein wenig mit dem Wert in spielen sleep 1, um ihn auf den besten Wert einzustellen, der sich angenehm anfühlt, je nachdem, wie "klebrig" die Kombination gedrückt wird. sleep 0.5könnte sehr gut tun, und die Verknüpfung schneller handeln.

Jacob Vlijm
quelle
8

Sie können den Befehl auch direkt in der Verknüpfungsdefinition verwenden, sodass Sie kein eigenständiges Skript dafür erstellen müssen.

Anstatt die Problemumgehung "Schlaf 1" zu verwenden, können Sie das --clearmodifiersFlag verwenden, dh Ihre benutzerdefinierte Verknüpfung würde folgendermaßen aussehen:

Name: test
Command: xdotool key --clearmodifiers XF86AudioPlay

Shortcut: Ctrl+Alt+R

Bei mir funktioniert dies beim Zuordnen der Verknüpfungen zu Super+F9.

Jan.
quelle
Ist das obige Codefragment eine Datei? Wenn ja, müssen Sie es an einer bestimmten Stelle ablegen oder einen bestimmten Befehl ausführen, um die Verknüpfung zu implementieren?
JellicleCat
1
Das Snippet ist nur eine Beschreibung der von mir verwendeten Verknüpfung. In Ubuntu können Sie benutzerdefinierte Verknüpfungen in den Tastatureinstellungen erstellen. Seitdem habe ich jedoch meine Ubuntu-Version aktualisiert und kann nun die Aktion "Wiedergabe (oder Wiedergabe / Pause)" direkt einer Tastenkombination meiner Wahl zuordnen, die sich als zuverlässiger als die Verwendung von xdotool erweist.
Januar
Noch besser als ein --clearmodifiers ist es, einen "Keyup" für den Hotkey auszugeben, mit dem Sie das Skript aufrufen. Ein kleiner Nachteil ist, dass Sie das Skript aktualisieren müssen, wenn Sie den Hotkey ändern, um das Skript aufzurufen.
Vanadium
1

Eine Alternative (für eine schnellere Leistung) zur Verwendung sleep 1 && xdotool ...ist die Verwendung von xdotool zum Freigeben Ihrer Tastenkombinationen. Etwas länger, aber Sie können auch verwenden

/bin/bash -c "xdotool keyup R Alt_L Ctrl_L && xdotool key XF86AudioPlay"
Alexander Mot
quelle