11.4 远程桌面
远程桌面访问技术可通过网络从一台设备远程控制另一台设备的桌面环境。远程桌面协议主要分为两类:基于帧缓冲区的协议(如 VNC,定义于 RFC 6143)和基于指令流的协议(如 RDP,基于 ITU-T T.120 协议族(含 T.128,即 T.share)扩展而来)。本节涵盖两种协议在 FreeBSD 下的配置。
目录结构
/
├── home
│ └── ykla
│ └── .vnc
│ ├── passwd # VNC 密码文件
│ ├── xstartup # VNC 启动脚本
│ └── config # VNC 配置文件
│ └── .Xauthority # X 授权文件
├── usr
│ └── local
│ └── etc
│ └── xrdp
│ ├── xrdp.ini # XRDP 主配置文件
│ ├── sesman.ini # XRDP 会话管理器配置
│ └── startwm.sh # XRDP 启动桌面环境脚本
└── var
├── run
│ ├── sddm # SDDM 授权文件目录
│ ├── lightdm # LightDM 授权文件目录
│ └── user
│ └── 120
│ └── gdm # GDM 授权文件目录
└── lib
└── gdm # GDM 旧版授权文件目录x11vnc(FreeBSD 作为被控端,镜像屏幕)
x11vnc 提供屏幕镜像功能,用户操作会同步显示在物理显示器上,物理显示器上的操作在 VNC 客户端中同样可见。建议配合 SSH 隧道或 SSL 加密使用,防止 VNC 流量被嗅探。
若无物理显示器则无法使用 x11vnc,但可使用 HDMI 显卡欺骗器代替物理显示器。
安装 x11vnc
使用 pkg 安装:
或使用 Ports 安装:
创建密码
设置 x11vnc 的访问密码:
启动服务器(KDE 6 SDDM)
使用指定的密码文件和 SDDM 授权文件启动 x11vnc:
警告
由于 x11vnc 尚不支持 Wayland,如果在 SDDM 左下角选择
Wayland,将无法进入桌面。
使用指定密码文件和 LightDM 授权文件启动 x11vnc:
使用指定密码文件和 GDM 授权文件启动 x11vnc:

参考文献
Arch Linux Wiki. X11vnc[EB/OL]. [2026-03-25]. https://wiki.archlinux.org/title/X11vnc. Arch Linux 官方维基提供的 X11vnc 配置与使用详细指南。
TigerVNC(FreeBSD 作为被控端)
启用 VNC 服务端(Ports 中仅剩 TigerVNC)。
安装 TigerVNC Server
使用 pkg 安装:
或使用 Ports 安装:
设置
创建 ~/.vnc/ 路径:
编辑 ~/.vnc/xstartup 文件,新增以下行:
删除拟启用桌面会话对应行首的 # 注释。
警告
注意保留
&字符。
设置 xstartup 脚本为可执行权限:
在终端执行命令启动 VNC 服务器:
在显示器 :1 上启动 VNC 服务器:
其中 :1 表示 DISPLAY=:1,即指定桌面显示编号为 1,对应 VNC 服务端口 5901。桌面显示编号从 0 开始,但编号 0 对应的端口已由当前桌面占用(除非是镜像 VNC),实际执行时 VNC 服务从 5901 开始。连接时必须指定端口 5901。
测试:
如果启动服务时未指定通信端口,系统将自动分配。
显示当前用户的进程列表:
关闭服务请使用命令 vncserver -kill :1,必须指定端口号。
如果启用了防火墙,以 IPFW 为例,在终端输入命令:
上述命令表示开放端口 5900-5910,即 DISPLAY 0-10。执行 ipfw list 可查看当前所有防火墙规则以确认已生效。
参考文献
FreeBSD Forums. Xfce4 is not displayed correctly when I connect vncviewer (in Linux) to tightvnc-server (on FreeBSD)[EB/OL]. [2026-03-25]. https://forums.freebsd.org/threads/xfce4-is-not-displayed-correctly-when-i-connect-vncviewer-in-linux-to-tightvnc-server-on-freebsd.85709/. FreeBSD 官方论坛讨论,解决了 VNC 远程连接中 Xfce4 显示异常的问题。
XRDP(以 FreeBSD 为被控端)
安装 XRDP(基于 KDE6)
使用 pkg 安装:
或使用 Ports 安装:
查看配置文件:
配置 XRDP
配置守护进程:
编辑 /usr/local/etc/xrdp/startwm.sh 文件,找到 #### start desktop environment,修改如下:
重启系统后生效。
配置中文环境(用户使用默认的 sh)
编辑 /usr/local/etc/xrdp/startwm.sh 文件,添加或修改以下内容以设置环境变量:
设置系统语言为中文。
故障排除与未竟事宜
XRDP 下没有声音
此问题可通过 Firefox 浏览器缓解。
通过 Windows 使用 TigerVNC 远程访问 FreeBSD
下载 TigerVNC 查看器:
下载地址:https://sourceforge.net/projects/tigervnc/files/stable/
查看 FreeBSD 的 VNC 端口:
故障排除与未竟事宜
由于目标服务器积极拒绝,无法连接
非镜像 VNC 连接时必须指定端口,否则默认使用 5900 端口。由于非镜像 VNC 的服务端口并非 5900,连接被拒绝。

