Fedora 上で Spotify を利用する方法は大体2つある。1つは Web ブラウザで聴く方法、もう1つはデスクトップクライアントをインストールする方法である。これまで Web ブラウザで聴いてきたが、近頃どうもノイズが気になるのでデスクトップクライアントに変更してみることにした。調べてみると両者の間では音声ビットレートが異なり、Web ブラウザでは AAC 256 kbps (プレミアム)、デスクトップクライアントでは最高 AAC 320 kbps とのこと。そもそもプレミアムで同じ料金を支払っているのだから、ビットレートは少しでも高い方が当然良い。

Spotify クライアントのインストールは Fedora Docs に書かれた手順通り Flatpak を使い簡単だったが、フォントが気に食わず直したので、そこまで記録する。

Fedora 33 環境

  • OS: Fedora 33 Workstation Edition
  • Desktop: X11 + GNOME 3.38.4

Flatpak でインストール

Spotify では公式で Debian、Ubunutu をサポートしているが Fedora 向けは無い。しかし Fedora Docs には非公式ながら2通りのインストール方法が紹介されている。RPM Fusion レポジトリから lpf-spotify-client をインストールするか、Flatpak を使うかだ。

今回は Flatpak を選択してみた。Flatpak は Linux に GUI アプリケーションを配信する仕組みで、コンテナ系の技術に基づいて実現されている。使うのは初めてだ。

まず Flatpak がインストールされているか調べる。 現時点の最新は 1.10.2 なので、最新版を既に持っていた。 実のところ Fedora Workstation ではデフォルトで Flatpak がインストールされている。

$ dnf list --installed | grep flatpak
flatpak.x86_64                                     1.10.2-1.fc33                          @updates
flatpak-libs.x86_64                                1.10.2-1.fc33                          @updates
flatpak-selinux.noarch                             1.10.2-1.fc33                          @updates
flatpak-session-helper.x86_64                      1.10.2-1.fc33                          @updates

次にリモートレポジトリに Flathub を加える。元々入っていたかは見なかった。

$ flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

あとは Flathub から com.spotify.Client をインストールするだけ。

$ flatpak install flathub com.spotify.Client

Flathub 側の回線が細いのか、かなり時間がかかった。Fedora Docs では sudo flatpak install としているが、ユーザー権限で実行して問題無い。

インストールが完了したら、コンソールもしくは GNOME のアプリケーションメニューから起動できるようになる。とりあえずコンソールから起動してみると、

$ flatpak run com.spotify.Client

少しメッセージが出てくるが、特に問題は無いようだ。

> /app/extra/bin/spotify: /app/lib/libcurl-gnutls.so.4: no version information available (required by /app/extra/bin/spotify)
[spotifywm] attached to spotify
/app/extra/share/spotify/spotify: /app/lib/libcurl-gnutls.so.4: no version information available (required by /app/extra/share/spotify/spotify)
/app/extra/share/spotify/spotify: /app/lib/libcurl-gnutls.so.4: no version information available (required by /app/extra/share/spotify/spotify)
[spotifywm] attached to spotify
[spotifywm] attached to spotify
Gtk-Message: 01:20:27.681: Failed to load module "canberra-gtk-module"
Gtk-Message: 01:20:27.681: Failed to load module "pk-gtk-module"
Gtk-Message: 01:20:27.681: Failed to load module "canberra-gtk-module"
Gtk-Message: 01:20:27.681: Failed to load module "pk-gtk-module"
/proc/self/exe: /app/lib/libcurl-gnutls.so.4: no version information available (required by /proc/self/exe)
[spotifywm] attached to spotify
[spotifywm] spotify window found

普段使う時は GNOME のメニューから起動するだろう。.desktop ファイルは以下にあった。 もしかしたら悩んで sudo flatpak install を実行した時に生成されたかもしれない。

# /var/lib/flatpak/exports/share/applications/com.spotify.Client.desktop
[Desktop Entry]
Type=Application
Name=Spotify
GenericName=Online music streaming service
Comment=Access all of your favorite music
Icon=com.spotify.Client
Exec=/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=spotify --file-forwarding com.spotify.Client @@u %U @@
Terminal=false
MimeType=x-scheme-handler/spotify;
Categories=Audio;Music;AudioVideo;
Keywords=Music;Player;Streaming;Online;
StartupWMClass=Spotify
X-GNOME-UsesNotifications=true
X-Flatpak-Tags=proprietary;
X-Flatpak=com.spotify.Client

