もちろんです!今回の事象をブログ記事風にまとめると次のようになります。
前提
Windows 上で VirtualBox を使って Arch Linux を動かしています。 Arch Linux の環境はこんな感じ。
| 項目 | 名前 |
|---|---|
| ディスプレイマネージャ | LightDM |
| ウィンドウマネージャ | i3wm |
| ターミナルエミュレータ | Alacritty |
| アプリケーションランチャー | rofi |
| IME | fcitx-mozc |
今回起こった事象
発生
いつの間にか Arch Linux が起動しなくなっていた。 ブートローダで OS を選択したあとディスプレイマネージャが起動せず、真っ黒な画面で停止する。 キーボード入力を受け付けず、仮想コンソールも開けないので何もできない。
原因の確認
Live CD から arch-chroot して /var/log/Xorg.0.log を確認したら、こんな感じのエラーが出ていた。
[ 15.493] (EE) vmware(0): Unable to map mmio BAR. Invalid argument (22)
[ 15.493] (EE) vmware(0): Unable to map frame buffer BAR. Invalid argument (22)
[ 15.493] (EE)
[ 15.493] (EE) Backtrace:
[ 15.493] (EE) unw_get_proc_name failed: no unwind info found [-10]
[ 15.493] (EE) 0: /usr/lib/Xorg (?+0x0) [0x558ebac49f7c]
[ 15.493] (EE) unw_get_proc_name failed: no unwind info found [-10]
[ 15.493] (EE) 1: /usr/lib/libc.so.6 (?+0x0) [0x7f1729b94ef0]
[ 15.493] (EE) unw_get_proc_name failed: no unwind info found [-10]
[ 15.493] (EE) 2: /usr/lib/libc.so.6 (?+0x0) [0x7f1729cc39c9]
[ 15.493] (EE) unw_get_proc_name failed: no unwind info found [-10]
[ 15.493] (EE) 3: /usr/lib/xorg/modules/drivers/vmware_drv.so (?+0x0) [0x7f17293d5694]
[ 15.493] (EE) 4: /usr/lib/Xorg (AddScreen+0x11b) [0x558ebab62c4b]
[ 15.493] (EE) 5: /usr/lib/Xorg (InitOutput+0x3bd) [0x558ebac6715d]
[ 15.493] (EE) unw_get_proc_name failed: no unwind info found [-10]
[ 15.493] (EE) 6: /usr/lib/Xorg (?+0x0) [0x558ebab20c69]
[ 15.493] (EE) unw_get_proc_name failed: no unwind info found [-10]
[ 15.493] (EE) 7: /usr/lib/libc.so.6 (?+0x0) [0x7f1729b7e6b5]
[ 15.493] (EE) 8: /usr/lib/libc.so.6 (__libc_start_main+0x89) [0x7f1729b7e769]
[ 15.493] (EE) 9: /usr/lib/Xorg (_start+0x25) [0x558ebab222b5]
[ 15.493] (EE)
[ 15.493] (EE) Segmentation fault at address 0x0
[ 15.493] (EE)
Fatal server error:
[ 15.493] (EE) Caught signal 11 (Segmentation fault). Server aborting
[ 15.493] (EE)
[ 15.493] (EE)
Please consult the The X.Org Foundation support
at http://wiki.x.org
for help.
[ 15.493] (EE) Please also check the log file at "/var/log/Xorg.0.log" for additional information.
[ 15.493] (EE)
[ 15.505] (EE) Server terminated with error (1). Closing log file.X サーバが Segmentation fault で落ちているらしいことが分かった。
対処法の調査
エラーでググって出てきたページを斜め読み。
- https://bbs.archlinux.org/viewtopic.php?id=305770
- https://bbs.archlinux.org/viewtopic.php?pid=2245508#p2245508
- https://bbs.archlinux.org/viewtopic.php?id=306168
- https://gitlab.archlinux.org/archlinux/packaging/packages/xf86-video-vmware/-/issues/3#note_275921
- https://www.phoronix.com/news/Mesa-Stop-Building-XA
ざっくりまとめると恐らくこういう感じ。
- 仮想環境で使われるグラフィックドライバ
xf86-video-vmwareが正常に動作しなくなった。mesa(グラフィックドライバ)がgallium-xaなるライブラリ?のビルドをしなくなったのだが、xf86-video-vmwareはそれに依存しているので動かなくなった……みたいなことらしい
- これを受けて
xf86-video-vmwareの不具合は修正可能な範疇を超えていると判断され、Arch Linux の公式ソフトウェアリポジトリから削除された。 - 短期的には
xf86-video-vmwareをダウングレードすることで復旧可能。だが、将来のサポートは見込めないのでmodesettingドライバを使うか、 X11 から Wayland に移行するべき。
前提で挙げたソフトウェアはどれも Wayland での動作に何かしらの難を抱えているのだが、今後も似たようなことが増えていく可能性を考え、 Wayland への移行作業を進めることにした。
Wayland への移行
移行先
今回は移行先のソフトウェアをこんな感じにしてみた。
| 移行前 | Wayland での動作状況 | 移行後 |
|---|---|---|
| LightDM | 動かない?(動くと言っている人もいた) | Lemurs |
| i3wm | 動かない | sway |
| Alacritty | GNOME 環境でタイトルバーが表示されなくなるらしい(修正済み?) | Alacritty (変更なし) |
| rofi | 動かない1 | fuzzel |
| fcitx-mozc | 変換ウィンドウが変な位置に出る? | fcitx5-mozc |
sway は i3 との互換性を意識して開発されているらしく、移行が楽そうなので選んだ。 Alacritty は別に GNOME 環境じゃないので続投。 fcitx5-mozc は順当にバージョンを上げただけ。 Lemurs と fuzzel はなにか特別強い理由があるわけではないが、なんとなく軽そうだったので選んでみた。
設定
それぞれの設定の詳細は(一部を除き)解説記事がたくさんあるので、ざっくり方針だけ。
sway
i3 の設定ファイルがほとんどそのまま使えるので、既存の設定ファイルをコピーしてくるだけでも結構動いた。 変更を加えないといけない部分もあるが、それについては公式 wiki にまとめられている。 サンプルの設定ファイルには丁寧にコメントが書かれているのでそっちを持ってきて使うのでも良い。
一つ気をつけないといけないのは、設定ファイルでキーマップの設定をする必要があるところ(といっても Arch Wiki にも sway wiki にも書いてあるけど)。 swaymsg -t get_inputs でキーボードの identifier を調べて、
input <identifier> {
xkb_layout "jp"
}
input <identifier> xkb_model "jp106"とか書いておいたら良い。細かい設定は man 7 xkeyboard-config を参照。
ステータスバーも変える必要があったが、これは i3status-rust にした。名前に i3 と入っているが sway でも動く。 サンプルの設定をちょっといじるだけで簡単に動かせてかなり楽だった。とりあえずテーマと日付の表示形式だけ変えたが、ドキュメントを見るとかなり色々表示できそう。ポモドーロタイマーとかもある。
Lemurs
/etc/lemurs/wayland/sway に sway を実行するシェルスクリプトを置き、実行権限を付けておく。 このとき、 sway の実行前に設定しておくべき環境変数が色々あるようなのでついでに設定しておいた(参考)。
いろいろ設定項目があるようだがまだ特にいじっていない。
fuzzel
こちらも設定項目はいろいろあるがフォントぐらいしかいじっていない。 sway の設定ファイルで Alt+d で起動できるようにしておく。--config 引数で設定ファイルのパスを指定しておくと良い。
rofi では複数のタブを用意してアプリの起動だけではなくシステムのシャットダウンとかも出来るようにしていたのだが、 fuzzel ではタブの切り替えみたいなことは出来なそうだった。 fuzzel にも dmenu モードがあるので、それを使って電源オプション用のスクリプトを作っておいた。
#!/bin/bash
SELECTION="$(printf "1 - Lock\n2 - Suspend\n3 - Log out\n4 - Reboot\n5 - Shutdown" | fuzzel --dmenu -l 5 -p "Power Menu: ")"
case $SELECTION in
*"Lock")
swaylock;;
*"Suspend")
systemctl suspend;;
*"Log out")
swaymsg exit;;
*"Reboot")
systemctl reboot;;
*"Shutdown")
systemctl poweroff;;
esacこれを Alt+Shift+d で起動するようにしておいた。
移行した感想
移行作業自体は特段苦労しなかった……が、移行後の動作にいくつか問題がある。
- 重い。ブラウザとかとても動かせる状況じゃない。
- VS Code を起動しようとすると sway が落ちて(?)ログアウトさせられる。
原因はまだ調べられてないけど、まあ元々スペックカツカツだったしなあ……という感じ。
ちなみにこの記事は別の Arch Linux の環境で書かれました。こちらではまだ i3 が動いています。 こっちでは Hyprland とか Walker とか試してみたい所存。
以上。
Footnotes
Wayland 向けのビルドもあるので Wayland で全く使えないわけではない ↩
