やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

bashでChromiumのプロファイル選択GUIを作成する

 Firefoxなら-P引数を渡せば表示されるアレ、Chromiumには無い。ので作った。

成果物

eye-catch

プロファイル

 ブラウザにはプロファイルがある。作業の内容によってプロファイルを分ければ、タブを作業ごとに分けて閲覧できて便利。

chromiumにはプロファイル選択画面がない

 Firefoxならfirefox -Pコマンドでプロファイル選択画面が表示できる。

firefox -P プロファイル選択画面

 Chromiumにはこれに該当する機能がない。よって今回はそれを自作した。

方法

 Chromiumのプロファイル情報は$HOME/.config/chromium/Local Stateという名前のJSONファイルに定義されている。ここからプロファイル情報を抜き出せばいい。

 UIはzenityコマンドを使えば簡単に実装できる。

ソースコード

choose_chromium_profile.sh

#!/usr/bin/env bash
set -Ceu
Run() {
    IsIntallJq() { [ -n "$(which jq)" ] && return 0 || return 1; } 
    IntallJq() { sudo apt -y install jq; }
    IsIntallJq || IntallJq

    readonly PATH_PROFILE="$HOME/.config/chromium/Local State"
    Profile() { cat "$PATH_PROFILE"; }
    readonly LAST_ACTIVE_PROFILE="$(jq -r '[ .profile.last_active_profiles ] | flatten | .[]' "$PATH_PROFILE" | head -n 1)"
    readonly PROFILE_DIRS="$(jq -r '[ .profile.info_cache | keys ] | flatten | .[]' "$PATH_PROFILE")"
    readonly PROFILE_NAMES="$(jq -r '.profile.info_cache[].name' "$PATH_PROFILE")"

    readonly PROFILE_NAME_DIR=$(paste -d'\n' <(echo -e "$PROFILE_NAMES") <(echo -e "$PROFILE_DIRS"))
    readonly PROFILES="$(echo -e "$PROFILE_NAME_DIR" | sed "s/^/'/g" | sed "s/$/'/g" | tr '\n' ' ')"
    readonly WIDTH=340
    readonly HEIGHT=$((100 + (25 * $(echo -e "$PROFILE_DIRS" | wc -l))))
    echo $HEIGHT
    ZENITY_CMD="zenity --list --hide-header --title='Chromiumプロファイル選択' --text='プロファイルを選択してください。' --hide-column=2 --print-column=2 --column='プロファイル名' --column='ディレクトリ名' --width=$WIDTH --height=$HEIGHT $PROFILES"
    SELECTED_PROFILE_DIR="$(eval "$ZENITY_CMD")"
    chromium-browser --profile-directory="$SELECTED_PROFILE_DIR"
}
Run "$@"

 昔PythonJSON解析したことがあった。でもシェル一つで完結したい。

実行

 実行権限を与える。

chmod +x choose_chromium_profile.sh 

 実行する。

./choose_chromium_profile.sh 

eye-catch

所感

 Linuxコマンドを駆使して使い易く改善するの楽しい。