Profile-sync-daemonとは

Profile-sync-daemonはブラウザのプロファイルをインストールドライブからRAMディスクに再配置できるスクリプトだ。ブラウザのプロファイルとはブラウザの設定(ブックマークや拡張機能を含む)およびキャッシュやクッキーなど実行時に読み書きされるファイルのことで,普段使いのブラウザならだいたい100MBくらいにはなる。
Profile-sync-daemon(psd)を使うことによって動作の高速化とSSDへの書き込みの削減(長寿命化)が期待できる。
Arch wikiのべた褒め具合を見ればわかるように,作ったのはArch Linuxの開発者の方というのもありArch系ディストリビューションを使っているなら使わない手はない。もちろんArch以外にもDebian, Ubuntu, Fedora,Gentooなど主要ディストリビューションの多くに公式パッケージが用意されている。
インストールと使い方
Archなら公式extraパッケージからpacmanでインストールできる。
sudo pacman -S profile-sync-daemon
configを編集する。
nano ~/.config/psd/psd.conf
configの中のBROWSERSという丸括弧の中にスペース区切りで使うブラウザを列挙する。対応しているブラウザはPossible values:
以下に挙げられているのものに限られる。
BROWSERS=(firefox icecat chromium)
起動,停止はsystemdで行う。--user
をつけてユーザーユニットで実行するのを忘れないようにする。
systemd --user start psd.service
systemd --user enable psd.service
実際にどの程度メモリを使用しているかはpsd preview
で確認できるがps
コマンドでも調べられる。
ps aux | grep "/usr/share/psd"
勝手にブラウザを追加
ここからが本題。psdに対応していないブラウザを勝手に追加する。将来的なアップデート次第では環境を壊すかもしれないので真似する場合はくれぐれも自己責任でお願いします。
今回追加するブラウザ
- Firefox-ESR
- LibreWolf
Firefox-ESRはFirefoxの長期サポート版。Mozillaはあくまで「業務用」であるとしているが安定性に優れ,こだわりがなければESRのほうを使うことをおすすめする。内部的にはFirefox通常版とは別のソフトウェアとして動作するため通常版との併用も可能。
LibreWolfはFirefoxからMozilla特有のスポンサードリンクやテレメトリを排除したうえで最も厳格なプライバシー設定を適用したブラウザ。プライバシーは大事だがIceCatはちょっとな…という人におすすめ。
psdの仕様
psdのコードを見ると,/usr/share/psd/browsers
にブラウザ別シェルスクリプトが置いてあり,BROWSERS
の引数と同じ名前のファイルが存在することを確認して実行しているようだ。

/usr/share/psd/browsers
これなら自分で作ったシェルスクリプトを/usr/share/psd/browsers
に置くだけで適用できるかもしれない。こういう設計は本当にありがたい。自分でビルド,パッケージ化,インストールをせずに済むからだ。
シェルスクリプトの内容を確認する
if [[ -d "$HOME"/.mozilla/firefox ]]; then
index=0
PSNAME="$browser"
while read -r profileItem; do
if [[ $(echo "$profileItem" | cut -c1) = "/" ]]; then
# path is not relative
DIRArr[$index]="$profileItem"
else
# we need to append the default path to give a
# fully qualified path
DIRArr[$index]="$HOME/.mozilla/firefox/$profileItem"
fi
(( index=index+1 ))
done < <(grep '[Pp]'ath= "$HOME"/.mozilla/firefox/profiles.ini | sed 's/[Pp]ath=//')
fi
check_suffix=1
プロファイルのフルパスを取り出すということをしているようだ。
Firefoxの仕様を確認する
今回追加するブラウザはどちらもFirefoxベースなので,Firefoxのプロファイルの仕様を確認しておく。

about:profiles
プロファイルがどこにあるか,現在適用されているものはどれかという情報はabout:profiles
から確認できる。
プロファイルを管理するための情報はプロファイルの配置されているディレクトリの中のprofile.ini
というファイルにまとめられている。
[Profile1]
Name=default
IsRelative=1
Path=lekocygz.default
Default=1
[Profile0]
Name=default-release
IsRelative=1
Path=wymt0yba.default-release
[General]
StartWithLastProfile=1
Version=2
[Install3B6073811A6ABF12]
Default=wymt0yba.default-release
Locked=1
通常使われるプロファイルはdefault-releaseで,defaultは古い仕様におけるプロファイルで,万が一のときのためのバックアップという意味合いがあるらしい。
Firefoxはプロファイルが複数ある場合default-release-1
のように末尾で区別するらしく,シェルスクリプト内のcheck_suffix=1
が必要になる。
シェルスクリプトの作成と配置
ESRのほうはfirefoxをfirefox-esrに書き換えるだけ。
if [[ -d "$HOME"/.mozilla/firefox-esr ]]; then
index=0
PSNAME="$browser"
while read -r profileItem; do
if [[ $(echo "$profileItem" | cut -c1) = "/" ]]; then
# path is not relative
DIRArr[$index]="$profileItem"
else
# we need to append the default path to give a
# fully qualified path
DIRArr[$index]="$HOME/.mozilla/firefox-esr/$profileItem"
fi
(( index=index+1 ))
done < <(grep '[Pp]'ath= "$HOME"/.mozilla/firefox-esr/profiles.ini | sed 's/[Pp]ath=//')
fi
check_suffix=1
LibreWolfはプロファイルのあるディレクトリが~/.mozilla
ではなく~/.librewolf
だったのでそこを修正する。
if [[ -d "$HOME"/.librewolf ]]; then
index=0
PSNAME="$browser"
while read -r profileItem; do
if [[ $(echo "$profileItem" | cut -c1) = "/" ]]; then
# path is not relative
DIRArr[$index]="$profileItem"
else
# we need to append the default path to give a
# fully qualified path
DIRArr[$index]="$HOME/.librewolf/$profileItem"
fi
(( index=index+1 ))
done < <(grep '[Pp]'ath= "$HOME"/.librewolf/profiles.ini | sed 's/[Pp]ath=//')
fi
check_suffix=1
所有者はroot
,パーミッションは644
のままでOK。
再起動してエラーが出なければ成功している。
systemctl --user stop psd
systemctl --user start psd
psd preview
でうまく動作しているか確認しよう。

おわりに
やるときは本当に自己責任でやってください。