示例:

通过 VNC 远程访问 FreeBSD 时无声音输出
该问题在本节中尚未解决。
通过 Windows 自带的远程桌面连接(RDP)远程访问 FreeBSD

首次登录设备会有安全提示,输入 yes,回车后弹出远程桌面窗口。




故障排除与未竟事宜
如果 Windows 的远程桌面窗口既不在左上角也未全屏显示,则显示会模糊
应取消勾选“智能调整大小”。

使用 Android 通过 XRDP 远程访问 FreeBSD
下载所需软件:
由微软官方开发的手机 RDP 软件:Remote Desktop
Microsoft Corporation. Remote Desktop[EB/OL]. [2026-03-25]. https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx&hl=zh_CN. 微软官方开发的 Android 远程桌面客户端,支持 RDP 协议连接。
该软件支持 Android 平台 RDP 连接。
将左上鼠标操作改为触摸操作。默认的鼠标操作不够便捷,也可选择通过 OTG 连接鼠标和键盘操控。

连接示意图(后台正在编译 Chromium,因此占用会很高):

通过 FreeBSD 使用 XRDP 远程访问 Windows
freerdp3
使用 pkg 安装:
或使用 Ports:
使用 FreeBSD 通过 freerdp3 远程连接到 Windows 11 24H2:
警告
通过
/p参数在命令行中直接传递密码,密码会出现在进程列表中(可通过ps等命令查看),存在安全隐患。上述示例中的 192.168.31.213、
ykla为占位符,须替换为实际的值。示例中省略/p参数后,执行后程序会交互式提示输入密码,这比在命令行中明文写出密码更安全。
xfreerdp3 /u:ykla /p:z /v:192.168.31.213 参数说明:
xfreerdp3
命令
注意其前缀为 x
/u:ykla
Username 用户名
ykla 是 Windows 的登录名
/p:z
Password 密码
z 是 Windows 用户 ykla 的登录密码
/v:192.168.31.213
Server 服务器
替换为实际的 Windows 主机地址

