僕は一寸
2026/07/17

spotifyd で曲送りを通知する (アルバムアート付き)

Spotify 公式クライアントの MPRIS の実装に不満があった (具体的には複数アーティストが存在する曲で先頭の 1 つしか渡されないこと) ので spotifyd に移行したが,公式クライアントにあった曲送り時の通知が標準では存在しない。

spotifyd ではイベントをフックにスクリプトを呼び出すことができ,ドキュメントにもそれを用いた通知のサンプルが掲載されている。ただ,サンプルのようにわざわざ Spotify API を呼ぶまでもないような気がするし,アルバムアートを通知に含めたかったのでちょっとしたスクリプトを書いた。

#!/bin/sh

if [ "$PLAYER_EVENT" = "change" ];
then
  curl -Lo ~/.cache/spotifyd/cover $(playerctl --player=spotifyd metadata --format "{{mpris:artUrl}}")
  notify-send --hint string:image-path:"~/.cache/spotifyd/cover" "$(playerctl --player=spotifyd metadata --format="{{title}}")" "$(playerctl --player=spotifyd metadata --format="{{artist}} - {{album}}")"
fi

曲が変わった時に,MPRIS で提供されるアルバムアートの画像 URL を playerctl で取得,curl で保存して notify-send に渡している。注意が必要なのが,所定の場所以外に保存された画像ファイルを表示させたい時には --icon ではなく --hint string:image-path: を使う必要がある点。検索力 (ぢから) が足りずこれを見つけるのにだいぶ時間がかかった。

再生・停止の際などにも何か通知したいなら "$PLAYER_EVENT" = "start" || "stop" をそれぞれ掴んでやればいい。具体的なイベントの一覧はソースコードを見るのが良いだろう。

あとは spotifyd のコンフィグで on_song_change_hook = "/path/to/script" を指定するか起動時に --onevent /path/to/script を渡してやればいい。

曲送りの際の通知の例。左にアルバムアートが表示され,右の一行目に曲名,二行以降にアーティスト名およびアルバム名が表示されている。

このようにきちんとアルバムアートも表示される。curl でアルバムアートを取得する都合上少し通知が遅延するかと思ったが,特に気にならなかった。プリフェッチしておくのがベストだと思うが,面倒そう……

ついでに,公式クライアントの時は Spicetify で実現していた「ワンクリックで #NowPlaying 用の定型文をコピペする」機能も waybar からの右クリックでできるようにした。playerctl でアーティスト名,曲名,trackId を取得した上で trackId を sed で URL に変換し,wl-copy に渡している。

{
...
  "custom/playerctl": {
    ...
    "on-click-right": "wl-copy \"$(playerctl --player=spotifyd metadata --format \"#NowPlaying: {{artist}} - {{title}}\")\n$(playerctl --player=spotifyd metadata --format \"{{mpris:trackid}}\" | sed s@'/spotify/track'@'https://open.spotify.com/intl-ja/track'@ | xargs)\" && notify-send \"Copied #NowPlaying to clipboard!\""
  }
}

うまいことやれば playerctl を 2 回呼び出さずに済むと思うが,別に大したオーバーヘッドもないと思うのでこのまま。

#NowPlaying: 初星学園, SHOW, Mitsu.J, 花海咲季, 月村手毬, 藤田ことね - がむしゃらに行こう! - 花海咲季・月村手毬・藤田ことね ver.
https://open.spotify.com/intl-ja/track/7zsSPRgnqYgtfwAwmeeMZe

このようなテキストがクリップボードにコピーされる。便利。

← いくつかの拡張機能を Firefox に port した これ以上新しい投稿はありません