Spotify
Spotify は数百万もの曲にアクセスすることができるデジタル音楽サービスです。
このインターネット音楽サービスを使うことで無料でデータベースから曲を選択してストリーミング再生できます。以前はヨーロッパ限定でしたが、最近になってアメリカでもサービスが開始されました。Debian と Fedora ディストリビューション向けに公式に Linux クライアントがパッケージで配布されており、AUR からインストールすることが可能です: spotifyAUR。公式では、Linux ユーザーは Wine で Windows クライアントを動かすことを推奨しています。また、曲の間にときどき音声広告が流れます。
Spotify では無料ユーザーがプレイリストを作成することができ、シャッフルしたり、リピートするトラックを設定することができます。Spotify で提供されているコンテンツにはオリジナル版と検閲版の両方があります。
クライアントのインストール
使用したいクライアントをどちらか選択してください。Linux クライアントの方が好評ですが、wine の使用に慣れている場合、windows クライアントを選択するのも良いでしょう。両方のクライアントをインストールする必要はありません。mopidyAUR + mopidy-spotifyAUR または despotify-svnAUR のようなオープンソースクライアントも存在しますが、基本的にプレミアムアカウントでないと動作しません。https://play.spotify.com/ で使えるオンラインプレイヤーも存在します (flash が必要です)。
Linux
AUR の spotifyAUR を使うと自動的にソフトウェアがダウンロードされます。ローカルファイルを再生したい場合は ffmpeg-compat もインストールする必要があります。
Windows (Wine)
Wine を見て下さい。
Obtaining Spotify can be done by registering for an account on their Website, the application does not offer in-app registration. However you can obtain the application prior to registering by using the following URL. [1]
After you have registered and downloaded your copy of the installer you will need to run the application through Wine, depending on your setup you may be able to run the application by right clicking the file. If not terminal will work just fine, as long as you run the below command in the directory of your download.
$ wine Spotify\ Installer.exe
Once the application is successfully installed you may run Spotify by using one of the following commands in terminal, or in the ALT+F2 launcher:
If you use a x86_64 copy of ArchLinux, you will have to run it like this:
$ wine "/home/username/.wine/drive_c/Program Files (x86)/Spotify/spotify.exe"
If you use a x86 copy of ArchLinux, you can use this command just fine:
$ wine ~/.wine/drive_c/Program\ Files/Spotify/spotify.exe
If you have any additional problems, I recommend setting the winecfg to Windows XP or Windows 7 emulation.
グローバルなメディアホットキー
Spotify has support for media keys like XF86AudioPlay
, but out of the box they only work inside Spotify. We can use for example xbindkeys to catch the global media keypresses, and then forward them to Spotify using one of the methods below.
Linux
Playerctl
playerctlAUR ユーティリティは Spotify プロセスにコマンドを送信するコマンドラインツールを提供します。グローバルに設定する必要があるコマンドは play-pause
, next
, previous
だけです:
$ playerctl play-pause $ playerctl next $ playerctl previous
Playerctl は始めに見つけたプレイヤーにコマンドを送るため、VLC などの他のプレイヤーでも使えます。他のプレイヤーを無視させるには、--player=spotify
を引数に付けてください。
xdotool
With the help of xdotool
it is possible to send your hotkeys to the application. The following script is an example of how to control Spotify from the outside:
#!/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
Let us call it musickeys.sh
. Make the script executable:
$ chmod +x musickeys.sh
By executing ./musickeys.sh play
you can now toggle playing a song. Now you can bind this script to any tool that catches keypresses, such as xbindkeys.
D-Bus
An alternative to the above is D-Bus, which should be available by default as it is a dependency of systemd. With D-Bus we have a consistent and reliable way to communicate with other processes, such as Spotify.
To play or pause the current song in Spotify:
$ dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause
In order to bind this and the other commands to the media keys you need to install Xbindkeys and edit your .xbindkeysrc and add the following lines:
# 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
If the above commands do not work, try setting the dbus address:
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
Windows
If you prefer the wine-version of Spotify, you can use spotifycmdAUR to send actions to Spotify. Here is a sample setup of xmonad bindings using spotifycmd.
Tips & Tricks
トラック通知を無効化
バージョン 0.9.10 から、トラック変更の通知がデフォルトで有効になっています。この通知は非常に邪魔に思えるかもしれません。無効にするには、以下の行を ~/.config/spotify/Users/<spotifylogin>-user/prefs
に追加してください:
ui.track_notifications_enabled=false
--ui.track_notifications_enabled=false
オプションを付けて spotify を実行することでも設定できます。
トラック通知を表示
playerctlAUR provides a library you can use with python-gobject and a notification daemon such as dunst to show the artist and title in a notification when the track changes.
#!/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()
何度も再生されるラジオトラックをスキップ
playerctlAUR ライブラリの他の使い道としてラジオで何度も再生されるトラックをスキップすることができます。ラジオ局で聞きたくない曲を低く評価する必要はもうありません。
#!/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 を使えばコマーシャルをミュートできます (Wine 版とネイティブの Linux クライアント両方で使えます)。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
が優先されます。他に変更する必要があるところはありません。アップデートしても消えることはありません。
リモートコントロール
SSH でコマンドを送信
If you set up ssh on the server, you can send controls from a client to a remote Spotify instance with
$ ssh user@host yourcommand
where yourcommand can be spotifycmdAUR that you installed on the server, or a dbus script for the linux version, as described above.
SSH で Spotify ウィンドウをつかむ
Aside from grabbing the whole desktop with TeamViewer or VNC to remotely control your server, you can also only grab the Spotify Window from the server to your client.
To do that, you need to configure sshd on your server and install x11vnc on both server and client as well as tigervnc on the client. Then you can use these scripts to grab either the complete dektop or only the Spotify window, which essentially gets you GUI client-like behavior as with MPD.
#!/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
You will need to copy the second script to ~/.bin/vncgetspotify.sh on the server and the first script to any place on your client.
Finally, to grab the spotify window, run on the client:
$ sh vncget.sh
or, for the whole desktop:
$ sh vncget.sh all
トラブルシューティング
DWM で Spotify Linux を使用した時に画像が点滅したり正しく表示されない
Start spotify as a floating window.
You can add this rule to the rules array in your config.h
:
{ "Spotify", NULL, NULL, 2, True, -1 },
This will tell dwm to start spotify as a floating window associated with the tag "2" no matter what window mode you are in. Recompile and install dwm to apply your new settings.
ラジオが動作しない
- Spotify bug report concerning mixed locales
If your radio page is broken (stuck when starting and unsresponsive to input) you might be using a custom locale. Try setting the environment variable LC_NUMERIC
to en_US.utf8
before starting Spotify.
Spotify がローカルファイルを再生しない
This can manifest in a very unusual manner like some songs not playing when you try to stream them because the player attempts to play them from the hard drive.
Try installing ffmpeg-compat, as per this forum discussion.
SpotifyHelper.exe がクラッシュする (Windows クライアント)
If SpotifyHelper.exe crashes when starting Spotify, disable the d3d9 library with winecfg
. Go to the "Libraries" tab, choose "d3d9" and click Add. To disable it, click edit and select the "Disable" option.
ランチャーアイコンがおかしい (Windows クライアント)
If the Spotify icon does not show up correctly in your launcher, add the following line to ~/.local/share/applications/wine/Programs/Spotify.desktop
:
StartupWMClass=spotify.exe
Pulseaudio
PulseAudio/トラブルシューティング や [2] を見て下さい。
プロキシを使ったときにアルバム画像が表示されない、四角が表示される
Quit spotify, then open spotify preferences ~/.config/spotify/prefs
Change @https to @http:
network.proxy.addr="your-proxy.com:80@http" network.proxy.mode=2
See original form post here.
Spotify でローカルネットワーク上の他のデバイスが検出されない
If a firewall is in place, open ports 57621 for UDP and TCP. If you use a variant of the iptables Simple stateful firewall, the following should do it:
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
It is also possible to restrict the source and destination to the local network.
参照
- playerctl: メディアプレーヤーを操作するためのコマンドラインユーティリティ・ライブラリ
- SpotCommander: Spotify のウェブベースのリモートコントロール
- http://www.spotify.com/int/help/faq/wine/
- http://www.spotify.com/int/download/previews/