Ubuntu 26.04 Wayland ヘッドレス仮想ディスプレイ設定ガイド

物理モニターなしでGNOMEデスクトップを維持し、リモートデスクトップ接続を可能にする手順をまとめました。

環境

  • OS: Ubuntu 26.04 LTS(Resolute Raccoon)
  • DE: GNOME 50(Wayland専用、Xorg廃止済み)
  • GPU: AMD Radeon(amdgpu)
  • 目的: モニターなしでRDP/VNC接続を維持する

仕組み

Ubuntu 26.04はXorgが完全廃止されているため、xrdpやxorg-dummyは使えなくなっています。 代わりにカーネルレベルでEDIDファイルをGPUの空きDPポートに割り当て、 「モニターが繋がっている」とOSに認識させます。

amdgpu(card1)の DP-1 ← EDIDファイルを割り当て → GNOMEが常時ディスプレイを認識

手順

もしかしたら4番からで良さそうですが、ひとまず無事動いているので。次回設定することがあれば試してみます。

1. GNOMEのサービスに仮想モニターを追加(オプション)

追加解像度の仮想画面が必要な場合:

mkdir -p ~/.config/systemd/user/org.gnome.Shell@wayland.service.d
nano ~/.config/systemd/user/org.gnome.Shell@wayland.service.d/persistent-virtual-monitor.conf

内容:

[Service]
ExecStart=
ExecStart=/usr/bin/gnome-shell --virtual-monitor 1920x1080
systemctl --user daemon-reload
# ログアウト→再ログインで反映

2. VKMSカーネルモジュールの有効化

sudo modprobe vkms enable_cursor=1
echo "vkms" | sudo tee /etc/modules-load.d/vkms.conf
echo "options vkms enable_cursor=1" | sudo tee /etc/modprobe.d/vkms.conf

確認:

lsmod | grep vkms
# vkms が表示されればOK

3. GDM自動ログインの設定

モニターなしで再起動してもGNOMEセッションが自動起動するように:

sudo nano /etc/gdm3/custom.conf
[daemon]
AutomaticLoginEnable=true
AutomaticLogin=ユーザー名

4. EDIDファイルの準備

GPUの空きポートを確認:

for p in /sys/class/drm/*/status; do
  con=${p%/status}
  echo -n "${con#*/card?-}: "
  cat $p
done

disconnected のポート(例: DP-1)を使う。

EDIDバイナリファイルを配置:

sudo mkdir -p /usr/lib/firmware/edid
sudo curl -L -o /usr/lib/firmware/edid/1080p.bin \
  "https://raw.githubusercontent.com/akatrevorjay/edid-generator/master/1920x1080.bin"

# サイズ確認(128バイトであること)
ls -la /usr/lib/firmware/edid/1080p.bin

5. initramfsにEDIDを組み込む

sudo nano /etc/initramfs-tools/hooks/edid

内容:

#!/bin/sh
PREREQ=""
prereqs() { echo "$PREREQ"; }
case "$1" in prereqs) prereqs; exit 0;; esac
. /usr/share/initramfs-tools/hook-functions
copy_file firmware /usr/lib/firmware/edid/1080p.bin /lib/firmware/edid/1080p.bin
sudo chmod +x /etc/initramfs-tools/hooks/edid
sudo update-initramfs -u

6. GRUBにカーネルパラメーターを追加

sudo nano /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT を編集(DP-1 は手順4で確認したポート名に合わせる):

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash drm.edid_firmware=DP-1:edid/1080p.bin video=DP-1:e"
sudo update-grub
sudo reboot

7. 動作確認

再起動後:

# EDIDが正常に読み込まれているか
sudo dmesg | grep -E "EDID|DP-1|forcing" | head -10
# → [drm] forcing DP-1 connector on(Invalidエラーがなければ成功)

# DP-1がconnectedになっているか
for p in /sys/class/drm/*/status; do
  con=${p%/status}
  echo -n "${con#*/card?-}: "
  cat $p
done
# → DP-1: connected が表示されればOK

トラブルシューティング

Invalid firmware EDID エラーが出る場合

EDIDファイルが壊れている。正しい128バイトのバイナリか確認する:

ls -la /usr/lib/firmware/edid/1080p.bin
# → 128 bytes であること

テキストファイルをダウンロードしてしまった場合は削除して再取得:

sudo rm /usr/lib/firmware/edid/1080p.bin
sudo curl -L -o /usr/lib/firmware/edid/1080p.bin \
  "https://raw.githubusercontent.com/akatrevorjay/edid-generator/master/1920x1080.bin"

リモートデスクトップ(GNOME RDP)がmacで繋がらない場合

GNOMEのヘッドレスVNCを代わりに使う:

# TLS証明書を生成
mkdir -p ~/.local/share/gnome-remote-desktop/
openssl req -new -newkey rsa:4096 -days 720 -nodes -x509 \
  -subj /C=JP/ST=NONE/L=NONE/O=GNOME/CN=localhost \
  -out ~/.local/share/gnome-remote-desktop/rdp.crt \
  -keyout ~/.local/share/gnome-remote-desktop/rdp.key

# ヘッドレスRDP設定
grdctl --headless rdp set-tls-cert ~/.local/share/gnome-remote-desktop/rdp.crt
grdctl --headless rdp set-tls-key  ~/.local/share/gnome-remote-desktop/rdp.key
grdctl --headless rdp set-credentials
grdctl --headless rdp enable
systemctl --user enable --now gnome-remote-desktop-headless.service

# またはVNC(macの「画面共有.app」や「Finder→移動→サーバへ接続→vnc://IPアドレス」で接続)
grdctl --headless vnc set-password パスワード
grdctl --headless vnc enable

構成まとめ

コンポーネント役割
VKMS(card0)カーネル仮想ディスプレイ(GNOMEには現状未使用)
amdgpu DP-1 + EDIDモニターが常時接続されているとGNOMEに認識させる
GDM自動ログイン再起動後もセッションを自動起動
--virtual-monitor(任意)追加の仮想画面を作成

タイトルとURLをコピーしました