Ubuntu 22.04无显示器连接时配置虚拟屏幕以运行Sunshine实现Moonlight远程访问的问题
Ubuntu 22.04无显示器连接时配置虚拟屏幕以运行Sunshine实现Moonlight远程访问的问题
看起来你已经走对了大半路子,手动启动Xorg能识别虚拟屏幕说明EDID和基础配置是没问题的,核心问题卡在GDM的自动启动逻辑上,以及Xorg的权限认证环节。下面我给你梳理一套完整的配置流程,解决无显示器时GDM自动加载虚拟屏幕、授权问题,最终让Sunshine正常运行:
1. 优化Xorg虚拟屏幕配置
首先我们要确保生成的xorg.conf能被GDM正确识别,同时权限无误:
- 先备份原有配置(如果存在):
sudo mv /etc/X11/xorg.conf /etc/X11/xorg.conf.bak - 重新生成精准的NVIDIA Xorg配置,注意替换
$USER为你的实际用户名:sudo nvidia-xconfig -a --allow-empty-initial-configuration --use-display-device="DP-0" --connected-monitor="DP-0" --custom-edid="DP-0:/home/$USER/edid-2.bin" --enable-all-gpus - 编辑生成的
/etc/X11/xorg.conf,在Section "Device"区块添加一行(避免NVIDIA logo干扰):Option "NoLogo" "True" - 确保EDID文件权限让Xorg能读取:
sudo chmod 644 /home/$USER/edid-2.bin
2. 强制GDM使用Xorg(禁用Wayland)
Sunshine依赖Xorg,而Ubuntu 22.04默认可能用Wayland,我们需要切换到Xorg会话:
- 编辑GDM配置文件:
sudo nano /etc/gdm3/custom.conf - 找到以下两行,去掉注释(删除开头的
#):WaylandEnable=false DefaultSession=gnome-xorg.desktop - 保存退出后重启GDM生效:
sudo systemctl restart gdm
3. 解决Xorg的权限授权问题
当你通过SSH操作时,普通用户默认没有访问GDM启动的Xorg显示(:0)的权限,我们可以通过以下方式解决:
- 先获取GDM的Xauthority文件路径:
你会看到类似ps aux | grep Xorg-auth /run/user/127/gdm/Xauthority的内容,记下这个路径。 - 将GDM的授权信息导入到你的用户会话中:
xauth merge /run/user/127/gdm/Xauthority - 设置环境变量临时生效,之后就能正常使用
xrandr:export DISPLAY=:0 xrandr # 测试是否能正常识别虚拟屏幕
4. 配置Sunshine自动启动(确保在Xorg环境下运行)
为了让Sunshine在无显示器时也能自动启动并连接到Xorg,我们有两种方式:
方式一:通过Sunshine自带的启动设置
打开Sunshine的图形设置界面,在「启动」选项中勾选「随系统启动」,这样GDM启动Xorg后,Sunshine会自动在正确的显示环境下运行。
方式二:创建systemd服务(更可靠)
如果SSH操作更方便,可以创建用户级的systemd服务:
- 创建服务文件:
nano ~/.config/systemd/user/sunshine.service - 写入以下内容(注意替换XAUTHORITY路径为你之前获取的):
[Unit] Description=Sunshine Streaming Service After=graphical.target [Service] ExecStart=/usr/bin/sunshine Environment=DISPLAY=:0 Environment=XAUTHORITY=/run/user/127/gdm/Xauthority Restart=always [Install] WantedBy=graphical.target - 启用并启动服务:
systemctl --user enable --now sunshine.service
5. 无显示器场景测试
完成以上配置后,断开显示器并重启电脑:
- 通过SSH登录你的Ubuntu主机
- 检查Xorg是否正常启动:
ps aux | grep Xorg,确认进程存在 - 运行
xrandr --display :0,应该能看到DP-0已连接,分辨率和你EDID配置一致 - 打开Moonlight客户端,尝试连接主机,此时应该能正常建立远程会话
关于你之前的疑问解释
你提到删除xorg.conf和.Xauthority后还能正常运行,是因为Ubuntu 22.04的GDM默认会自动检测连接的显示器,并动态生成临时Xorg配置,不需要手动的xorg.conf;而.Xauthority是用户会话的授权文件,当你用物理显示器登录时,GDM会自动为你的用户生成对应的授权信息,所以不需要手动配置。
备注:内容来源于stack exchange,提问作者Lucas Scheepers




