物理モニターなしで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(任意) | 追加の仮想画面を作成 |


