Headless
“无头”计算机是指没有连接显示器的计算机。这在服务器或远程系统中很常见,您将通过网络访问系统。本文描述了如何设置无头服务器以通过网络提供 GUI 桌面的各种方法。
在本文中,“服务器”指您想要访问的远程计算机,“客户端”指您当前所在的计算机。
一些常用工具
以下是一些用于解决无头远程桌面问题的现有工具。其中一些工具将在后面的“解决方案”章节中使用。
VNC 远程桌面客户端 + 服务器
这是一个老旧但非常普遍的远程桌面技术。在 Linux 上很常见。它面向桌面,通常会显示服务器桌面的像素级完美复制。VNC 通常只在屏幕上发生变化时才会在网络上向客户端发送更新。
RDP 远程桌面客户端 + 服务器
与 VNC 类似,但在 Windows 上更常见。RDP 在用例和技术上与 VNC 非常相似,但功能更多。
Sunshine 服务器 + Moonlight 客户端
一种“游戏流式传输”导向的解决方案,也非常适合远程桌面。此解决方案将持续将视频流从服务器发送到客户端。由于视频压缩不直接适用于像素级完美复制,因此有时会显示带有轻微伪影的图像。Sunshine 是服务器软件,Moonlight 是客户端应用程序。由于此解决方案从服务器进行非常底层的流式传输,因此它兼容 X 和 Wayland,并且适用于大多数 GPU。此解决方案的一些缺点是 1) 它使用多个端口和协议,因此比 RDP 和 VNC 更难通过 Internet 隧道化,2) 使用比 RDP 和 VNC 更多的网络带宽。
Rustdesk, Anydesk
Rustdesk 和 Anydesk 拥有非标准协议,因此提供客户端和服务器软件。它们在 Wayland 上仍然有些不成熟。
网络 KVM
这是一个连接到服务器的硬件单元,同时连接到显示端口和 USB 端口。它将模拟一个显示器和键盘+鼠标,并通过(通常是网页)呈现给客户端。主要缺点是图像质量有时不太好,图像分辨率有限,当然取决于 KVM 解决方案。对于更企业级的服务器,网络 KVM 通常内置在服务器中(例如 HP ILO 或 Dell IDRAC)。
显示器模拟器插件
显示器模拟器插件是插入服务器显示端口或 HDMI 端口的插件。它充当 GPU 的显示器。唯一目的是欺骗 GPU 认为它连接到了显示器。这有时是在 GPU 允许显示桌面 GUI 等内容之前所必需的。好处是可以将屏幕通过某些远程桌面解决方案镜像,但缺点是您无法再看到显示器的输出,因此故障排除有时很棘手。如果您想在互联网上搜索购买插件,请搜索“hdmi 插件”或“display port 插件”,可能还会加上“虚拟显示适配器”。
其他工具
常见问题
在尝试设置远程桌面时,通常会遇到一些问题。在此我们提供信息。
需要连接并开启显示器
大多数远程桌面解决方案都会将物理显示器上的内容通过网络镜像到客户端。但这需要连接并开启显示器,否则 GPU 驱动程序通常会拒绝启动桌面。开启的显示器也会消耗不必要的电力。
调整桌面以适应客户端窗口不起作用
大多数远程桌面解决方案不支持将远程桌面调整为适合客户端窗口大小。作为一种替代方案,通常可以更改桌面分辨率。
按键显示不正确
在客户端键盘上按键会在屏幕上产生错误的字符。这是一个复杂的问题,涉及客户端和服务器桌面以及使用的远程桌面软件。可以解决,但可能需要一些试错才能找到正确的组合。
屏幕更新缓慢
一些解决方案比其他解决方案慢。有必要尝试多种解决方案来找到解决此问题的良好方法。
未启用 GPU 加速
某些解决方案将回退到 SW 驱动的 GUI 来显示桌面。这可能不是性能问题,但可能会导致运行某些需要 SW 图形管道中未模拟功能的 3D 软件时出现问题。
CPU 使用率高
需要注意 CPU 使用率过高的问题,包括使用中和空闲时,以及在服务器和客户端上。游戏流式传输解决方案似乎不太关注低功耗。
解决方案
本章包含如何使用以下要求为无头服务器构建远程桌面解决方案的解决方案
- 完全无头。无需显示器或显示器模拟器插件。
- 支持桌面调整大小。应调整为适应客户端窗口大小。
- 低 CPU 使用率。
- GPU 加速。
Labwc/sway/wayfire 配合 wayvnc
此解决方案不镜像物理显示器上显示的桌面。而是使用完全虚拟的显示器。上述要求均已满足。
- 在服务器上安装 labwc。这可能也适用于任何其他基于 wlroots 的桌面。已知可行的还有 sway 或 wayfire。
- 在服务器上安装 wayvnc-gitAUR。
- 使用以下示例脚本启动带有 labwc 的桌面
#!/bin/bash # Example script to start a headless desktop + VNC server export WLR_BACKENDS=headless export WLR_LIBINPUT_NO_DEVICES=1 #export WLR_RENDER_DRM_DEVICE=/dev/dri/renderD128 # Only needed for wayfire labwc >& labwc.log & sleep 5 export WAYLAND_DISPLAY=wayland-0 # change to wayland-1 for other than labwc wayvnc 0.0.0.0 >& wayvnc.log &
使用 TigerVNC 客户端访问远程桌面。此 VNC 客户端支持正确的窗口调整大小。
GNOME
根据 此链接,GNOME 可以在无头模式下启动。
KDE
对于 X11,这可以通过同时使用 TigerVNC 作为客户端和服务器来实现。对于 Wayland,尚未找到方法。