hp ProbookとLenovo ThinkPadにNomadBSDをインストール、そしてグラフィカルログイン

NomadBSDの新版のインストーライメージ(USBメモリからライブ起動もできます)がリリースされました。12月上旬です。
今日は2023年1月2日ですが、この時点での最新のNomadBSDのインストーライメージは
NomadBSD 131R-20221130 (64-bit/x86-64/amd64, UFS)
です。

amd64にはZFSバージョンもありますが、ウチはユーザーもマシンもまだ非力なのでUFSバージョンを選択しました。
NomadBSDのオフィシャルWebサイトから ダウンロードできます。

 

今回のリリースでは、ベースになるFreeBSDが最新のFreeBSD 13.1-RELEASEになりました。package間やライブラリとの依存関係がかなり整理されています。

次に重要な変更点は、ディスプレイマネージャが変わったことです。SLiM からSDDMになりました。
ディスプレイマネージャとは実にわかりにくいソフトウェアカテゴリの名称ですが、ログイン時にグラフィカルな画面で眼福になったり、デスクトップのセッションを割と自由に選べるというものです。
このディスプレイマネージャの画面にユーザー名とパスワードを入力します。
最近のWindowsだと、こんな画面です。アレですよ。アレ。

本当は、「真っ暗な」コンソールでFreeBSDにログインして、システムメンテナンスが終わったら

% startx

とタイプする方が安全だしツブシも効くし、かっこいいんですがね。

NomadBSD 131Rを使ってFreeBSDをインストールすると便利であることは事実です。
ハードウェアとOS (FreeBSD 13.1-RELEASE)のブート直後、設定済みのSDDMからログインするだけで普通にXを起動させてOpenboxで遊べるのですが…。OSのインストールまではNomadBSDに助けてもらったのは事実ですが、やはりここからは自分のシステムです。
グラフィカルなログインの部分からカスタマイズしたいじゃないですか。
どうも新しいnomadBSDのログイン画面は地味すぎて好みではありません。
プレインストールで設定済みのSDDMのテーマはelarunをカスタマイズしたnomadbsd-elarunというものです。

結構ググりまくって苦労して他のSDDMテーマにカスタマイズしました。3か月もすると全部忘れるのはわかりきっているので、ここにメモ代わりに記録しておきます。
注意すべきこと、やってはいけないことなどは最後にまとめて書きます。

(1) 気に入ったSDDMのテーマをインターネットからダウンロードする

 まず、私が新しく使用したSDDMのテーマは sugar-candy というか “Sugar Candy for SDDM”というものです。

“Sugar Candy”はstore.kde.orgからダウンロードしました。
このWebサイトは、昔のkde-lookのようです。

ここだけの話ですが、SDDMはQTなどを激しく使うので、注意してください。QTやKDEが大嫌いだという人は、SDDMにも近づかない方がいいですよ。
やはり、黒いコンソールからログインして

startx

が最強です。
ディスプレイマネージャを使ったグラフィカルなログインなんて甘えです。(真に受けないでください。私はふざけているのです)

(2)SDDMのテーマをシステムにインストールする

次に、ダウンロードしたsugar-candyのデータファイル
sugar-candy.tar.gz (version 1.6)
を展開します。sugar-candyというディレクトリができます。
それを

/usr/local/share/sddm/themes/

にコピーします。
sudoでコピーするか、rootになって作業しましょう。
上記のディレクトリには、すでに

elarun/
maldives/
maya/
nomadbsd-elarun/


などのテーマディレクトリがインストールされています。
このへんは、NomadBSD 131Rのインストーラがやってくれたことです。

 

(3) SDDMの設定ファイルを作る

SDDMにはデフォルトのサンプル設定ファイルを生成するコマンドがあります。
rootでやる方がいいでしょう。

# sddm --example-config > /usr/local/etc/sddm.conf

どうやらKDEを使っている限りSDDMは面倒な設定作業をしないでも上手く動くらしいのです。KDEからグラフィカルなインターフェイスで設定を変更できるのでしょうね。
私はOpenboxを使っているのでそうもいかないので、上記のコマンドを叩きました。

