Xrandr:无法打开显示器(尝试添加虚假显示器)

Xrandr:无法打开显示器(尝试添加虚假显示器)

我已经在 PC 上安装了 Ubuntu 22.04.2 LTS。有一种情况是,当我的 GPU 上没有连接显示器时,我需要使用 Moonlight 和 Sunshine 访问这台 PC。Sunshine 是主机流媒体服务,Moonlight 是客户端服务。Sunshine 使用 Xorg 和 PulseAudio。当我的 GPU 上连接显示器时,我已经在 PC 上成功启动了 Sunshine。只有这样,我才能通过 Moonlight 连接到我的 PC。

如果没有连接显示器,Xorg 无法启动,Sunshine 也无法启动。我做了一些研究,我知道可以使用一些 Xorg 配置和 edid.bin 文件伪造一个虚拟屏幕。

我事先断开了显示器的连接,并通过 SSH 会话访问了我的 PC。我遵循的步骤如下:

  1. 我已经下载了这是我的屏幕的 edid.bin 文件
  2. 我运行了以下命令: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"
  3. 我查看了/etc/X11/目录,发现创建了一个名为的文件xorg.conf
  4. 该文件的内容如下:
# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig:  version 525.105.17

Section "ServerLayout"
    Identifier     "Layout0"
    Screen      0  "Screen0"
    InputDevice    "Keyboard0" "CoreKeyboard"
    InputDevice    "Mouse0" "CorePointer"
EndSection

Section "Files"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Mouse0"
    Driver         "mouse"
    Option         "Protocol" "auto"
    Option         "Device" "/dev/psaux"
    Option         "Emulate3Buttons" "no"
    Option         "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Keyboard0"
    Driver         "kbd"
EndSection

Section "Monitor"
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "Unknown"
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "NVIDIA GeForce RTX 3060 Ti"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "AllowEmptyInitialConfiguration" "True"
    Option         "UseDisplayDevice" "DP-0"
    Option         "CustomEDID" "DP-0:/home/lucas/edid-2.bin"
    Option         "ConnectedMonitor" "DP-0"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

  1. 我通过运行以下命令检查了 Xorg 是否正在运行ps aux | grep xorg::
root        1241  0.1  0.1 25349916 53660 tty1   Sl+  15:48   0:00 /usr/lib/xorg/Xorg vt1 -displayfd 3 -auth /run/user/127/gdm/Xauthority -nolisten tcp -background none -noreset -keeptty -novtswitch -verbose 3
lucas       2392  0.0  0.0   9216  2432 pts/0    S+   15:50   0:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox xorg
  1. 我检查了/var/log/Xorg.0.log文件,没有发现任何错误。我还验证了屏幕连接正确。

但运行命令后,xrandr它返回Can't open display错误。我尝试显示 0 到 10 的数字,但只xrandr --display :0返回:Authorization required, but no authorization protocol specified. Can't open display :0

我也尝试.Xauthority通过运行以下命令来编辑文件:xauth add :0 . $(xxd -l 16 -p /dev/urandom)。但该xrandr命令返回Invalid MIT-MAGIC-COOKIE-1 key error

之后我删除了该/etc/X11/xorg.conf文件和.Xauthority file。然后再次连接显示器,使用显示器一切又恢复正常。而且我删除的那些文件也没有重新生成。没有这些文件怎么可能运行 Xorg?

那么,有人知道如何在没有连接显示器的情况下正确伪造这个 Xorg 屏幕,以便我可以启动 Sunshine 并通过 Moonlight 连接到我的电脑吗?如果您需要更多信息,请询问!

编辑: 我通过运行命令禁用了 gdm sudo systemctl stop gdm,并使用以下命令手动启动了 Xorg 进程Xorg :0 -config xorg.conf -noreset

所以我现在可以使用 xrandr 命令:

➜  ~ xrandr --display :0
Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 32767 x 32767
HDMI-0 disconnected primary (normal left inverted right x axis y axis)
DP-0 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 500mm x 281mm
   1920x1080     60.00*+
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
DP-3 disconnected (normal left inverted right x axis y axis)

我仍然无法正确配置 gdm,因此它将启动 Xorg 进程,使用正确的 Xorg 配置将屏幕显示为数字 0

答案1

好吧,我找到了一个解决方案。

  1. 禁用 GDM(GNOME 显示管理器)--> sudo systemctl disable gdm && sudo systemctl stop gdm。(请注意,如果您连接到物理显示器,则需要 GDM)
  2. 搬去/etc/X11/xorg.conf/etc/X11/sunshine/xorg.conf
  3. 创建systemd service--> /etc/systemd/system/xorg.service。文件内容xorg.service
[Unit]
Description=Xorg Server
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/Xorg :0 -config /etc/X11/sunshine/xorg.conf -nolisten tcp

[Install]
WantedBy=multi-user.target
  1. 启用xorg.service-->sudo systemctl enable xorg && sudo systemctl start xorg
  2. sudo reboot
  3. 重启电脑后,我可以成功使用该xrandr --display :0命令。通过设置环境变量 DISPLAY,您不再需要该--display标志

相关内容