web-dev-qa-db-ja.com

xdotoolコマンドを実行してキーの押下をシミュレートするショートカットを作成する方法は?

カスタムショートカットを使用して、メディアキーの押下をシミュレートしようとしています。

これまでのところ、次のコマンドを使用して必要なシミュレーションを達成できました。

xdotool key XF86AudioPlay

完璧に動作し、実行するたびに音楽プレーヤーを一時停止または起動します。

ショートカットとして実行しようとすると問題が発生します。

最初に、カスタムショートカットでエイリアスを実行しようとしましたが、機能しませんでした。

この質問 で説明したように:

キーボードバインドによって実行されるコマンドは、シェルを介して解析されません。最善の方法は、homedirにディレクトリbinを作成することです。

次に、推奨スクリプトを作成し、simplayという名前を付けました。

#! /bin/sh

xdotool key XF86AudioPlay

PATHの一部であるbinフォルダー内にあります。これは正常に機能し、任意の場所から実行できます。

カスタムショートカットを作成しようとしたときに、実行することができませんでした。構成は次のとおりです。

Name: test
Command: simplay

Shortcut: Ctrl+Alt+R

もう少し検索した後、ショートカットを実行する別の方法を見つけました。

gnome-terminal -e simplay

ターミナルで試してみたところ、実行すると新しいターミナルウィンドウが急速に開き、子プロセスが実行され、音楽が一時停止し、すぐにウィンドウが閉じられることがわかりました。

ショートカットのコマンドを変更し、それを押すと、ターミナルを開いてすぐに閉じるという同じ動作に気付きましたが、今回は子プロセスが音楽を一時停止しなかったため、以前のすべての試行でスクリプトが呼び出されたと思いますしかし、どういうわけか実行できません。

あなたの知識に従ってこの問題をどのように解決できますか?

8
Jorge Cuevas

問題

ショートカットは、シミュレートされたキーの押下と同時に実行されます

...キーを押してシミュレートするコマンドを実行し、...別のキーを押すと、実際にはthirdキープレスをシミュレートします。これは両方の組み合わせです:)

解決する

シミュレートされたキーの押下と同時にショートカットが実行されるのを防ぐ、つまり遅延を追加する必要があります。

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

このコマンドをショートカットに追加すると、機能するはずです。

注意

もちろん、sleep 1の値を少し試して、コンビネーションがどの程度「スティッキー」に押されているかに応じて、快適に感じる最適な値に設定することができます。 sleep 0.5は非常にうまく機能し、ショートカットをより迅速に機能させることができます。

9
Jacob Vlijm

ショートカット定義でコマンドを直接使用することもできるため、そのためのスタンドアロンスクリプトを作成する必要はありません。

「スリープ1」回避策を使用する代わりに、--clearmodifiersフラグを使用できます。つまり、カスタムショートカットは次のようになります。

Name: test
Command: xdotool key --clearmodifiers XF86AudioPlay

Shortcut: Ctrl+Alt+R

私にとって、これはショートカットをSuper+F9にマッピングするときに機能します。

7
Jan