(4) SDDMのテーマを変更する

上の工程で作ったサンプルファイル

/usr/local/etc/sddm.conf

を編集します。

これの中の[Theme]という部分を探し、編集します。

[Theme]
Current=sugar-candy
CursorTheme=capitaine_cursors

(5) SDDMの背景画面を設定する

/usr/local/share/sddm/themes/sugar-candy/theme.conf

を編集します。3行目くらいに

Background=”Backgrounds/xxxxxxx.png”

のような設定が記述されています。これを変更します。
私は以下のように編集しました。

Background="Backgrounds/sddm-pinball-wallpaper.jpg"

(6) sugar-candyの背景画面をインストールする

気に入っている背景画像(Openboxのデスクトップ画像のようなものから選びましょう)を下記の要領で適切なsugar-candyのディレクトリにコピーしましょう。
もちろん、上の(5) で設定したファイル名と一致させてください。

# cp ~/Wallpapers/sddm-pinball-wallpaper.jpg /usr/local/share/sddm/themes/sugar-candy/Backgrounds

(7) テスト

準備はこれで終わりなはずです。
システムをリブートしてグラフィカルなログインを試します。

設定を失敗すると、SDDMのログイン画面が表示されないで立ち往生するリスクがあります。ログインができないので、トラブルシューティングと修理も大変です。ここまでの記事は2台の実機で試した結果なのである程度検証できているつもりですが、私はよく間違える人間です。
他人のシステムが起動できなくなっても、責任は負えません。
ご自分の自己責任で慎重にダブルチェックしてからリブートしてください。

 

注意事項:

(1)
/usr/local/etc/sddm.conf.d/theme.conf
という設定ファイルがあります。内部には

 

[Theme]
Current=nomadbsd-elarun
CursorTheme=capitaine-cursors

という記述があるので、非常に期待できそうなのですが、期待しないでください。
どういうわけか、ここの設定でSDDMのテーマをsugar-candyに変更しても、実際には何も変わりません。

(2)
ときどきSDDMのログイン画面でエラーが何行も吐き出されて、背景画像が変更されないことがあるようです。
私の場合、Lenovo ThinkPad L450では大丈夫でしたが、hp ProBook 430 G3では初回ブートでエラーが出ました。

SDDMはQTに依存しているようなので、慌てずにamarokをインストールしましょう。amarokはKDEのオーディオプレイヤーです。
私の場合、なんとかOpenboxにログインしてamarokをインストールしたらメディア関係のエラーはなくなりました。
ここでqmmpをインストールして試してはいけません。どういうわけかOpenboxの設定がおかしくなり、タスクバーやメニューやドックが消えます。

ここで、SDDMの設定に成功した2つのマシンの様子をドヤリングします。
まずはhp Probox 430 G3。

Xが起動するとこんな感じ。⏫

次はLenovo ThinkPad L450。
(2022年12月、中古で9,800円で買いました)

Xが起動するとこんな感じ。⏬

では、最後に新しいNomadBSD (131R) + Openboxの主な設定ファイルを公開します。

まず /etc/rc.conf

allscreens_flags="green"
bsdstats_enable="NO"
clear_tmp_X="NO"
cupsd_enable="YES"
dbus_enable="YES"
devfs_system_ruleset="desktopuser"
dsbdriverd_enable="YES"
dsbmd_enable="YES"
entropy_file="NO"
hostname="TP-L450-BSD"
kld_list="cuse4bsd /boot/modules/i915kms.ko"
ldconfig_insecure="YES"
lpd_enable="NO"
ntpd_enable="YES"
ntpd_sync_on_start="YES"
powerdxx_enable="YES"
savecore_enable="NO"
sendmail_enable="NO"
sendmail_msp_queue_enable="NO"
sendmail_outbound_enable="NO"
sendmail_submit_enable="NO"
setup_mouse_enable="YES"
syslogd_enable="YES"
update_motd="NO"
webcamd_enable="YES"
economy_cx_lowest="C2"
performance_cx_lowest="C2"
initgfx_enable="NO"
sddm_enable="YES"
init_vbox_enable="YES"
avahi_daemon_enable="YES"
ipv6_activate_all_interfaces="YES"
ackfwl_enable="YES"
load_iichid_enable="YES"
if_re_load="YES"
if_re_name="/boot/modules/if_re.ko"
keymap="jp.106"
initgfx_kmods="/boot/modules/i915kms.ko"
sddm_lang="ja_JP"
ifconfig_em0="DHCP"
wlans_iwm0="wlan0"
ifconfig_wlan0="WPA DHCP"
ifconfig_em0_ipv6="inet6 accept_rtadv"
linux_enable="YES"
ubuntu_enable="YES"
sshd_enable="YES"
samba_server_enable="YES"

