Spotify

提供: ArchWiki
2023年6月12日 (月) 21:22時点におけるKgx (トーク | 投稿記録)による版 (→‎インストール: 情報を更新)
ナビゲーションに移動 検索に移動

Spotify は、フリーミアム型のビジネスモデルを採用したデジタル音楽ストリーミングサービスです。この記事は主に、Spotify が積極的にサポートしていない、半公式でプロプライエタリな Spotify for Linux クライアントについて書かれています [1] その他に、オンラインプレイヤー や多くのオープンソース サードパーティのクライアント について紹介。

目次

インストール

spotify-launcherインストール します。このパッケージは、ホームディレクトリ内のユーザーごとのインストールを管理し、Spotify が pacman とは独立して自身を更新できるようにします (他のオペレーティング システムで Spotify が自己更新する方法と似ています。)

pacman を使用して Spotify の更新を管理したい場合は、代わりに for Linux を再パッケージ化する spotifyAUR を使用してください。ローカルファイルを追加して再生する必要がある場合は、zenityffmpeg4.4 を追加でインストールする必要があります。

サードパーティのクライアント

  • Librespot — オープンソースの Spotify クライアントライブラリ。公式のクローズドソースの libspotify を使わなくても Spotify のサービス (ストリーミング) をアプリケーションから使えるようになります。
https://github.com/plietar/librespot || librespot-gitAUR
  • MellowPlayer — Web ベースの音楽ストリーミングサービスを独自のウィンドウで実行し、デスクトップとの統合を可能にする、無料のオープンソースでクロスプラットフォームのデスクトップアプリケーション
https://colinduquesnoy.gitlab.io/MellowPlayer/ || mellowplayerAUR mellowplayer-gitAUR
  • MopidyMusic Player Daemon のプラグインベースの実装。拡張を使うことで Spotify をストリーミング可能。
https://github.com/mopidy || mopidy + mopidy-spotifyAUR
  • ncspot — クロスプラットフォームの ncurses は、ncmpc などにインスパイアされた Rust で書かれた Spotify クライアント。
https://github.com/hrkfdn/ncspot || ncspotAUR ncspot-gitAUR
  • Psst — Rust を使用し GUI で作成された高速でマルチプラットフォームの Spotify クライアント。
https://github.com/jpochyla/psst || psst-gitAUR
  • Spot — Gtk/Gnome デスクトップ用の Rust ネイティブな Spotify クライアント。Spotify プレミアムアカウントが必要です。
https://github.com/xou816/spot || spot-clientAUR
  • Spotifyd — UNIX デーモンとして実行されるオープンソースの Spotify クライアント。Spotifyd は公式クライアントと同じように音楽をストリーミングし、軽量でより多くのプラットフォームをサポートします。Spotifyd は Spotify Connect プロトコルもサポートしており、公式クライアントからコントロールできるデバイスとして表示されます。
https://github.com/Spotifyd/spotifyd || spotifyd
  • spotify-tui — Rust で書かれたターミナル用の Spotify クライアント。
https://github.com/Rigellute/spotify-tui || spotify-tuiAUR
  • spotify-qt — C++ で書かれ Qt を使った軽量な Spotify クライアント。
https://github.com/kraxarn/spotify-qt || spotify-qtAUR
  • Tizonia — Linux 向けのコマンドラインクラウド音楽プレーヤーで、Spotify、Google Play Music、YouTube、SoundCloud、Plex サーバ、Chromecast デバイスをサポート。
http://tizonia.org/docs/spotify/ || tizonia-allAUR
  • Spicetify — Spotify クライアントをカスタマイズするための強力なコマンドラインツール。テーマ、拡張機能などが含まれます。
https://spicetify.app/ || spicetify-cliAUR

ヒントとテクニック

ストレージ サイズを制限する

Spotify はキャッシュ用のストレージサイズを自動的に管理しますが、ファイルシステム がいっぱいにならないようにサイズ制限を強制したい場合があります。

/home/user/.config/spotify/prefsAppend storage.size (MB 単位で) を追加します、たとえば 3072MB のストレージ サイズ:

~/.config/spotify/prefs
storage.size=3072

グローバルなメディアホットキー

ヒント: 大抵はデスクトップ環境に初めから設定されているキーボードショートカットで Spotify クライアントを使うことができます。例えば Cinnamon ではデフォルトでプレイヤーを制御できるようにバインドが設定されており (Preferences -> Keyboard -> Shortcuts -> Sound and Media)、お好きなキーを押すことで簡単にショートカットを変えることができます。

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-gobjectdunst のような通知デーモンと一緒に使用するライブラリが付属しており、トラックが変更されたときにアーティストとタイトルを通知で表示することができます。

#!/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()

コマーシャルをミュート

警告: コマーシャルのミュートは Spotify ではサポートされていないため、一時的に禁止される可能性があります [2]

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
ノート: spclient.wg.spotify.com は、最近再生された曲だけでなく、ラジオや毎日のミックスもブロックしているようです

リモートコントロール

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

変更を適用するにはデスクトップマネージャを再起動する必要があります。

トラブルシューティング

デスクトップ環境のアラート (ビープ) によって 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 クライアントと Awesome でしか問題が解決されません。Debian や Ubuntu ユーザーは Spotify 0.9.17.1.g9b85d436 と Awesome 3.4.15 で別の原因があると報告しています。
  • Spotify 1.0.17.75-2 現在、ui.track_notifications_enabled=false は無視されます。また、一部のユーザーは Awesome 3.5.6 からデッドロックが発生しなくなったと報告しています。デッドロックの原因はおそらく Awesome から呼び出されるスクリプトが Spotify の D-Bus プロパティに依存しているためかもしれません。詳しくは [3] を参照。

プロキシを使ったときにアルバム画像が表示されない、四角が表示される

spotify を終了して、spotify の設定 ~/.config/spotify/prefs を開いて下さい。

@https を @http に変更してください:

 network.proxy.addr="your-proxy.com:80@http"
 network.proxy.mode=2

[4] を参照。

ノート: 1.0.17 現在、上記のように https を http に置き換えると全く接続できなくなることがあります。その場合、GUI では 'no proxy' に設定してから proxychains-ng で全ての TCP 接続を強制的にプロキシを通すようにする方法があります。

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 クライアントのホームページ