Spotify
Spotify は数百万もの曲にアクセスすることができるデジタル音楽サービスです。
このインターネット音楽サービスを使うことで無料でデータベースから曲を選択してストリーミング再生できます。以前はヨーロッパ限定でしたが、最近になってアメリカでもサービスが開始されました。現在は日本でもサービスインしています。Debian と Fedora ディストリビューション向けに公式に Linux クライアントがパッケージで配布されており、AUR からインストールすることが可能です: spotifyAUR。公式では、Linux ユーザーは Wine で Windows クライアントを動かすことを推奨しています。また、曲の間にときどき音声広告が流れます。
Spotify では無料ユーザーがプレイリストを作成することができ、シャッフルしたり、リピートするトラックを設定することができます。Spotify で提供されているコンテンツにはオリジナル版と検閲版の両方があります。
目次
- 1 クライアントのインストール
- 2 ヒントとテクニック
- 3 トラブルシューティング
- 3.1 デスクトップ環境のアラート (ビープ) によって Spotify がミュートになってしまう
- 3.2 検索を使うとインターフェイスが点滅してクラッシュする
- 3.3 DWM で Spotify Linux を使用した時に画像が点滅したり正しく表示されない
- 3.4 検索やブラウザ、ラジオが動作しない
- 3.5 SpotifyHelper.exe がクラッシュする (Windows クライアント)
- 3.6 ランチャーアイコンがおかしい (Windows クライアント)
- 3.7 GUI スレッドのデッドロック
- 3.8 Pulseaudio
- 3.9 プロキシを使ったときにアルバム画像が表示されない、四角が表示される
- 3.10 Spotify でローカルネットワーク上の他のデバイスが検出されない
- 3.11 ダークテーマを使っている場合に検索バーのテキストが読めない
- 3.12 ローカルファイルを再生するとセグメンテーション違反が発生する
- 4 参照
クライアントのインストール
使用したいクライアントをどちらか選択してください。Linux クライアントの方が好評ですが、wine の使用に慣れている場合、windows クライアントを選択するのも良いでしょう。両方のクライアントをインストールする必要はありません。https://play.spotify.com/ で使えるオンラインプレイヤーも存在します (Flash が必要です)。
代替クライアント
公式の Spotify クライアントの代わりになるソフトウェアが存在します:
- Clementine — Qt 4 に移植された Amarok 1.4 クローン。設定でプラグインをアクティベート(ダウンロード)することでプレミアムアカウントの Spotify からストリーミングすることができます。
- Mopidy — Music Player Daemon のプラグインベースの実装。拡張を使うことで Spotify をストリーミング可能。
- https://github.com/mopidy || mopidy + mopidy-spotifyAUR または despotify-svnAUR[リンク切れ: パッケージが存在しません]
- Librespot — オープンソースの Spotify クライアントライブラリ。公式のクローズドソースの libspotify を使わなくても Spotify のサービス (ストリーミング) をアプリケーションから使えるようになります。
- https://github.com/plietar/librespot || librespot-gitAUR または librespot-alsa-gitAUR[リンク切れ: パッケージが存在しません]
公式 Linux クライアント
AUR の spotifyAUR を使うと自動的にソフトウェアがダウンロードされます。ローカルファイルを再生したい場合は zenity と ffmpeg0.10AUR パッケージもインストールする必要があります。
Windows クライアント (Wine)
先に Wine をインストールしてください。
Spotify のウェブサイトでアカウント登録してから Spotify を取得してください。アプリケーションのアプリ内登録はできません。ただし次の URL を使うことで登録をする前にアプリケーションを取得することができます: [1]。
登録してインストーラーのコピーをダウンロードしたら Wine でアプリケーションを実行してください。ファイルを右クリックすることで実行できます。実行できない場合、ダウンロードしたディレクトリで下のコマンドを実行することでターミナルから実行できます:
$ wine SpotifySetup.exe
アプリケーションが正しくインストールされたら、ターミナルから以下のコマンドを実行したり、ALT+F2 ランチャーから実行することで Spotify を起動できます:
x86_64 版の Arch Linux を使っている場合、以下のようにして実行する必要があります:
$ wine ~/.wine/drive_c/Program\ Files\ \(x86\)/Spotify/spotify.exe
x86 版の Arch Linux を使っている場合は、以下のコマンドで実行できます:
$ wine ~/.wine/drive_c/Program\ Files/Spotify/spotify.exe
何か問題が発生するときは、winecfg で Windows XP または Windows 7 をエミュレーションするように設定することを推奨します。
ヒントとテクニック
グローバルなメディアホットキー
Spotify は XF86AudioPlay などのメディアキーをサポートしています。ただし何も設定をしていなかった場合 Spotify の中でしか動作しません。xbindkeys などを使用してグローバルのメディアキーの押下を取得してから、以下のどれか方法を使うことで Spotify に転送することができます。xbindkeys を使っている場合、インストールやキーの設定を行った後に Spotify を再起動しないと、キーイベントが正しく取得されません。
MPRIS
Spotify クライアントは MPRIS2 D-Bus インターフェイスを実装しており外部からコントロールすることができます。
Playerctl
playerctl ユーティリティは Spotify プロセスにコマンドを送信するコマンドラインツールを提供します。グローバルに設定する必要があるコマンドは play-pause, next, previous だけです:
$ playerctl play-pause $ playerctl next $ playerctl previous
Playerctl は始めに見つけたプレイヤーにコマンドを送るため、VLC などの他のプレイヤーでも使えます。他のプレイヤーを無視させるには、--player=spotify を引数に付けてください。
D-Bus
上記のツールの代わりとして、systemd の依存パッケージとしてデフォルトでインストールされる D-Bus があります。D-Bus を使うことで Spotify などの他のプロセスと確実に対話することができます。
Spotify の現在の曲を再生・停止するには:
$ dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause
コマンドをメディアキーにバインドするには Xbindkeys をインストールして .xbindkeysrc を編集し、以下の行を追加してください:
# Play/Pause "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause" XF86AudioPlay # Next "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Next" XF86AudioNext # Previous "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Previous" XF86AudioPrev # Stop "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Stop" XF86AudioStop
上記のコマンドが機能しない場合、dbus アドレスを設定してみてください:
USER=`whoami`
PROCESS=spotify
PID=`pgrep -o -u $USER $PROCESS`
ENVIRON=/proc/$PID/environ
if [ -e $ENVIRON ]
then
export `grep -z DBUS_SESSION_BUS_ADDRESS $ENVIRON`
else
echo "Unable to set DBUS_SESSION_BUS_ADDRESS."
exit 1
fi
xdotool
xdotool を使うことでホットキーをアプリケーションに送信することが可能です。以下は Spotify を外側から操作するスクリプトの例です:
#!/bin/sh
case $1 in
"play")
key="XF86AudioPlay"
;;
"next")
key="XF86AudioNext"
;;
"prev")
key="XF86AudioPrev"
;;
*)
echo "Usage: $0 play|next|prev"
exit 1
;;
esac
xdotool key --window $(xdotool search --name "Spotify (Premium |Unlimited |Free )?- Linux Preview"|head -n1) $key
exit 0
musickeys.sh のように名前をつけて、スクリプトに実行可能属性を付与してください:
$ chmod +x musickeys.sh
./musickeys.sh play を実行することで曲の再生を切り替えることができます。xbindkeys などキーの押下を取得するツールでこのスクリプトを使うようにバインドできます。
トラック通知を無効化
バージョン 0.9.10 から、トラック変更の通知がデフォルトで有効になっています。この通知は非常に邪魔に思えるかもしれません。無効にするには、以下の行を ~/.config/spotify/Users/<spotifylogin>-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()
コマーシャルをミュート
blockify
blockify を使えばコマーシャルをミュートできます。AUR の blockifyAUR でインストールできます。
Spotify が起動するたびに blockify をバックグラウンドで実行されるようにするには:
#!/bin/sh spotify=/usr/bin/spotify if [[ -x $spotify && -x /usr/bin/blockify ]]; then blockify & block_pid=$! $spotify trap "kill -9 $block_pid" SIGINT SIGTERM EXIT fi
上のスクリプトを /usr/local/bin/spotify に配置すれば、Spotify を起動したときに /usr/bin/spotify が優先されます。他に変更する必要があるところはありません。アップデートしても消えることはありません。
spotblock
spotblock (spotblock-gitAUR) は systemd デーモンとして動作するリソース消費の少ない広告ブロッカーです。
Spotify-AdKiller
Spotify-AdKiller (spotify-adkiller-gitAUR) は Spotify の広告をブロックします。
リモートコントロール
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 に設定してみてください。
SpotifyHelper.exe がクラッシュする (Windows クライアント)
Spotify を起動した時に SpotifyHelper.exe がクラッシュする場合、winecfg で d3d9 ライブラリを無効化してください。"Libraries" タブを開いて、"d3d9" を選んで Add をクリックしてください。無効化するには、edit をクリックして "Disable" オプションを選択してください。
ランチャーアイコンがおかしい (Windows クライアント)
ランチャーに Spotify アイコンが正しく表示されない場合、次の行を ~/.local/share/applications/wine/Programs/Spotify.desktop に追加してください:
StartupWMClass=spotify.exe
GUI スレッドのデッドロック
Awesome などのタイル型ウィンドウマネージャでは、新しい曲やプレイリストをダブルクリックしたときにデッドロックが発生することがあります。~/.config/spotify/Users/[1-9]*-user/prefs ファイルを編集して以下の行を追加してください:
ui.track_notifications_enabled=false
そして Spotify を再起動します。
Pulseaudio
PulseAudio/トラブルシューティング や [3] を見て下さい。
プロキシを使ったときにアルバム画像が表示されない、四角が表示される
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
ローカルファイルを再生するとセグメンテーション違反が発生する
依存パッケージが欠けているのが原因です。PulseAudio を使っている場合、ffmpeg-compat-54AUR をインストールすることで解決します。
参照
- playerctl: メディアプレーヤーを操作するためのコマンドラインユーティリティ・ライブラリ
- SpotCommander: Spotify のウェブベースのリモートコントロール
- http://www.spotify.com/int/help/faq/wine/
- http://www.spotify.com/int/download/previews/