次に ~/.xprofile

#!/bin/sh
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/home/harry/bin

export QT_QPA_PLATFORMTHEME=qt5ct
export QT_FONT_DPI=96

export XMODIFIERS=@im=ibus
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus

#
# Some display managers don't source the login files /etc/login.conf and
# ~/.login_conf. Make sure the environment variables defined in those files
# are set.
#
for e in $(env -L $(whoami); env -U $(whoami)); do
export "$e"
done

#
# If not set to "unix", gvfs will use bsdisks which fails to unmount volumes
# mounted on directories it does not expect.
#
export GIO_USE_VOLUME_MONITOR=unix

xrdb ~/.Xresources

uid=$(id -u)

#
# Check if ~/.cache is a symbolic link to a directory owned by the user.
# If the link's target is not a directory or does not exist, create a
# directory owned by the user under /tmp, and make ~/.cache a symbolic
# link to it.
#
if [ -L ~/.cache ]; then
if [ -d ~/.cache ]; then
ownerid=$(stat -L -f %u ~/.cache)
if [ "${ownerid}" != "${uid}" ]; then
recreate_cache=1
fi
else
recreate_cache=1
fi
if [ "${recreate_cache}" = "1" ]; then
user=$(whoami)
unlink ~/.cache
cachedir=$(mktemp -d /tmp/${user}.XXXXXX)
ln -s ${cachedir} ~/.cache
fi
fi

#
# Kill dbus services from a previous session in order to prevent hangs.
#
for s in 15 9; do
for p in dbus-launch gvfsd-fuse; do
pgrep -U ${uid} -q $p && pkill -$s $p
done
done
eval $(dbus-launch --sh-syntax)

# Apply screen settings from DSBDisplaySettings
~/.config/DSB/dsbds.sh

# Apply screen settings from ArandR
~/.screenlayout/default.sh

tpquirk
enable_tapping
~/.config/xkbdmap.sh

最後の行でキーボードのCtrlとCapsLockを入れ替えようとしているのですが、挫折しています。
仕方ないので我慢しています。

日本語インプットメソッドは、NomadBSDの意向でIBusがデフォルトになってしまいました。
気に食わないのですが、メリットがないわけでもないので、これもお付き合いしています。

(このメリットというのは、「何だかよくわかんないけど日本語109キーボードに設定するのが比較的ラクチン」というものです。)

最後に、~/.xinitrc

#!/bin/sh
export EDITOR=vim
export LANG=ja_JP.UTF-8
export LC_ALL=ja_JP.UTF-8
export LC_CTYPE=ja_JP.UTF-8

. ~/.xprofile

# /usr/local/bin/mozc start
# ibus-daemon -r --daemonize --xim

[ -z "$1" -o "$1" = "default" ] && exec ck-launch-session openbox-session
exec ck-launch-session "$1"

9行目あたり、

. ~/.xprofile

の直後の2行がコメントアウトされていますが、私がコメントアウトしました。
これをやらないと、何故かOpenboxのメニューが行方不明になったりします。非常にイライラします。
IBusはこれだから嫌いです。
そして、何故か2行コメントアウトしてもIBus+Mozcで日本語入力と漢字変換ができています。

まあ動けば正義ということで。