バックグラウンドで実行されているオーディオ/ビデオを再生/一時停止するためのキーボードショートカットを作成するにはどうすればよいですか?

バックグラウンドで実行されているオーディオ/ビデオを再生/一時停止するためのキーボードショートカットを作成するにはどうすればよいですか?

そこで、メディア キーのないノート PC 用にこのキーボードを購入しました。バックグラウンドで再生されているメディアを一時停止するには、ノート PC の再生/一時停止ボタンを押すのが習慣になっています。ただし、このキーボードにはメディア キーがないため、これを行うには独自のキーボード ショートカットを作成する必要があります。これまで、音量コントロール用のキーボード ショートカットを作成してきました。

研究と私の試み:

  1. ターミナルからメディア キーをシミュレートするコマンドを示すこのページを見つけました。 https://askubuntu.com/questions/235126/simulate-media-keys-in-terminal/235181#235181このコマンドは、xdotool key XF86AudioPlayしかし、これをキーボードショートカットにすると、設定 > キーボード > アプリケーションショートカット動作しないようです。

  2. 設定したキーボードショートカットを押すとスーパー+F11CPU使用率が少し上昇し、ショートカットが機能していることを示しています。ショートカットが実行するコマンドを変更してこれを確認しました。exo-open --launch WebBrowserこれは、あなたが想像しているように、押すとウェブブラウザが開きます。スーパー+F11

  3. 私はC/C++を少し知っていたので、まったく同じことを行うラッパープログラムを作成しました。

#include <stdlib.h>

int main() {
    system("xdotool key XF86AudioPlay");
}

このプログラムを実行するためのショートカットをマッピングしましたが、残念ながらまだ動作しません。

ノートパソコンのキーボードのデフォルトの再生/一時停止ボタンを押すと、バックグラウンドで再生されているメディアが再生/一時停止されるようですが、XFCE が実行するコマンドを取得するにはどうすればよいですか。

私はArch LinuxでXFCEを使用しています。普段はrhytmbox music playで音楽を聴いています。

答え1

曲の再生やrhythmbox一時停止のみを制御したい場合は、それで十分です。rhythmbox-client --playrhythmbox-client --pause

しかし、Arch の wiki で、現在再生中のメディアを制御するというソフトウェアを見つけましたplayerctl。その優先順位が 100% はっきりしているわけではありませんが、YouTube ビデオを開いているときは、Rhythmbox を操作するのではなく、デフォルトでそれを制御します。再生と一時停止を切り替えるには、 を実行しますplayerctl play-pause。次のビデオ/音楽に移動するには を実行しplayerctl next、前のビデオ/音楽に移動するには を実行しますplayerctl previous

これが他のディストリビューションでも動作するか、あるいは使用可能かどうかは 100% 確信はありませんが、Arch では動作します。

答え2

Rhythmboxは両方のrhythmbox-client --play/--pauseコマンドをサポートしているようで、dbus-sendで説明されているように、を使用して送信されるD-Busコマンドもサポートしています。AskUbuntuのこの質問そしてこの質問はU&L.SEのAskUbuntuの回答からリンクされています

簡単に言うと、dbus-sendコマンドは次のようになります。

dbus-send --print-reply --dest=org.mpris.MediaPlayer2.rhythmbox /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause

ただし、最初に Rhythmbox の MPRIS API を有効にする必要があります。

しかし、同じキー操作で YouTube 動画も制御する必要がある場合は、現在再生中のプレーヤーを特定し、Rhythmbox または YouTube 動画の再生に使用している Web ブラウザー (またはその他のアプリ) に適切なコマンドを送信するスクリプトをアクティブ化するために、おそらくそれらのキー操作が必要になります。また、ブラウザーの場合、コマンド/キー操作は正しいブラウザー タブに送信する必要がありますが、必ずしも現在のタブであるとは限りません...

答え3

私もあなたと同じことを発見しました。コマンドはxdotool key XF86AudioPlayシェルからは機能しますが、ショートカットやアプリケーション ランチャーからは機能しません。そのため、xdotool対話型シェルから実行した場合にのみ機能するという結論に達しました。そして面白いことに、次のコマンドを使用して、キーボード ショートカットとランチャー アイコン (タスク バーなど) で機能するようになりました。

bash -i -c 'xdotool key XF86AudioPlay'

-iスイッチを取り外して非インタラクティブにするとすぐにbash、動作が停止します。なぜそうなるのかはわかりません...

この方法の良いところXF86AudioPlayは、たとえば Firefox でバックグラウンドで再生されている Youtube ビデオを一時停止する場合にも機能することです。


アップデート

わかりました。なぜこのようなことが起こるのか分かりました。 私の では、を実行するために必要な を.bashrc変更していました。しかし、GUI セッション (XFCE) にログインしたときには、この現象は発生しませんでした。そのため、ターミナルからではなく GUI から直接起動されたプログラム (ランチャーや Alt+F2 など) は、変更された を認識しないため、一部のライブラリが欠落していました。$LD_LIBRARY_PATHxdotool$LD_LIBRARY_PATH

したがって、正しい解決策は、 の変更をの代わりに に$LD_LIBRARY_PATH入れることです。 そうすれば、XFCE はログイン時にそれらを実行し、すべてのプログラムがそれらを認識できるようになります。 それでも、将来の訪問者のために古い回答をここに残しておきます。.profile.bashrc

答え4

Audaciousを使用している場合は、

audacious -t

一時停止と再生を切り替えます(を参照man audacious)。

関連情報