Snap版Spotifyアプリを使っていて、(それが原因かはまだ不明なのだが、)Linuxのカーネルがバグ起因のエラー(NULLポインタ参照)を起こして、ThunderbirdがハングしたりOS再起動時にハングする問題が起こり、エラーが起こる直前(スリープ(サスペンド)からの復帰後)にSnapのマウント処理が行われていて、他に原因が見つからないので、Snapとスリープとカーネルの相性の問題を疑っている。それで、試しにSnapの仕組み(サービス)を使わずに、Snap版Spotifyアプリを単体で動かせないものかと思った。それには、Snapのパッケージを展開して中身のSpotifyアプリを取り出せばいいのではないかと考えた。それでSnapの展開ツールを探したのだが、見つからなかった。が、少しして気付いた。
結論としては、Snapパッケージの展開にツールは不要である。Snapのサービス(snapd)を起動し、目的のSnapパッケージをインストールし、そのアプリを起動できる状態にすれば、中身が/snap以下にマウントされるのだ。例えば、Spotifyは /snap/spotify/26 のようなディレクトリ(最後の数字はリビジョンと思われる。最新版はcurrentにsym-linkされている)にマウントされる。そして、Snapの中身を取り出すには、そこからコピーするだけでいい。
それから少し試行錯誤して、本来の目的の、Snap版Spotify(の中身)を通常のプログラムとして動かすことができた。以下のような手順である。以下は、OSがSnapのサービスを使っていない(有効にしていない)前提であり、Snap版Spotifyの中身を「Snap抽出版Spotify」と表記した。
準備
- Snap抽出版Spotify用ディレクトリ(例: ~/spotify/ext-snap)を作り、chdirする。
- マウントされたSnapのSpotifyのディレクトリ(以下、Snapのディレクトリ) /snap/spotify/current/usr/share からspotifyをコピーまたはsym-linkする(私はコピーしたが、sym-linkで問題ないと思う)。
- Snapのディレクトリ /snap/spotify/current/usr/share 下のspotify以外の全ファイルをsym-linkする。
- ライブラリ用ディレクトリ(例: lib)を作り、chdirする。
- Snapのディレクトリ /snap/spotify/current/lib/x86_64-linux-gnu/ 下の全ファイルをsym-linkする。
OS起動時の準備
以下をOS起動時に実行する(例: /etc/rc.localに追加する)。
- Snapのサービス(snapd)が有効でない場合起動し、念のため少し待つ。
- 例: /bin/systemctl start snapd; sleep 0.5
- Snapのサービスsnapdとsnapd.socketを停める。
- 例: /bin/systemctl stop snapd; /bin/systemctl stop snapd.socket
- 使わないSnapのマウントポイントをumountする。
- 例: umount /dev/loop[1-5] (環境によって異なると思われる)
Spotifyの実行
以下をスクリプトにしておけば、それを実行することでSnap抽出版Spotifyが起動できる。
- LD_LIBRARY_PATHに上記のlibを設定または追加する。
- 例: export LD_LIBRARY_PATH="$HOME/spotify/ext-snap/lib"
- Spotifyアプリを起動する。
- 例: ~/spotify/ext-snap/spotify &
以上の手順で、Snapサービスを使わずに(無効にしたまま)Snap版Spotifyの中身のアプリを起動できる。ただし、Snapでのパッケージの更新などは行われないので、適宜自分で行う必要がある。
[付録] 以前のSpotifyの画面構成に戻す。
上の作業をした後で、おもしろいことが分かった。Snap版のSpotifyアプリ(バージョンの例: 1.0.93.*)は、従来の版(バージョンの例: 1.0.80.*)とメニューやページの構造が異なっている(例えば、"Your Daily Mix"は"Made For You"に変わった)。一方、私は以前の方が使いやすいので戻したかったのだが、ちょっとした手順でできた。以下のようにすればよい。
- Snap抽出版Spotify用ディレクトリ下のAppsディレクトリ(sym-link)を削除かrenameする。
- 従来の版のApps(/usr/share/spotify/Apps)をsym-linkする。
上記作業の実行例を以下に示す。
- cd ~/spotify/ext-snap
- mv Apps{,.orig}
- ln -s /usr/share/spotify/Apps .
以前調べた時に分かったことだが、Apps下にはSpotifyアプリの画面のアプリ(JS)やCSSが入っており、ある程度カスタマイズできるようだ。あと、私の環境(Linux Mint Xfce + Fcitx + Mozc)ではSpotifyアプリに日本語が入力できないのだが、ライブラリを変えたり追加したりすれば、なんとかなるかも知れない。余裕があれば試してみたいと思う。
(11/24 17:24追記) App下のファイルで、古いものにするとうまく動かないものがある(例えば、settings.spaは新しいもの(Snapのもの)でないと表示されない)ので、適宜修正する必要がある。筆者はsettings.spaをSnapのものにした。本当はウインドウ左側のメニューだけを交換したかったのだが、それを出すと思われるzlink.spaを交換するとアイコンが出なくなってしまうので、諦めた。
(12/20 6:55追記) その後、元々の問題(Snap版Spotifyを使うとLinuxのカーネルのバグ起因のエラーが起こる)が解決したようなので(数週間、問題が起こっていない)、上記の方法は止めて、Snap版Spotifyをそのまま使っている。
(仕事ブログより転載・追記: 元の投稿日時: 2018/11/21 10:45)
コメントを書く / Write a comment