1777 文字
9 分
なにもしてないのに Arch Linux がこわれました!(xf86-video-vmware が壊れていた)

もちろんです!今回の事象をブログ記事風にまとめると次のようになります。

前提#

Windows 上で VirtualBox を使って Arch Linux を動かしています。 Arch Linux の環境はこんな感じ。

項目名前
ディスプレイマネージャLightDM
ウィンドウマネージャi3wm
ターミナルエミュレータAlacritty
アプリケーションランチャーrofi
IMEfcitx-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 で落ちているらしいことが分かった。

対処法の調査#

エラーでググって出てきたページを斜め読み。

ざっくりまとめると恐らくこういう感じ。

  • 仮想環境で使われるグラフィックドライバ 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
AlacrittyGNOME 環境でタイトルバーが表示されなくなるらしい(修正済み?)Alacritty (変更なし)
rofi動かない1fuzzel
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#

  1. Wayland 向けのビルドもあるので Wayland で全く使えないわけではない