wayvnc on sway with AMD GPU ― 2024年10月22日 21:20
No DRM backend supplied
proxmox 上の sway vm の画面表示が遅い事から、wayvncを使ってみました。
wayvnc in headlessからWLR_BACKEDNS=headless で sway を起動、 WAYLAND_DISPLAY=wayland-1 で wayvnc を起動すれば、 sway に vnc 接続できました。
調査の中で、hyprland の issues(Crash in headless mode)から、hyprland も同様に wayvnc 経由できそうだったので、VM の GPU が使えるようにできればと思いました。
ただ、wlroots specific に挙がっている WLR_DRM_DEVICESに、/dev/dri/card0 を指定しても、vnc 接続先の sway は GPUを使用していません。(amdgpu_top で、使用率が上がらないため)
sway 起動時に d オプションで起動して、デバッグログを出力させ、確認すると、"No DRM backend supplied, failed to create wlr_drm_lease_v1_manager"が出ていました。wlroots の wlr_drm_lease_v1.c 内で、DRMが見つけられてないようです。
seat 不足
最初はOSとして、GPUが正しく認識できてないのかと疑いましたが、lspci -v でも、 dmesg でも、amdgpu_top でも、amdgpuが確認できている為、そうではないと思いました。
sway/wlroots が GPUを認識できてないのだろうと、デバッグログとコードを、追ったのですが判りませんでした。
ふと見た、Sunshine のheadlessに関するissuesでsway を起動する前に、seatd を起動していました。alpine linux 3.20 になってから、setup-desktop だけで sway が入るものと思っていましたが、seatd は入りません。
Setting up a seat manager のとおり、Wayland コンポジタが、 入出力デバイスに生でアクセスするために、seatd が必要でした。
bootswayvnc.sh
bootswayvnc.sh として、以下のコードを用意しました。
WLR_BACKENDS=headless WLR_DRM_DEVICES=/dev/dri/card0 dbus-run-session -- sway & WAYLAND_DISPLAY=wayland-1 wayvnc 0.0.0.0 5980 &
ssh で接続し、bootswayvnc.sh を実行すると、5980ポートに外部から vnc接続でき、 かつ、GPU が使える swayに接続できました。
.profile には、以下を設定しています。
export XDG_SESSION=wayland export XDG_CURRENT_DESKTOP=sway export LIBSEAT_BACKEDN=seatd if [ -z "$XDG_RUNTIME_DIR" ]; then XDG_RUNTIME_DIR="/tmp/$(id -u)-runtime-dir" mkdir -pm 0700 "$XDG_RUNTIME_DIR" export XDG_RUNTIME_DIR fi
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。