Spotify
Spotify は、フリーミアム型のビジネスモデルを採用したデジタル音楽ストリーミングサービスです。この記事は主に、Spotify が積極的にサポートしていない、半公式でプロプライエタリな Spotify for Linux クライアントについて書かれています [1] その他に、オンラインプレイヤー や多くのオープンソース サードパーティのクライアント について紹介。
目次
- 1 インストール
- 2 ヒントとテクニック
- 3 トラブルシューティング
- 3.1 デスクトップ環境のアラート (ビープ) によって Spotify がミュートになってしまう
- 3.2 検索を使うとインターフェイスが点滅してクラッシュする
- 3.3 DWM で Spotify Linux を使用した時に画像が点滅したり正しく表示されない
- 3.4 検索やブラウザ、ラジオが動作しない
- 3.5 GUI スレッドのデッドロック
- 3.6 プロキシを使ったときにアルバム画像が表示されない、四角が表示される
- 3.7 Spotify でローカルネットワーク上の他のデバイスが検出されない
- 3.8 ダークテーマを使っている場合に検索バーのテキストが読めない
- 3.9 ローカルファイルを再生できない
- 3.10 ウィンドウマネージャのルールが反映されない
- 3.11 GUI の境界線がなくなり、cinnamon パネル上の画面全体を占有する
- 3.12 Wayland 環境で設定が開けない
- 3.13 起動時にクラッシュする
- 3.14 ローカルフォルダを追加すると Spotify がクラッシュする
- 3.15 /usr/lib/libcurl-gnutls.so.4 error
- 4 参照
インストール
spotify-launcher を インストール します。このパッケージは、ホームディレクトリ内のユーザーごとのインストールを管理し、Spotify が pacman とは独立して自身を更新できるようにします (他のオペレーティング システムで Spotify が自己更新する方法と似ています。)
pacman を使用して Spotify の更新を管理したい場合は、代わりに for Linux を再パッケージ化する spotifyAUR を使用してください。ローカルファイルを追加して再生する必要がある場合は、zenity と ffmpeg4.4 を追加でインストールする必要があります。
サードパーティクライアント
- Librespot — オープンソースの Spotify クライアントライブラリ。公式のクローズドソースの libspotify を使わなくても Spotify のサービス (ストリーミング) をアプリケーションから使えるようになります。
- MellowPlayer — Web ベースの音楽ストリーミングサービスを独自のウィンドウで実行し、デスクトップとの統合を可能にする、無料のオープンソースでクロスプラットフォームのデスクトップアプリケーション
- Mopidy — Music Player Daemon のプラグインベースの実装。拡張を使うことで Spotify をストリーミング可能。
- ncspot — クロスプラットフォームの ncurses は、ncmpc などにインスパイアされた Rust で書かれた Spotify クライアント。
- Psst — Rust を使用し GUI で作成された高速でマルチプラットフォームの Spotify クライアント。
- Spot — Gtk/Gnome デスクトップ用の Rust ネイティブな Spotify クライアント。Spotify プレミアムアカウントが必要です。
- Spotifyd — UNIX デーモンとして実行されるオープンソースの Spotify クライアント。Spotifyd は公式クライアントと同じように音楽をストリーミングし、軽量でより多くのプラットフォームをサポートします。Spotifyd は Spotify Connect プロトコルもサポートしており、公式クライアントからコントロールできるデバイスとして表示されます。
- spotify-tui — Rust で書かれたターミナル用の Spotify クライアント。
- spotify-qt — C++ で書かれ Qt を使った軽量な Spotify クライアント。
- Tizonia — Linux 向けのコマンドラインクラウド音楽プレーヤーで、Spotify、Google Play Music、YouTube、SoundCloud、Plex サーバ、Chromecast デバイスをサポート。
- Spicetify — Spotify クライアントをカスタマイズするための強力なコマンドラインツール。テーマ、拡張機能などが含まれます。
ヒントとテクニック
ストレージ サイズを制限する
Spotify はキャッシュ用のストレージサイズを自動的に管理しますが、ファイルシステム がいっぱいにならないようにサイズ制限を強制したい場合があります。
/home/user/.config/spotify/prefs
に Append storage.size
(MB 単位で) を追加します、たとえば 3072MB のストレージ サイズ:
~/.config/spotify/prefs
storage.size=3072
グローバルなメディアホットキー
Spotify は XF86AudioPlay
などのメディアキーをサポートしています。ただし何も設定をしていなかった場合 Spotify の中でしか動作しません。xbindkeys などを使用してグローバルのメディアキーの押下を取得してから、以下のどれか方法を使うことで Spotify に転送することができます。xbindkeys を使っている場合、インストールやキーの設定を行った後に Spotify を再起動しないと、キーイベントが正しく取得されません。
MPRIS
Spotify クライアントは MPRIS2 D-Bus インターフェイスを実装しており外部からコントロールすることができます。
pactl (pulseaudio)
MPRIS プロトコルコマンドにはボリューム コントロールが含まれていません。これは、音量変更要求を無視する Spotify 自体の中で壊れています。しかし、pulseaudio の入力シンクを経由して音量を制御することは可能です。
$ pactl set-sink-input-volume "$current_sink_num" +1% #volume up by 1% $ pactl set-sink-input-volume "$current_sink_num" -1% #volume down by 1% $ pactl set-sink-input-mute "$current_sink_num" toggle #mute toggler
"$current_sink_num"のシンク番号は、コマンドの出力で確認できます。
$ pactl list sink-inputs
Sink Input #3 << here Driver: protocol-native.c [...] application.name = "Spotify"
ボリュームを変更するためのスクリプトを作成し、デスクトップ環境 構成または次のセクションで説明する xdotool を介してキーボード ショートカットなどにバインドできます、ここではいくつかの例を示します。
Bash:
#!/bin/bash LANGUAGE="en_US" app_name="Spotify" current_sink_num= sink_num_check= app_name_check= pactl list sink-inputs |while read line; do \ sink_num_check=$(echo "$line" |sed -rn 's/^Sink Input #(.*)/\1/p') if [ "$sink_num_check" != "" ]; then current_sink_num="$sink_num_check" else app_name_check=$(echo "$line" \ |sed -rn 's/application.name = "([^"]*)"/\1/p') if [ "$app_name_check" = "$app_name" ]; then pactl set-sink-input-volume "$current_sink_num" +1% fi fi done
このスクリプトは、ユーザー Mikołak が この投稿 で行った作業に基づいています
残念ながら、このスクリプトは最速のソリューションではありません。キーボードのホットキーを使用して複数回実行すると、遅延が発生する可能性があります。
より高速な (10倍程度) Python コード (少なくとも Python 3.7 をインストールする必要があります):
#!/usr/bin/env python3 #Author: Marcin Kocur, attribution license: https://creativecommons.org/licenses/by/4.0/ import subprocess import os x=0 y=0 env = os.environ env['LANG'] = 'en_US' app = '"Spotify"' pactl = subprocess.check_output(['pactl', 'list', 'sink-inputs'], env=env).decode().strip().split() if app in pactl: for e in pactl: x += 1 if e == app: break for i in pactl[0 : x -1 ]: y += 1 if i == 'Sink' and pactl[y] == 'Input' and '#' in pactl[y + 1]: sink_id = pactl[y+1] if i == 'Volume:' and '%' in pactl[y + 3]: volume = pactl[y + 3] sink_id = sink_id[1: ] volume = volume[ : -1 ] if int(volume) < 100: subprocess.run(['pactl', 'set-sink-input-volume', sink_id, '+1%'])
.py ファイルで保存します。最後の行が実行部分ですので、コマンドを調整して音量を下げたり、ミュートを切り替えたりできます。
トラック通知を無効化
バージョン0.9.10以降、トラック変更通知はデフォルトで有効になりました。それらは非常に煩わしい場合があります。それらを無効にするには、以下を追加:
~/.config/spotify/Users/spotify login-user/prefs
ui.track_notifications_enabled=false
--ui.track_notifications_enabled=false
オプションを使用して spotify を起動することでも可能です。
トラック通知を表示
playerctl には python-gobject と dunst のような通知デーモンと一緒に使用するライブラリが付属しており、トラックが変更されたときにアーティストとタイトルを通知で表示することができます。
#!/usr/bin/env python3 from gi.repository import Playerctl, GLib from subprocess import Popen player = Playerctl.Player() def on_track_change(player, e): track_info = '{artist} - {title}'.format(artist=player.get_artist(), title=player.get_title()) Popen(['notify-send', track_info]) player.on('metadata', on_track_change) GLib.MainLoop().run()
何度も再生されるラジオトラックをスキップ
playerctl ライブラリの他の使い道としてラジオで何度も再生されるトラックをスキップすることができます。ラジオ局で聞きたくない曲を低く評価する必要はもうありません。
#!/usr/bin/env python3 from gi.repository import Playerctl, GLib player = Playerctl.Player() played_out = ['Zu Fuss', 'Walk And Talk', 'Neuland'] def on_track_change(player, e): if player.get_title() in played_out: player.next() player.on('metadata', on_track_change) GLib.MainLoop().run()
コマーシャルをミュート
spotblock
spotblock (spotblock-gitAUR) は systemd デーモンとして動作するリソース消費の少ない広告ブロッカーです。
Spotify-AdKiller
spotify-adkiller-gitAUR は、Spotify 広告をブロックするもう 1 つの代替手段です。
spotblock-rs
spotblock-rsAUR は、Spotify の広告をミュートする高速かつ軽量のプログラムです。PipeWire でも機能します。
Hosts ファイル
hosts ファイルに以下の行を追加することでも Spotify の広告をブロックできます:
/etc/hosts
# Block spotify ads 127.0.0.1 media-match.com 127.0.0.1 adclick.g.doublecklick.net 127.0.0.1 www.googleadservices.com 127.0.0.1 open.spotify.com 127.0.0.1 pagead2.googlesyndication.com 127.0.0.1 desktop.spotify.com 127.0.0.1 googleads.g.doubleclick.net 127.0.0.1 pubads.g.doubleclick.net 127.0.0.1 audio2.spotify.com 127.0.0.1 www.omaze.com 127.0.0.1 omaze.com 127.0.0.1 bounceexchange.com # 127.0.0.1 spclient.wg.spotify.com 127.0.0.1 securepubads.g.doubleclick.net 127.0.0.1 8.126.154.104.bc.googleusercontent.com 127.0.0.1 104.154.126.8
リモートコントロール
SSH でコマンドを送信
サーバー上に ssh がセットアップされている場合、以下のコマンドでクライアントからリモートの Spotify インスタンスに制御コマンドを送信できます:
$ ssh user@host yourcommand
yourcommand は、サーバーにインストールした spotifycmd や上述の Linux 版の dbus スクリプトなどに置き換えてください。
SSH で Spotify ウィンドウをつかむ
サーバーをリモートで制御するために TeamViewer や VNC などでデスクトップ全体を取得するのでなければ、サーバーからクライアントに Spotify のウィンドウだけを抜き取ることができます。
サーバー側に sshd を設定して、サーバーとクライアントの両方に x11vnc をインストールしてください。クライアント側には tigervnc をインストールしてください。それから以下のスクリプトを使うことでデスクトップ全体を取得したり、Spotify ウィンドウだけを取得できます。MPD の GUI クライアントと同じように使うことができます。
#!/bin/bash # vncget.sh if [[ $1 == all ]];then ssh -f -t -L 5900:localhost:5900 user@host "x11vnc -q -display :0 -auth .Xauthority" else ssh -f -t -L 5900:localhost:5900 user@host ".bin/vncgetspotify.sh" fi for i in {1..4}; do sleep 2 if vncviewer localhost:0; then break; fi done
#!/bin/bash # vncgetspotify.sh export DISPLAY=:0 id=$(wmctrl -lx | awk '/spotify.exe.Wine/ {print $1}') [[ -z $id ]] && id=$(wmctrl -lx | awk '/spotify.Spotify/ {print $1}') x11vnc -sid $id -display :0 -auth .Xauthority
2番目のスクリプトをサーバーの ~/.bin/vncgetspotify.sh
にコピーして、1番目のスクリプトをクライアントのどこかに保存してください。
最後に、Spotify ウィンドウを掴むには、クライアント側で以下を実行:
$ sh vncget.sh
デスクトップ全体を取得する場合:
$ sh vncget.sh all
HiDPI モード
最新の Spotify ビルドも DPI に対応していないため、ターミナルコマンドでインターフェイスをスケールする量を指定します:
$ spotify --force-device-scale-factor=X
X はインターフェイスをスケールする量に置き換えて下さい。例: 2。
デスクトップファイルを使用する場合、パッケージを更新したときにファイルが上書きされないように、ローカルのアプリケーションフォルダにデスクトップファイルをコピーしてください:
$ cp /usr/share/applications/spotify.desktop ~/.local/share/applications/
~/.local/share/applications/spotify.desktop
を編集して --force-device-scale-factor
オプションを追加:
spotify.desktop
[Desktop Entry] Name=Spotify GenericName=Music Player Comment=Spotify streaming music client Icon=spotify-client Exec=spotify --force-device-scale-factor=2 %U TryExec=spotify Terminal=false Type=Application Categories=Audio;Music;Player;AudioVideo MimeType=x-scheme-handler/spotify
変更を適用するにはデスクトップマネージャを再起動する必要があります。
Wayland 下で実行
Xwayland で Spotify を実行すると、特に画面サイズと向きが混在している場合に、いくつかの異常が発生する可能性があります。いくつかのフラグを渡すと、Spotify を Wayland モードで実行できます: --enable-features=UseOzonePlatform --ozone-platform=wayland
デスクトップから起動するときに Wayland モードで起動するために、これらの変更を spotify.desktop
ファイルに追加できます。
詳細については、前のセクション HiDPI モード を参照してください。
トラブルシューティング
デスクトップ環境のアラート (ビープ) によって Spotify がミュートになってしまう
PulseAudio の設定ファイルで "module-role-cork" をコメントアウトしてください。
テキストエディタで /etc/pulse/default.pa
を開いて以下の行をコメントアウトしてください:
load-module module-role-cork
もしくは以下のコマンドを実行してアンロードしてください:
$ pactl unload-module module-role-cork
検索を使うとインターフェイスが点滅してクラッシュする
Spotify は古いバージョンの Chromium Embedded Framework を使っており検索を使おうとするとバグによってクラッシュします。以下のコマンドラインオプションを使うことで回避できます:
--force-device-scale-factor=1.0000001
DWM で Spotify Linux を使用した時に画像が点滅したり正しく表示されない
フローティングウィンドウで spotify を起動してください。
以下のルールを config.h
の rules 配列に追加してください:
{ "Spotify", NULL, NULL, 2, True, -1 },
上記の設定でウィンドウモードと関係なく spotify タグが "2" のフローティングウィンドウとして起動されます。新しい設定を適用するために dwm を再コンパイル・インストールしてください。
検索やブラウザ、ラジオが動作しない
ブラウジングなどのタブで何も表示されなかったり、検索フィールドが機能しなかったりラジオページが表示されない場合 (起動したときにフリーズして入力に反応しなくなる)、ロケールの設定が原因かもしれません (バグレポート を参照)。
Spotify を起動する前に LC_NUMERIC
環境変数を en_US.utf8
に設定してみてください。
GUI スレッドのデッドロック
Awesome などのタイル型ウィンドウマネージャでは、新しい曲やプレイリストをダブルクリックしたときにデッドロックが発生することがあります。~/.config/spotify/Users/[1-9]*-user/prefs
ファイルを編集して以下の行を追加してください:
ui.track_notifications_enabled=false
そして Spotify を再起動します。
プロキシを使ったときにアルバム画像が表示されない、四角が表示される
spotify を終了して、spotify の設定 ~/.config/spotify/prefs
を開いて下さい。
@https を @http に変更してください:
network.proxy.addr="your-proxy.com:80@http" network.proxy.mode=2
[4] を参照。
Spotify でローカルネットワーク上の他のデバイスが検出されない
ファイアウォールを使っている場合、UDP と TCP のポート 57621 を開いて下さい。iptables のシンプルなステートフルファイアウォールを使用している場合、以下で設定できます:
iptables -A TCP -p tcp --dport 57621 -j ACCEPT -m comment --comment spotify iptables -A UDP -p udp --dport 57621 -j ACCEPT -m comment --comment spotify
ローカルネットワークの送信元と宛先を制限することもできます。
Spotify Connect を使用してワイヤレススピーカーやオーディオビデオレコーダで音楽を再生する場合、ファイアウォールを設定して Spotify の mDNS ルックアップが通るようにする必要があります。ランダムな非特権ポートが使われるため [5]、ファイアウォールのルールは面倒なものになります。送信元ポート 1900 または 5353 を以下のように設定してください:
iptables -A UDP -p udp --sport 1900 --dport 1025:65535 -j ACCEPT -m comment --comment spotify iptables -A UDP -p udp --sport 5353 --dport 1025:65535 -j ACCEPT -m comment --comment spotify
ダークテーマを使っている場合に検索バーのテキストが読めない
検索バーのテキストは白色に決められているため、Qt のダークテーマを使っている場合見えなくなります。色を上書きすることで解決できます。
まず (ホームフォルダなど) 読み書きができる場所に css ファイルを作成してください。名前は何でもかまいません (例: spotify-override.css)。
作成した css ファイルを開いて以下を追加します:
QLineEdit { color: #000 }
ファイルを保存して終了してください。次に、Spotify のランチャーの末尾に以下を追加します (css ファイルのパスは実際のパスに置き換えて下さい):
-stylesheet=/home/user/spotify-overide.css
起動パスは以下のようになります:
/usr/share/spotify/spotify-client/spotify -stylesheet=/home/user/spotify-override.css
ローカルファイルを再生できない
ローカルファイルを再生しようとするとセグメンテーション違反や以下のようなエラーメッセージが発生する場合:
This song is not available. If you have the file on your computer you can import it.
依存パッケージが欠けているのが原因です。PulseAudio を使っている場合、ffmpeg-compat-54AUR をインストールすることで解決します。インストール時に PGP の検証エラーが起こる場合は適切な PGP 鍵をインポートしてください:
$ gpg --keyserver pgp.mit.edu --recv-keys FCF986EA15E6E293A5644F10B4322F04D67658D8
ウィンドウマネージャのルールが反映されない
特定のワークスペースで Spotify を起動したり、起動時に最大化するなどのルールをウィンドウマネージャで設定しても Spotify には反映されません。Spotify が ICCCM の仕様に違反しており、ウィンドウを作成する前に WM_CLASS プロパティを設定しないためです。spotifywm を使用することで解決できます。
GUI の境界線がなくなり、cinnamon パネル上の画面全体を占有する
ウィンドウの境界が消えてしまうという問題があって、アプリがフルスクリーンになっても、ウィンドウをドラッグしたり、シナモンのサイズを変更したりできない場合は、デフォルトでテキストファイル /home/yourusername/.config/Spotify/Users/yourusername-user/prefs
にある設定が原因かもしれません。
app.window.position.width=1366 app.window.position.height=768
おそらく、両方の解像度が "メイン" モニタの解像度以上の値に一致する場合、これは二つのモニタから一つのモニタだけに移ったときに起こる可能性があります。解決策として、 Spotify を閉じ、 prefs
ファイルを編集して上記の両方の設定を削除し、保存してから再度 Spotify を実行してください。
Wayland 環境で設定が開けない
Wayland を使用している場合、"設定" ボタンをクリックしても何も起こりません。代わりにキーボードを使用すると機能します(矢印と enter)
こちらも参照して下さい。[6]
起動時にクラッシュする
起動時にアプリケーションがクラッシュし、次のエラーメッセージが表示された場合
[NNN:FATAL:gpu_data_manager_impl_private.cc(439)] GPU process isn't usable. Goodbye
-no-zygote
フラグを指定して spotify
を実行してみてください。
ローカルフォルダを追加すると Spotify がクラッシュする
Local Files オプション内の 'ソースを追加する' ボタンが Spotify をクラッシュさせた時。使用可能な回避策はこちらを参照 this reddit post または、 Flatpak バージョンをインストールすることもできます。
/usr/lib/libcurl-gnutls.so.4 error
エラーが発生した場合:
spotify: /usr/lib/libcurl-gnutls.so.4: no version information available (required by spotify)
~/.cache/spotify
を削除します。
参照
- playerctl — メディアプレーヤーを操作するためのコマンドラインユーティリティ・ライブラリ
- SpotCommander — Spotify のウェブベースのリモートコントロール
- Spotify for Linux — Spotify の Linux クライアントのホームページ