ちなみに .desktop ファイルは、環境変数の XDG_DATA_DIRS にあるパスのディレクトリから探索される。Flatpak のパスがしれっと入っていた。

$ echo $XDG_DATA_DIRS
/home/fujii/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share/:/usr/share/

フォントを変更する

Spotify は無事に起動したものの、日本語フォントがやけに美しい明朝体になっており、アルファベットとの違和感がすごい。フォントを確認するとデフォルトフォントに “幻ノにじみ明朝” が選ばれているようだ。以前 Web アプリ用にインストールしたものだが、デスクトップアプリケーションで使うことは期待していない。

何のフォントが使われているかは、Flatpak の com.spotify.Client アプリ上で fc-match コマンドを実行すると分かった。

$ flatpak run --command=fc-match com.spotify.Client
幻ノにじみ明朝.otf: "幻ノにじみ明朝" "Regular"

あれ?と思ってローカルでも fc-match してみると、”Noto Sans CJK JP” が最優先になっていた。Flatpak 上でもこれを使うようにしたい。

$ fc-match
NotoSansCJK-Regular.ttc: "Noto Sans CJK JP" "Regular"

とりあえず、結局意味は無かったが、”幻ノにじみ明朝” を削除すると、

$ rm -r ~/.local/share/fonts
$ sudo fv-cache -fv

今度は Ricty がデフォルトになった。これは以前 Emacs で使っていたものだ。いまは Cica。

改めて fc-match -s -a でフォント名を優先順に出してみると、Noto Sans はずっと下の方、むしろ下から数えた方が早いような位置にいる。だから Ricty を削除しても意味が無いことがわかった。

$ flatpak run --command=fc-match com.spotify.Client -s -a | head -3
Ricty-Regular.ttf: "Ricty" "Regular"
DejaVuSans.ttf: "DejaVu Sans" "Book"
DejaVuSans.ttf: "DejaVu Sans" "Book"
...
NotoSansCJK-Regular.ttc: "Noto Sans CJK JP" "Regular"

Flatpak アプリ上でのフォントファイルパスは fc-list で表示できる。 Ricty はマウントされた /run/host/user-fonts にあった。

$ /usr/bin/flatpak run --command=fc-list com.spotify.Client | grep -i ric
/run/host/user-fonts/Ricty-Regular.ttf: Ricty:style=Regular
/run/host/user-fonts/Ricty-Bold.ttf: Ricty:style=Bold

/run/host/user-fonts を使う設定は Flatpak アプリ内の /etc/fonts に書かれていた。これを書き換えるのは難しそうだ。

$ flatpak run --command=cat com.spotify.Client /etc/fonts/conf.d/50-flatpak.conf | grep /run/host
        <dir>/run/host/fonts</dir>
        <dir>/run/host/user-fonts</dir>
        <cachedir>/run/host/fonts-cache</cachedir>
        <cachedir>/run/host/user-fonts-cache</cachedir>

実のところ、Flatpak に食わせるフォント設定は、/etc/fonts 等を編集しなくても、ホスト側の ~/.var/app/ で書くことができる。Spotify ならば ~/.var/app/com.spotify.Client/config/fontconfig/fonts.conf だ。次のように書いてとにかく “Noto Sans CJK JP” を使うようにしてみた。

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
  <alias>
    <family>serif</family>
    <prefer>
      <family>Noto Sans CJK JP</family>
    </prefer>
  </alias>
  <alias>
    <family>sans-serif</family>
    <prefer>
      <family>Noto Sans CJK JP</family>
    </prefer>
  </alias>
</fontconfig>

この状態で再度 fc-match すると期待通り “Noto Sans CJK JP” が優先フォントになった。

$ flatpak run --command=fc-match com.spotify.Client
NotoSansCJK-Regular.ttc: "Noto Sans CJK JP" "Regular"

GNOME のメニューから Spotify を起動して、こちらも日本語フォントが変わったので満足。

まとめ

Spotify の音質は改善された気がするし、Flatpak、Fontconfig の勉強もできたし、楽しい遊びだった。