在远程连接到没有接屏幕的Ubuntu系统时,出现无法显示的问题,通常是由于Ubuntu系统在没有检测到物理显示器时,无法正常启动图形用户界面(GUI)。这是因为在没有物理显示器的情况下,系统可能无法生成有效的显示输出。

三种解决方法:

1. 配置虚拟显示器(虚拟显示输出)

可以通过配置虚拟显示器(dummy display)来让系统生成一个虚拟的显示输出,即使没有物理显示器连接。

步骤:

  1. 安装虚拟显示驱动程序 xserver-xorg-video-dummy

    sudo apt-get install xserver-xorg-video-dummy
    
  2. 创建一个虚拟的 xorg.conf 文件,使得系统在没有显示器连接时仍然生成图形输出:

    sudo nano /etc/X11/xorg.conf
    
  3. 在编辑器中粘贴以下内容,创建虚拟显示配置:

# 版权声明和注释部分保持不变

Section "DRI"
    Mode 0666
EndSection

Section "Module"
    Disable     "dri"
    SubSection  "extmod"
        Option  "omit xfree86-dga"
    EndSubSection
EndSection

# 定义Monitor部分
Section "Monitor"
    Identifier  "Monitor0"
    VendorName  "Monitor Vendor"
    ModelName   "Monitor Model"
    Option      "DPMS"
EndSection

# 定义Device部分
Section "Device"
    Identifier  "Tegra0"
    Driver      "nvidia"
    # 允许在没有显示设备连接的情况下启动X服务器
    Option      "AllowEmptyInitialConfiguration" "true"
EndSection

# 定义Screen部分
Section "Screen"
    Identifier "Screen0"
    Device     "Tegra0"
    Monitor    "Monitor0"
    DefaultDepth 24
    SubSection "Display"
        Depth     24
        # 添加可用的分辨率模式
        Modes    "1920x1080" "1280x1024" "1024x768"
    EndSubSection
EndSection

# 定义ServerLayout部分
Section "ServerLayout"
    Identifier "Layout0"
    Screen     "Screen0"
EndSection

配置解释:

  • Section “Monitor”:定义了一个通用的监视器Monitor0,并启用了DPMS(Display Power Management Signaling),这有助于节能和监视器管理。

  • Section “Device”:保持了Option "AllowEmptyInitialConfiguration" "true",以便在没有物理显示器时,X服务器仍能启动。

  • Section “Screen”:关联了DeviceMonitor,并在SubSection "Display"中列出了多个分辨率模式。这样,系统会自动选择最佳的分辨率,或者在没有物理显示器时使用默认的虚拟屏幕。

  • Section “ServerLayout”:将所有部分连接在一起。

  • 自动模式选择:通过列出多个Modes,X服务器可以根据物理显示器的支持情况自动选择合适的分辨率。

  1. 保存并关闭文件后,重新启动图形界面:
    sudo systemctl restart lightdm   # 对于LightDM用户
    # 或者
    sudo systemctl restart gdm       # 对于GDM用户(例如Ubuntu GNOME)
    

2. 使用Xvfb(虚拟帧缓冲)

Xvfb 是一个虚拟的显示服务器,可以用来在没有物理显示器的情况下运行图形化程序。

步骤:

  1. 安装 Xvfb

    sudo apt-get install xvfb
    
  2. 启动 Xvfb,为其指定显示编号和分辨率:

    Xvfb :1 -screen 0 1920x1080x24 &
    
  3. 设置 DISPLAY 环境变量,告诉应用程序使用虚拟显示:

    export DISPLAY=:1
    

这样,就可以通过 NoMachine 连接到一个虚拟显示器上,即使物理显示器没有连接。

3. 使用HDMI虚拟插头

如果上述软件方案不奏效,硬件上也有一种简单的解决方法,就是使用一个 HDMI虚拟插头(HDMI dummy plug)。这是一种插入HDMI接口的小装置,能够欺骗系统认为有物理显示器连接,从而生成显示输出。这种虚拟插头可以在电商平台上找到,价格非常便宜。

方法总结

通过配置虚拟显示器(虚拟显示输出)或使用Xvfb,你可以解决NoMachine无法在没有物理显示器连接时显示的问题。如果你需要更简单的硬件方案,HDMI虚拟插头也是一种常用的解决方法。

系统性能的占用分析

在不需要连接屏幕,也不需要远程连接的情况下,上述三种方法对系统性能的占用可以从以下角度进行分析:

1. 配置虚拟显示器(Dummy Display)

  • 性能占用

    • GPU占用:非常低,因为虚拟显示器配置并不实际进行图形渲染。它仅仅是提供了一个虚拟的显示输出给系统用作图形界面的初始化。GPU的使用几乎为零。
    • CPU和内存占用:也非常低。它主要涉及的是图形界面初始化,并不会执行复杂的图形处理任务。
  • 性能影响总结:这是最轻量级的方法,性能开销可以忽略不计,非常适合不需要图形界面的服务器或设备。

2. 使用Xvfb(虚拟帧缓冲)

  • 性能占用

    • GPU占用:Xvfb不会直接使用物理GPU,它是软件渲染的虚拟显示器,所以GPU几乎没有占用。然而,Xvfb仍然会模拟图形渲染,尽管没有输出到物理显示器,这意味着一部分CPU和内存会用于渲染任务。
    • CPU和内存占用:由于Xvfb需要进行虚拟的图形处理操作,CPU和内存的开销会比虚拟显示器配置稍高,特别是在图形界面复杂或运行图形化程序时,消耗的资源会随之增加。
  • 性能影响总结:相较于虚拟显示器,Xvfb稍微占用更多资源,尤其是在运行图形密集的任务时。但在不需要渲染实际内容时,影响依然较小。

3. 使用HDMI虚拟插头

  • 性能占用

    • GPU占用:与连接实际显示器相同,系统会进行完整的图形渲染,GPU仍会执行图形任务。因此,GPU的占用量与是否连接物理显示器类似。
    • CPU和内存占用:因为系统在处理图形渲染任务时需要使用GPU资源,所以CPU和内存也会有一定的开销,特别是在处理高分辨率或者运行图形密集型任务时。
  • 性能影响总结:HDMI虚拟插头会让系统认为有一个实际显示器连接,因此它的性能开销与连接物理显示器基本一致,GPU和CPU都会被用于处理图形渲染任务。

总结性能占用对比

  • 虚拟显示器(Dummy Display):占用最少的系统资源,几乎不使用GPU,CPU和内存的开销也极小。如果不需要图形界面渲染的性能,这种方案是性能最优的。

  • Xvfb:占用比虚拟显示器配置略高一些,因为它依然会模拟图形渲染,但不使用物理GPU。适合需要虚拟显示但不实际输出图形的场景。

  • HDMI虚拟插头:占用与连接实际显示器几乎相同,系统会完整进行图形渲染,因此GPU、CPU和内存的开销相对较高。

如果不需要显示器和远程操作,且关心系统性能,虚拟显示器(Dummy Display) 是最好的选择,几乎不会带来任何可感知的性能开销。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