playerctlでLinuxの音楽鑑賞を便利にする
playerctlとは?
各種メディアプレイヤーの再生コントロール(一時停止、再生、その他)をコマンドラインから行えるツールです。MPRISに対応したアプリならなんでも制御できます。
# 再生/停止をトグル
playerctl play-pause
# アーティストやタイトルを書式指定しつつ出力
playerctl metadata --format "{{ status }}: {{ artist }} - {{ title }}"
MPRISとは
MPRISは、メディアプレイヤーを操作するための標準的なインターフェースです。IPCにはD-Busを利用しています。MPRISに対応しているアプリケーションなら、実際に使用しているのがどのソフトウェアか気にすることなく、一貫して統一的に再生や一時停止などの操作を行えます。
対応アプリケーション
playerctlはブラウザ、メディアプレイヤー、音楽プレイヤーなどさまざまなソフトに対応しています(正確に言うと、さまざまなソフトがMPRISに対応しています)。
- Chromium
- Firefox
- MPD(Music Player Daemon)
- VLC
- mpv(拡張スクリプトをインストールする必要あり)
- Spotify(公式Linuxクライアント)
- Rhythmbox
- Audacious
- Lollypop
MPRISはかなり普及している規格なので、特に音楽再生ソフトはここに載っていないものでもだいたい対応している気がします。場合によっては追加の設定が必要かもしれません。
mpvをMPRISに対応させる
mpvはデフォルトだとMPRISに対応していませんが、MPRISに対応するための拡張スクリプトが存在します。
make
でビルドできるので、make install
をするか、生成されたmpris.so
を~/.config/mpv/scripts
にコピーすると動きます。詳しくはREADMEを見てください。
Arch Linuxを使っている人はAURから入れればいいと思います。
実際の活用法
バーに表示する
playerctlを使ってpolybarにSpotifyの曲情報を表示する
ほぼこのリンクのままですが……
たとえば、polybarを使う場合はこんな感じになります。-F
オプションをつけると再生してた曲が変わったり再生・停止の状態が変わったりするたびに出力されるようになります。これはpolybarのtailオプションと極めて相性がいいです。さらに、音楽の表示をクリックすると再生・停止をトグルできます。
[module/nowplaying]
type = custom/script
exec = nowplaying
tail = true
click-left = "playerctl play-pause"
#!/bin/sh
# nowplaying
playerctl -F metadata --format "{{ status }}: {{ artist }} - {{ title }}" 2>/dev/null
Discussion