xdotoolコマンドを実行してキーの押下をシミュレートするショートカットを作成するにはどうすればよいですか?


10

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

これまでのところ、私はコマンドを使用して必要なシミュレーションを達成することができました:

xdotool key XF86AudioPlay

それは完全に動作し、実行されるたびに音楽プレーヤーを一時停止または開始します。

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

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

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

キーボードバインディングによって実行されるコマンドは、シェルを介して解析されません。あなたの最善の策は、ホームディレクトリにディレクトリビンを作成することです。

次に、推奨されるスクリプトを作成して名前を付けましたsimplay

#!/bin/sh
xdotool key XF86AudioPlay

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

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

Name: test
Command: simplay

Shortcut: Ctrl+Alt+R

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

gnome-terminal -e simplay

端末で試してみたところ、実行するとすぐに新しい端末ウィンドウが開き、子プロセスが実行され、音楽が一時停止してすぐにウィンドウが閉じます。

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

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

回答:


12

問題

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

...別のキー押下で呼び出されるキー押下をシミュレートするコマンドを実行すると、実際には両方の組み合わせである3回目のキー押下をシミュレートします:)

解決する

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

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

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

注意

もちろん、の値で少し演奏してsleep 1、コンビネーションがどの程度「粘着性がある」かに応じて、快適に感じる最高の値に設定できます。sleep 0.5非常にうまくいくかもしれませんし、ショートカットがより迅速に機能するようにします。


8

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

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

Name: test
Command: xdotool key --clearmodifiers XF86AudioPlay

Shortcut: Ctrl+Alt+R

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


上記のコードスニペットはファイルを意図したものですか?もしそうなら、それを特定の場所に置くか、ショートカットを実装するために特定のコマンドを実行する必要がありますか?
JellicleCat

1
スニペットは、私が使用したショートカットの単なる説明です。Ubuntuでは、キーボード設定でカスタムショートカットを作成できます。しかし、Ubuntuバージョンをアップグレードしてから、「再生(または再生/一時停止)」アクションを選択したキーの組み合わせに直接マップできるようになりました。これは、xdotoolを使用するよりも信頼性が高いことが証明されています。
1

--clearmodifiersよりも優れているのは、スクリプトの呼び出しに使用しているホットキーの「キーアップ」を発行することです。わずかな欠点は、スクリプトを呼び出すようにホットキーを変更した場合、スクリプトを更新する必要があることです。
バナジウム

1

使用に代わる方法(sleep 1 && xdotool ...snappier パフォーマンスの場合)は、xdotoolを使用してショートカットキーを解放することです。少し長くなりますが、

/bin/bash -c "xdotool keyup R Alt_L Ctrl_L && xdotool key XF86AudioPlay"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.