You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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. 无显示器场景测试

完成以上配置后,断开显示器并重启电脑:

  1. 通过SSH登录你的Ubuntu主机
  2. 检查Xorg是否正常启动:ps aux | grep Xorg,确认进程存在
  3. 运行xrandr --display :0,应该能看到DP-0已连接,分辨率和你EDID配置一致
  4. 打开Moonlight客户端,尝试连接主机,此时应该能正常建立远程会话

关于你之前的疑问解释

你提到删除xorg.conf.Xauthority后还能正常运行,是因为Ubuntu 22.04的GDM默认会自动检测连接的显示器,并动态生成临时Xorg配置,不需要手动的xorg.conf;而.Xauthority是用户会话的授权文件,当你用物理显示器登录时,GDM会自动为你的用户生成对应的授权信息,所以不需要手动配置。

备注:内容来源于stack exchange,提问作者Lucas Scheepers

火山引擎 最新活动