Linux远程桌面组件
远程桌面服务组件仅支持基于X Display Server的桌面系统, 对于Wayland, 目前尚不支持.
此外, 目前仅支持VNC远程桌面协议.
组件类别
一个完整的且带有远程桌面的Linux Desktop由如下几类组件构成.
| 类别 | 面向的目标 | 提供的功能 | 出现问题造成的影响 | 常见组件 |
|---|---|---|---|---|
| 远程桌面 | 终端用户 | 远程桌面交互及会话管理 | 用户无法通过远程桌面功能 | VNC Server, Xrdp |
| 终端应用 | 终端用户 | 通过界面交互完成应用的特定功能 | 用户无法使用终端应用 | Firefox, Chromium, Thunderbird |
| 桌面环境/窗口管理器 | 终端用户 | 管理终端图形应用 | 无法使用, Window Management(窗口管理): , 例如: 拖拽, 最小化, 最大化. Dock栏, App Indicator(应用程序角标), App Launcher(应用启动器) | 常见的Window Manager有 i3wm dwm, 常见的Desktop Environment有Xfce KDE Plasma GNOME Cinnamon |
| Display Backend | 上层图形应用程序 | 提供了一系列接口用于支撑上层图形应用程序完成图形的渲染以及输入设备(键盘, 鼠标)事件的接受及响应 | 此类组件的问题会导致上层图形应用程序无法正常工作 | Xorg Wayland XWayland |
| 硬件访问 | 上层Display Server | 提供了一组接口用于抽象和硬件之间的交互 | 物理设备无法按照预期工作 | Input Drivers framebuffer (fbdev) Direct Rendering Manager(DRM) |
VNC定制化
通过vncserver服务提供的vncserver命令, 启动一个远程桌面会话.
平台对于vncserver进行了一些定制化的扩展, 例如
- 会话隔离: 默认情况下,
VNC会话文件在用户的HOME目录下, 如果用户的HOME目录是在共享存储中, 这样会导致多个节点之间共享同一个VNC会话并导致会话冲突.
为了确保每个节点的vnc会话是隔离的, 平台对vncserver进行了定制化扩展 - 高分辨率支持: 默认情况下,
VNC会话分辨率较低, 为了能够支持更高的分辨率要求, 平台对vncserver进行了定制化扩展
VNC初始化流程
通过
vncserver完成远程桌面会话的初始化流程.
一个完整的远程桌面会话包含:
X ServerVNC ServerX Client
X server初始化
通过
Xtigervnc实现X server的初始化.
Xtigervnc是一个X server, 它虚拟出了物理屏幕, 这意味着在没有物理屏幕的情况下也能够输出. 图形应用作为其客户端其图形输出都将显示在这个虚拟屏幕上.
此外, 它也是一个VNC Server, 负责和VNC Client之间进行通信VNC Client来完成会话的访问以及图形界面的渲染.
X Client初始化
通过
xstartup脚本负责X Client的初始化.
内部会调用xinit来启动X Client.
这里的要启动的
X Client包括桌面管理组件, 因为它是面向最终用户的入口, 用户通过它启动终端应用组件.
xinit是一个脚本负责X Client的初始化.
不同的发行版启动的方式不同, 但入口是一致是/etc/X11/xinit/xinitrc
CentOS (6.9, 7.5)
对于CentOS, 其内部委托/etc/X11/xinit/Xclients进行初始化
其仅对
GNOMEKDE提供了支持.
这意味者在安装了这两个桌面后, 不需要修改配置文件即可使用VNC远程桌面.
如果需要使用其他桌面, 则需要手动配置此文件, 将PREFERRED变量修改为对应桌面的完整二进制文件的路径.
以i3wm为例, 参考以下命令修改配置文件
sudo sed -i 's/^PREFERRED=.*$/PREFERRED=$(type -p i3)/' /etc/X11/xinit/Xclients
Ubuntu (18.04, 20.04, 22.04)
对于Ubuntu, 其内部委托/etc/X11/Xsession进行初始化, 并通过/etc/X11/Xsession.d/目录下的脚本进行初始化.
最终启动/etc/alternatives/x-session-manager来启动桌面, 此文件是一个软链接, 可以通过以下命令检查此软链接的指向
readlink /etc/alternatives/x-session-manager
# 例如 /usr/bin/gnome-session
在安装完桌面后, 请确保/etc/alternatives/x-session-manager指向了正确的桌面启动脚本.
如果发现启动的桌面不是期望的, 则需要手动修改此软链接.
以xfce4为例, 参考以下命令修改配置文件
sudo rm /etc/alternatives/x-session-manager
sudo ln -s /usr/bin/startxfce4 /etc/alternatives/x-session-manager