とにかく書く

日々の雑感や知り得たことを、とにかく書いています

Arch Linux + Nvidia 環境で X なしに Weston を起動

Arch Linux + Nvidia ドライバの環境にて X を起動せずに Weston (Wayland コンポジタのリファレンス実装)を起動したときのメモ。

X 上 (Fvwm が起動した状態) でコンソールから weston を実行すると、weston ウィンドウが表示された。
だけど X を起動していない状態で weston を実行すると、DRM を使用しようとしてエラーを吐いて起動しなかった。
これは、X上だと X がディスプレイサーバとして機能している一方、Xが起動していないとDRMを使おうとするが、nvidia ドライバだとデフォルトでは DRM が有効になっていないため、weston が起動に失敗しているため。

Arch Wiki の NVIDIA のページによると NVIDIA ドライバも 364.16 からは DRM カーネルモードセッティングのサポートがなされているとのこと。
そこで、Arch Wiki を参考に設定し、X が起動していない状態から weston を起動するまでできたので備忘録として残す。

一時的な設定による起動

Arch LinuxNVIDIA のページによると、DRMを有効にするにはカーネルにパラメータを渡し、mkinitcpio でモジュールをロードする必要がある。

mkinitcpio で BOOT 前に nvidia モジュールを読み込ませるよう設定する。
/etc/mkinitcpio.conf の MODULES に nvidia 関係を追記した。
変更前:MODULES=()
変更後:MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)

次は カーネルパラメータのページを参考に、ブートローダGRUB を使用しているので、以下の手順でカーネルパラメータを設定した。
・PCを再起動する。
BIOS 起動に移るスプラッシュ画面が出た後、GRUBLinux を選択する画面を表示する。
・ここでキーボードの e を押す。
→起動コマンドが一覧で表示される
Linux で始まる行(vmlinuz の実行)の行末に nvidia-drm.modeset=1 を追記する。
・F10 を押す。
→OSが起動される。

X が起動していれば X を終了し、ログインシェルにて weston と入力すると、weston が起動した!
weston を終了させるには、

 $ pkill weston

や、kill コマンドで weston のPIDを指定すればよい。

永続的な設定

GRUBへの永続的な設定は、カーネルパラメータのページから、以下の手順で実施した。
/etc/default/grub を開いて、GRUB_CMDLINE_LINUX_DEFAULT の設定値に nvidia-drm.modeset=1 を追記する。
それから grub の設定を再構築する。

# grub-mkconfig -o /boot/grub/grub.cfg

nvidia のバージョンが上がったときに initramfs をアップデートするよう、Arch WikiNVIDIA に記載のとおり /etc/pacman.d/hooks/nvidia.hook を作成して以下を入力した。

[Trigger]
Operation=Install
Operation=Upgrade
Operation=Remove
Type=Package
Target=nvidia

[Action]
Depends=mkinitcpio
When=PostTransaction
Exec=/usr/bin/mkinitcpio -P

インストールしたパッケージは nvidia だった(pacman -Rs nvidia<タブ> で表示される)ので、上記のまま。もし違う場合は Target を nvidia から nvidia-???? (???? はインストールされたパッケージ) に変更する必要がある。

weston を触った感想

動作が非常に軽快になった。
いままで fvwm を単独で(デスクトップ環境なしに)使っていて、メモリをそんなに使用しないが、それでも weston だとウェブの画面などが「サッと」素早く出てくるように感じた。
あと、心持ちか画面が綺麗に見える。これもレンダリングの加減だろうか。

GTK のウィンドウは表示できたが、Qt のウィンドウは追加パッケージが必要のようで動かなかった。
emacs も当然ながらコンソール内で表示された。
これまで ずっっっとX の上でやってきたので、なんだか外国に来た感覚が少しする。
xinit も xmodmap も関係ない。不思議な気分だった。