2025年12月12日

FreeBSD 14.3 をインストールする (その 3): Wayland と Sway

長らくお世話になった X11 が Wayland に取って代わられそうだということで、ものは試しで Wayland をインストールしてみました。合わせて Sway というウィンドウマネージャー (Wayland では「ウィンドウマネージャー」といわずに「コンポジター」というらしい) もインストールしました。今回はとりあえずインストールできましたという報告のみです。まだいろいろ手探り状態なので、もしかしたらまた X11 に戻るかもしれません。

供試 PC

今回 Wayland をインストールしようとするパソコンは、富士通の LIFEBOOK U9310/D というノートパソコンです。GPU は Intel UHD Graphics (CPU 内蔵) です。

参考資料と注意点

基本的には FreeBSD ハンドブックの第 6 章に書かれている内容に沿って進めます。

なお、ZFS と Wayland のコンビには、何か不具合があるようです。詳細は上記リンク先の 6.2 節を参照してください。

グラフィックドライバのインストール

インテルの内蔵 GPU では drm-kmod というパッケージに含まれる i915kms ドライバを使用します。これをインストールして、sysrc コマンドで /etc/rc.conf に i915kms をロードする設定を追記します。

# pkg install -y drm-kmod
# sysrc kld_list+=i915kms

Wayland 本体のインストールと設定

Wayland と seatd をインストールします。seatd というのは一般ユーザーがグラフィックスカードにアクセスするためのデーモンらしいです。

# pkg install -y wayland seatd

video グループに使用者のユーザー名を追加します。

# pw groupmod video -m miji

OS 起動時に seatd が起動するように /etc/rc.conf に追記して、seatd を起動します。

# sysrc seatd_enable="YES"
# service seatd start

Sway のインストールと設定

Sway 本体、Alacritty というターミナルエミュレータ、それからフォントをインストールします。ハンドブックではその他のユーティリティソフトもいろいろインストールしていますが、それらは後回しにします。

# pkg install -y sway alacritty noto-basic noto-jp noto-emoji noto-extra

dbus を有効化します。

# sysrc dbus_enable="YES"
# service dbus start

Sway の設定ファイルを用意します。

% mkdir -p ~/.config/sway/
% cp /usr/local/etc/sway/config ~/.config/sway/

細かい設定は後回しにして、とりあえずターミナルエミュレータだけ Alacritty に変更します。

~/.config/sway/config (差分)
 set $up k
 set $right l
 # Your preferred terminal emulator
-set $term foot
+set $term alacritty
 # Your preferred application launcher
 set $menu wmenu-run

このあたりからの作業は慎重にやらないと、場合によっては Sway が起動しなかったり、起動はしてもウンともスンともいわなくなったりして詰むかもしれません (もう何回か詰んだんですけどね…)。もしそうなってしまったら、Ctrl + Alt + F1 (とか F2 とか F3 とか) を押して別の TTY でログインして復旧を試みてください。

では Sway を起動します。

% sway

一幅のさわやかな絵画のような画面が表示されたら起動成功です (図 1)。

図 1: Sway が起動した
図 1: Sway が起動した

ところで、まだモニタ解像度とリフレッシュレートの設定をしてませんでした (よーわからんけど今まではデフォルトの設定で起動していたと思われる)。これらの情報は、一たび Sway が起動すれば swaymsg コマンドを使って取得することができます。Windows + Enter キーでターミナルエミュレーターを起動して、次のように実行します。

% swaymsg -t get_outputs
Output eDP-1 'LG Display 0x0605 Unknown' (fourced)
  Current mode: 1920x1080 @ 60.020 Hz
  ...
  Available modes:
    1920x1080 @ 60.020 Hz

これを見ると、モニタ解像度はメーカーが公表している仕様のとおり、1920 × 1080 のようです。リフレッシュレートの仕様は取説やメーカーのホームページには明記されていないのでよくわかりませんが、これを見るかぎり 60.020 Hz のようです。得られた値を config ファイルに記入し、再起動します。

~/.config/sway/config (差分)
 #   output HDMI-A-1 resolution 1920x1080 position 1920,0
 #
 # You can get the names of your outputs by running: swaymsg -t get_outputs
+output eDP-1 mode 1920x1080@60.020Hz

 ### Idle configuration
 #

なお、Sway を終了させるには Windows + Shift + E キーを同時押しします。画面上部に黄色い帯が表示されるので (なんかエラーでも発生したのかと思った)、右上の [Yes, exit sway] をクリックします (図 2)。

図 2: Sway を終える
図 2: Sway を終える

コンソールログイン時に Sway を自動起動する

Arch Linux の Sway のページを見ていたら、コンソールログイン時 (TTY ログイン時) に Sway を自動的に起動する方法が書かれていました。なんか X11 (とか Wayland とか) とグラフィカルログインはワンセットみたいな思い込みがあったんですが、素のログインプロンプトから直にウィンドウマネージャーが起動するというのはこの上なくシンプルでいいなと思ったので、真似させてもらうことにしました。

ログインシェルが Z shell の場合、~/.zprofile を作って次のように書きます。

~/.zprofile
[ "$(tty)" = "/dev/ttyv0" ] && exec sway >& ~/sway.log

残課題

ここまでは思ったよりもすんなり来たんですけど、問題はこの先です……。X11 で設定していたあれやこれやは、Wayland では一体どうなるんでしょうか?特に気になるのが .Xmodmap ですね、ちらっと調べたら XKB というのがあったんですが、設定方法が難解すぎて気絶しそうになりました。他には keyd というのがあって、これは設定はカンタンそうだし、自分がやりたい以上のことができそうな予感がするんですが、packages/ports になってはいるものの、残念ながらメンテナンスされていない様子。実際、私が試したかぎりでは期待したようには動作しませんでした。まあもうちょっと足掻いてみて、打つ手なしならそっと X11 に戻ろうと思っています。

関連記事