真のプレーヤーのみ: vlc、mpv、RhythmBox、Web ブラウザ、cmus、mpd、spotify など。
チャット
Playerctl は、MPRIS D-Bus インターフェイス仕様を実装するメディア プレーヤーを制御するためのコマンド ライン ユーティリティおよびライブラリです。 Playerctl を使用すると、再生や一時停止などのプレーヤーのアクションをメディア キーに簡単にバインドできます。また、アーティストやタイトルなど、再生中のトラックに関するメタデータを取得して、ステータスライン ジェネレーターやその他のコマンド ライン ツールに統合することもできます。
Playerctl には、 playerctld
と呼ばれる現在アクティブなメディア プレーヤー上で動作できるようにするデーモンも付属しています。
playerctl [--version] [--list-all] [--all-players] [--player=NAME] [--ignore-player=IGNORE] [--format=FORMAT] [--no-messages] COMMAND
使用可能なコマンドのリストは次のとおりです。
指示 | 説明 |
---|---|
play | プレイヤーにプレイするように命令します。 |
pause | プレイヤーに一時停止を命令する |
play-pause | プレーヤーに再生/一時停止を切り替えるように命令します。 |
stop | プレイヤーに停止するように命令します。 |
next | プレーヤーに次のトラックにスキップするように命令します。 |
previous | プレーヤーに前のトラックにスキップするように命令します。 |
position [OFFSET][+/-] | プレイヤーに数秒以内にその位置に移動するか、前方または後方の OFFSET をシークするように命令します。 |
volume [LEVEL][+/-] | 音量を 0.0 ~ 1.0 の LEVEL に印刷または設定します。 |
status | プレイヤーのプレイ状況を取得します。 「再生中」「一時停止」「停止」のいずれかです。 |
metadata [KEY...] | 現在のトラックのメタデータを印刷します。 KEY が渡された場合は、メタデータからそれらの値のみを出力します。 |
open [URI] | プレイヤーが指定された URI を開くコマンド。ファイル パスまたはリモート URL を指定できます。 |
loop [STATUS] | ループステータスを印刷または設定します。 「なし」、「トラック」、または「プレイリスト」のいずれか。 |
shuffle [STATUS] | シャッフル ステータスを印刷または設定します。 「オン」、「オフ」のいずれかです。 |
制御するプレイヤーを指定しないと、Playerctl は最初に見つけたプレイヤーに基づいて動作します。
Playerctl には、バックグラウンドでメディア プレーヤーのアクティビティを監視するplayerctld
というサービスが付属しています。 playerctld
が実行されている場合、Playerctl は最後のアクティビティの順序でプレーヤーに作用します。 playerctld
開始するには、システム起動スクリプトに次のコマンドを追加します。
playerctld daemon
playerctl --list-all
を使用すると、システム上で実行されている制御可能なプレーヤーの名前を一覧表示できます。
特定のプレイヤーのみを制御したい場合は、 --player
フラグを使用して、それらのプレイヤーの名前をカンマで区切って渡すことができます。 Playerctl は、コマンドをサポートするリスト内のプレーヤーの最初のインスタンスを選択します。リスト内のすべてのプレーヤーを制御するには、 --all-players
フラグを使用します。
同様に、 --ignore-player
フラグを使用してプレイヤーの名前を渡すことで、プレイヤーを無視できます。
特別なプレーヤー名%any
選択したプレーヤーのリストで 1 回使用すると、リストにないプレーヤーと一致させることができます。これは、プレイヤーの優先順位を付けたり、優先順位を下げたりするために使用できます。
例:
# Command the first instance of VLC to play
playerctl --player=vlc play
# Command all players to stop
playerctl --all-players stop
# Command VLC to go to the next track if it's running. If it's not, send the
# command to Spotify.
playerctl --player=vlc,spotify next
# Get the status of the first player that is not Gwenview.
playerctl --ignore-player=Gwenview status
# Command any player to play, but select Chromium last
playerctl --player=%any,chromium play
# Command any player to play, but select VLC first
playerctl --player=vlc,%any play
--format
引数を使用してフォーマット文字列を渡すと、プロパティを特定のフォーマットで出力できます。出力する変数を、形式文字列の中で{{ VARIABLE }}
のように二重中括弧で囲んで渡します。使用可能な変数は、クエリ コマンドの名前、またはplayerctl metadata
で表示できるメタデータ マップ内の任意の名前です。これを使用して、playerctl をステータスライン ジェネレーターに統合できます。
シンプルな「再生中」バナーの場合:
playerctl metadata --format " Now playing: {{ artist }} - {{ album }} - {{ title }} "
# prints 'Now playing: Lana Del Rey - Born To Die - Video Games'
テンプレート言語には、テンプレート変数で呼び出すことができる一般的な書式設定のためのいくつかの組み込み変数とヘルパー関数が含まれています。数値に対する基本的な数学演算も実行できます。
# Prints 'Total length: 3:23'
playerctl metadata --format " Total length: {{ duration(mpris:length) }} "
# Prints 'At position: 1:16'
playerctl position --format " At position: {{ duration(position) }} "
# Prints 'Artist in lowercase: lana del rey'
playerctl metadata --format " Artist in lowercase: {{ lc(artist) }} "
# Prints 'STATUS: PLAYING'
playerctl status --format " STATUS: {{ uc(status) }} "
# Prints the time remaining in the track (e.g, 'Time remaining: 2:07')
playerctl metadata --format " Time remaining: {{ duration(mpris:length - position) }} "
# Prints volume from 0 - 100
playerctl metadata --format " Volume: {{ volume * 100 }} "
関数 | 口論 | 説明 |
---|---|---|
lc | 弦 | 文字列を小文字に変換します。 |
uc | 弦 | 文字列を大文字に変換します。 |
duration | 整数 | 継続時間を hh:mm:ss 形式に変換します。 |
markup_escape | 弦 | 文字列内の XML マークアップ文字をエスケープします。 |
default | どれでも、どれでも | 最初の値が存在する場合はそれを出力し、存在しない場合は 2 番目の値を出力します。 |
emoji | ステータスまたはボリューム | 変数を絵文字表現に変換してみてください。 |
trunc | 文字列、整数 | 文字列を最大長まで切り詰めます。 |
変数 | 説明 |
---|---|
playerName | 現在のプレイヤーの名前。 |
position | 現在のトラックの位置 (マイクロ秒単位) |
status | 現在のプレーヤーの再生ステータス |
volume | ボリュームは0.0から1.0まで |
album | 現在のトラックのアルバム。 |
artist | 現在のトラックのアーティスト。 |
title | 現在のトラックのタイトル。 |
--follow
フラグを渡すと、ブロックするコマンドをクエリし、プレイヤーが接続するのを待ち、クエリが変更されるたびにクエリを出力できます。プレイヤーが--player
で渡される場合、 --all-players
が渡されない限り、リストの前にあるプレイヤーが表示順で優先されます。すべてのプレイヤーが終了した場合など、クエリをサポートできるプレイヤーが存在しない場合は、改行が出力されます。たとえば、メディア プレーヤーで現在再生中の最新トラックに関する情報の通知を受け取るには、次のコマンドを使用します。
playerctl metadata --format ' {{ playerName }}: {{ artist }} - {{ title }} {{ duration(position) }}|{{ duration(mpris:length) }} ' --follow
トラック内の任意の位置にシークしたり、前後にスキップしたりできます。
# Go back 30 seconds
playerctl position 30-
# Go forward 30 seconds
playerctl position 30+
# Seek to the position at 30 seconds
playerctl position 30
デバッグ ログを有効にするには、環境変数G_MESSAGES_DEBUG=playerctl
を設定します。問題を報告するときにデバッグ ログを含めると役立ちます。
Spotify などの一部のプレーヤーでは、通常はセッション マネージャー内で設定される特定の DBus 環境変数を設定する必要があります。セッション マネージャーを使用していない場合、またはこれらの変数が自動的に設定されない場合 ( xinit
など)、 dbus-launch
コマンドでラップされたデスクトップ環境を起動します。たとえば、 .xinitrc
ファイルで、これを使用して WM を開始します。
exec dbus-launch --autolaunch=$(cat /var/lib/dbus/machine-id) i3
一部のプレーヤーでは、プラグインまたはその他の構成のインストールが必要な場合があります。
Quod Libet で [ファイル] -> [プラグイン] ウィンドウを開き、 MPRIS D-Bus Supportというプラグインを選択します。
playerctld
自動起動せず、 xinit
と systemd を使用している場合、DBus アクティベーションが正しく機能するようにするには、次の修正が必要になる可能性があります。
systemctl --user import-environment DISPLAY XAUTHORITY
if which dbus-update-activation-environment >/dev/null 2>&1; then
dbus-update-activation-environment DISPLAY XAUTHORITY
fi
まず、Playerctl がパッケージ マネージャーから利用できるかどうかを確認し (そうでない場合は、誰かにパッケージをホストしてもらいます)、github のリリース ページも確認します。
playerctl
Fedora 28 以降で利用できます。
sudo dnf install playerctl
playerctl
この COPR リポジトリを介して Mageia および openSUSE で利用できます。まず、COPR からディストリビューションのリポジトリ ファイルをインストールします。次に、選択したパッケージ マネージャーを使用してplayerctl
インストールします。
playerctl
は Guix パッケージとして利用可能で、Guix をインストールした後に任意の Linux ディストリビューションにインストールできます。
guix install playerctl
cli とライブラリを使用するには、GLib が必要です (これは、これらのプレーヤーのほぼすべての依存関係でもあるため、おそらくすでに持っているでしょう)。このライブラリは、関連するイントロスペクション バインディング ライブラリを使用すると、ほぼすべてのプログラミング言語で使用できます。
さらに、次のビルド依存関係も必要です。
イントロスペクション データを構築するための gobject-introspection ( introspection
メソン オプションで構成可能)
ドキュメントを構築するための gtk-doc ( gtk-doc
meson オプションで構成可能)
Fedora ユーザーはredhat-rpm-config
もインストールする必要があります
開発に貢献するプロジェクトを生成してビルドし、 playerctl を/
にインストールするには:
meson mesonbuild
sudo ninja -C mesonbuild install
meson
がインストールされている必要があることに注意してください。ディストリビューションのリポジトリに古いバージョンの meson しかない場合は、pip 経由で最新バージョンをインストールできます。
pip3 install meson
また、 gtk-doc と gobject-introspection はデフォルトで有効になっていることに注意してください。 -Dintrospection=false
および-Dgtk-doc=false
を使用して無効にできます。
playerctl を/
にインストールしたくない場合は、ninja を呼び出す前にDESTDIR
エクスポートすることで、他の場所にインストールできます。例:
export PREFIX="/usr/local"
meson --prefix="${PREFIX}" --libdir="${PREFIX}/lib" mesonbuild
export DESTDIR="$(pwd)/install"
ninja -C mesonbuild install
次の変数をエクスポートすることで、後で使用できます。
export LD_LIBRARY_PATH="$DESTDIR/${PREFIX}/lib/:$LD_LIBRARY_PATH"
export GI_TYPELIB_PATH="$DESTDIR/${PREFIX}/lib/:$GI_TYPELIB_PATH"
export PATH="$DESTDIR/${PREFIX}/bin:$PATH"
スクリプト ライブラリを使用するには、このリストから好みの言語を見つけて、バインディング ライブラリをインストールします。ライブラリのドキュメントはここでホストされています。ライブラリの使用方法の例については、サンプル フォルダーを参照してください。
より上級のユーザー向けに、Playerctl は、お気に入りのスクリプト言語で利用できる内部観察可能なライブラリを提供します。これにより、メディア プレーヤー イベントをサブスクライブしたり、再生トラックのアーティストやタイトルなどのメタデータを取得したりする機能など、より詳細な制御が可能になります。この例では、Python バインディングを使用します。
#!/usr/bin/env python3
from gi . repository import Playerctl , GLib
player = Playerctl . Player ( 'vlc' )
def on_metadata ( player , metadata ):
if 'xesam:artist' in metadata . keys () and 'xesam:title' in metadata . keys ():
print ( 'Now playing:' )
print ( '{artist} - {title}' . format (
artist = metadata [ 'xesam:artist' ][ 0 ], title = metadata [ 'xesam:title' ]))
def on_play ( player , status ):
print ( 'Playing at volume {}' . format ( player . props . volume ))
def on_pause ( player , status ):
print ( 'Paused the song: {}' . format ( player . get_title ()))
player . connect ( 'playback-status::playing' , on_play )
player . connect ( 'playback-status::paused' , on_pause )
player . connect ( 'metadata' , on_metadata )
# start playing some music
player . play ()
if player . get_artist () == 'Lana Del Rey' :
# I meant some good music!
player . next ()
# wait for events
main = GLib . MainLoop ()
main . run ()
プレーヤーの開始と終了をリッスンできるより完全な例については、公式の例の player-manager.py を参照してください。
Playerctl については、次の記事を参照してください。
Playerctl のメーカーによる関連プロジェクト:
この著作物は、GNU Lesser General Public License (コピーを参照) の下で利用可能です。
著作権 © 2014、トニー・クリスシ