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でうまく動作しているか確認しよう。

おわりに

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