参考文献
Awakecoding. FreeRDP User Manual[EB/OL]. [2026-03-25]. https://github.com/awakecoding/FreeRDP-Manuals/blob/master/User/FreeRDP-User-Manual.markdown. GitHub 提供的 FreeRDP 用户手册,包含完整命令说明与实用示例。
故障排除与未竟事宜
测试过程中发现未输入用户名即成功连接,这可能与 FreeBSD 用户名和 Windows 用户名相同有关。
rdesktop(不支持 NLA)
net/xrdesktop2 是 rdesktop 的图形化前端,测试中在打开键盘设置时出现无响应。
使用 pkg 安装 rdesktop:
或用 Ports 安装:
rdesktop 无前端 GUI,需在终端输入命令:
如果未手动更改 Windows 配置,无须加 :端口号。
在测试的 Windows 11 24H2 上会报错:
根据 rdesktop team. CredSSP does not work[EB/OL]. [2026-04-04]. https://github.com/rdesktop/rdesktop/issues/71. 此问题由来已久。
危险
禁用网络级身份验证(NLA)会使 RDP 服务暴露于严重安全威胁之下,包括但不限于:
凭据转发攻击:禁用 NLA 后,用户凭据将被发送至远程主机并存储于其内存中,攻击者可利用 pass-the-hash 等技术窃取凭据并在会话断开后继续冒充用户。
暴力破解攻击:缺少会话前身份验证,攻击者可无限制地尝试登录。
拒绝服务攻击:服务器在未验证身份的情况下即为每个连接分配会话资源。
强烈建议优先使用支持 NLA/CredSSP 的 freerdp3(见上文),而非禁用 NLA。 若确需禁用,请在操作完成后立即重新启用,并确保 RDP 端口不直接暴露于公网。
禁用 NLA 的操作步骤如下,在需要远程连接的 Windows 上执行:
再测试连接:


故障排除与未竟事宜
视频播放无声音
尚未解决。
参考文献
Microsoft Corporation. 使用 RDP 连接到 Azure VM 时排查身份验证错误[EB/OL]. (2024-07-30)[2026-03-25]. https://learn.microsoft.com/zh-cn/troubleshoot/azure/virtual-machines/windows/cannot-connect-rdp-azure-vm. Microsoft 官方文档提供的 RDP 网络级身份验证(NLA)配置方法与故障排除指南。
AnyDesk
使用 AnyDesk 可远程访问,FreeBSD 上支持 amd64 和 i386 架构:
由于版权原因(专有软件未经许可禁止分发),必须由用户使用 Ports 自行构建安装:
由于需要接受许可协议才能使用,不可使用 BATCH=yes 参数:

查看 AnyDesk 安装后的说明:
提示需要挂载 proc 文件系统,经测试未挂载该文件系统时程序无法正常启动。
root 用户无法运行 AnyDesk,必须以普通用户身份运行:
执行命令后弹出的 AnyDesk 主界面:

被连接方必须“接受”(Accept)才能继续连接。
Windows 通过 AnyDesk 远程访问 FreeBSD

FreeBSD 通过 AnyDesk 远程访问 Windows

故障排除与未竟事宜
通过 AnyDesk 从 FreeBSD 远程连接 Windows 时,无法在 Windows 中移动鼠标
待解决。
RustDesk 中继服务器
注意
这是中继 ID 服务器,本身无法被远程控制。
无法使用 RustDesk 控制 FreeBSD。
使用 pkg 安装:
或使用 Ports 安装:
配置 RustDesk 中继服务器:
创建专用用户运行 RustDesk 中继服务,避免以 root 身份运行:
启动 hbbs:
再启动 hbbr:
在其他设备上打开 RustDesk 客户端,双方都需填写相同的“ID 服务器(FreeBSD 的 IP 地址或域名)”和“Key”,其余项留空,在控制端输入被控端显示的 ID 即可连接。
参考文献
FreshPorts. rustdesk-server Self hosted RustDesk server[EB/OL]. [2026-03-25]. https://www.freshports.org/net/rustdesk-server/. FreshPorts 提供的 RustDesk 中继服务器 Port 详情与安装指南。
Safe Rabbit. 远程控制软件 RustDesk 自建服务器全平台部署及使用教程[EB/OL]. (2024-02-20)[2026-03-25]. https://www.cnblogs.com/safe-rabbit/p/18020812. 博客园提供的 RustDesk 自建中继服务器全平台部署与使用详细教程。
课后习题
适配更多 VNC Server 到 Ports。
适配 Wayland。
远程桌面协议的多样性(RDP、VNC、SPICE、X11 Forwarding)反映了图形栈的不同抽象层次。比较各协议在带宽效率、安全性与会话持久性上的设计取舍,并分析 FreeBSD 作为远程桌面服务端时在协议选择上的技术制约。
最后更新于