LightDM Greeter on Arch Linux のテーマ設定
LightDM Greeter のテーマを、ログイン画面+ロック画面に適用していく話です。
環境
- ディストリビューション: Arch Linux
- ディスプレイマネージャー: LightDM
- デスクトップ環境: Xfce
$ uname -a
Linux x1-carbon-gen10-arch 5.19.4-arch1-1 #1 SMP PREEMPT_DYNAMIC Thu, 25 Aug 2022 17:31:12 +0000 x86_64 GNU/Linux
$ cat /etc/os-release
NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
BUILD_ID=rolling
ANSI_COLOR="38;2;23;147;209"
HOME_URL="https://archlinux.org/"
DOCUMENTATION_URL="https://wiki.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://bugs.archlinux.org/"
LOGO=archlinux-logo
$ lightdm --version
lightdm 1.32.0
$ xfce4-about
前提
LightDM のサービスが起動していることを確認します。
$ systemctl status lightdm
※そもそも GUI 起動できている時点でほぼ間違いなく起動しているのですが、一応。
Webkit2 Greeter をインストールする
LightDM 用に様々な Greeter が作られていますが、今回はカスタマイズ性やらなにやらで良さそうな lightdm-webkit2-greeter をインストールします。
AUR からインストールできます。
$ yay -S lightdm-webkit2-greeter
glorious テーマをインストールする
その前に経緯
Webkit2 Greeter 用のテーマも色々と転がっていますが、GitHub で star の多かった glorious を使ってみることにしました。
…が、ちょっとキーバインドを追加したかったので、Fork して調整したものを使うことにしました。
ただし、このテーマ、そんなに積極的にメンテナンスされている雰囲気ではないです。
試しにインストールしてみた AUR の最新版はちゃんと動いているのですが、今の master ブランチは結構バグが多くて、Pull Request も滞留しているようです。
※これは文句ではなく、現状はこうだという話です。私は全世界の優れた開発者を尊敬しています。本当です。
このため、最新のリリースコミットまで巻き戻して、そこから変更を加えていきました。
インストールする
Fork したものを Clone し、usr/share/lightdm-webkit/themes/
に glorious
というディレクトリ名で配置します。
$ git clone git@github.com:23prime/lightdm-webkit2-theme-glorious.git
$ cd lightdm-webkit2-theme-glorious/
$ sudo cp -r . /usr/share/lightdm-webkit/themes/glorious
設定ファイルを書き換える
LightDM 系の設定ファイルは /etc/lightdm
にあります。
今回は lightdm.conf
と lightdm-webkit2-greeter.conf
を書き換えます。
念の為バックアップ
設定がおかしいと GUI が起動しなくなったりして面倒になる可能性があるので、オリジナルのバックアップを取っておきます。
$ cd /etc/lightdm/
$ sudo cp lightdm.conf lightdm.conf.orig
$ sudo cp lightdm-webkit2-greeter.conf lightdm-webkit2-greeter.conf.orig
Greeter を指定する
lightdm.conf
の greeter-session
の行をアンコメントし、
greeter-session=lightdm-webkit2-greeter
のように書き換えます。
sed
でやるならこんな感じ。
$ sudo sed -i 's/^\(#?greeter\)-session\s*=\s*\(.*\)/greeter-session = lightdm-webkit2-greeter #\1/ #\2g' /etc/lightdm/lightdm.conf
テーマを指定する
lightdm-webkit2-greeter.conf
の webkit_theme
debug_mode
を下記のようにします。
webkit_theme = glorious
debug_mode = true
sed
でやるならこんな感じ。
$ sudo sed -i 's/^webkit_theme\s*=\s*\(.*\)/webkit_theme = glorious #\1/g' /etc/lightdm/lightdm-webkit2-greeter.conf
$ sudo sed -i 's/^debug_mode\s*=\s*\(.*\)/debug_mode = true/g' /etc/lightdm/lightdm-webkit2-greeter.conf
ユーザーアイコンを表示させる
適当な画像ファイルを /var/lib/AccountsService/icons/<username>.png
として配置します。
$ cp /path/to/xxx.png /var/lib/AccountsService/icons/`whoami`.png
/var/lib/AccountsService/users/<username>
を編集し、↑の画像のパスを Icon
に指定します。
Icon=/var/lib/AccountsService/icons/<username>.png
これで再ログインします。
このとき、下記 PR によると、一度ユーザー一覧メニューから自分のユーザーを選択しないとアイコンが表示されないようです。
バグか仕様かは不明。
別の方法
アイコン画像は ~/.face
にする方法もあるそうです。
しかし、配置場所が一長一短な感じなのと、多分 greeter-hide-users=false
とかを書かないとダメそうだったので、このやり方にはしませんでした。
ロック画面も同じテーマにする
ロック画面を目にする機会の方が明らかに多いので、ログイン画面よりもテーマを入れる価値がありそうです。
light-locker をインストールする
$ yay -S light-locker
試しに light-locker でロックしてみます。
$ light-locker &
$ light-locker-command --lock
これで、先に設定したテーマの画面になれば成功です。
バックグラウンドジョブとして起動した light-locker は終了させます。
$ jobs
[1] + running light-locker
$ kill %1
light-locker を自動起動させる
light-locker が起動していない状態でロックコマンドを打つと、エラーになります。(それはそう)
$ light-locker-command --lock
** Message: 17:09:55.247: Received error message from the locker: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.ScreenSaver was not provided by any .service files
systemd で起動しておきたい気分ですが、ユーザーセッションの取得か何かの問題?で、うまくいっていないようです。
ということで、Xfce の自動開始アプリケーションとして設定してやることにしました。
ちなみに設定ファイルの実体は ~/.config/autostart/
にあります。
$ cat ~/.config/autostart/light-locker.desktop
[Desktop Entry]
Encoding=UTF-8
Version=0.9.4
Type=Application
Name=light-locker
Comment=
Exec=/usr/sbin/light-locker
OnlyShowIn=XFCE;
RunHook=0
StartupNotify=false
Terminal=false
Hidden=false
これで再ログイン(心配なら再起動)してみて、light-locker が起動していれば OK です。
$ ps -e | grep light-locker
764278 ? 00:00:00 light-locker
これで light-locker-command --lock
だけでロックできるようになっています。
Xfce のロックコマンドに light-locker を設定する
xfce4-session
の /general/LockCommand
に、文字通りロックコマンドを設定してやります。
デフォルトだと何も設定されていません。
$ xfconf-query -c xfce4-session -lvp /general/LockCommand
/general/LockCommand
xfconf-query
というコマンドで設定してやります。
$ xfconf-query --create -c xfce4-session -p /general/LockCommand -t string -s "light-locker-command --lock"
確認します。
$ xfconf-query -c xfce4-session -lvp /general/LockCommand
/general/LockCommand light-locker-command --lock
よさそう。これで xflock4
コマンドでロックしたときに、LightDM のテーマになります。
$ xflock4
デフォルトのロック画面を無効にする
ここまでの設定だと、サスペンドしたときに
- light-locker のログイン画面
- デフォルト(xfce4-screensaver)のログイン画面
の両方を通過してしまう可能性があります。
これは大変煩わしいので、後者は無効化しておきます。
GUI で可能です。
※CLI でも可能です。
$ xfconf-query --create -c xfce4-screensaver -p /lock/enabled -t bool -s 'false'
これでサスペンドして復帰しようとすると、light-locker のログイン画面だけになります。
$ xfce4-session-logout --suspend
ちなみに
xflock4
はシンプルな作りで、
-
xfce4-session
の/general/LockCommand
にセットしたコマンド xfce4-screensaver-command --lock
xscreensaver-command -lock
gnome-screensaver-command --lock
を順に舐めて、ヒットしたらロックして終了、みたいな感じです。
$ cat `which xflock4`
...
# First test for the command set in the session's xfconf channel
LOCK_CMD=$(xfconf-query -c xfce4-session -p /general/LockCommand)
# Lock by xscreensaver or gnome-screensaver, if a respective daemon is running
for lock_cmd in \
"$LOCK_CMD" \
"xfce4-screensaver-command --lock" \
"xscreensaver-command -lock" \
"gnome-screensaver-command --lock"
do
if [ ! -z "$lock_cmd" ]; then
$lock_cmd >/dev/null 2>&1 && exit
fi
done
...
今回設定したコマンドは↓これで取得しているということですね。
$ xfconf-query -c xfce4-session -p /general/LockCommand
書き忘れたこと
- xfce4-screensaver ごと無効化してもいいのか?した方がいいのか?
Discussion