同一局域网下用 Windows 远程控制 Ubuntu 22.04,听起来无非是“查个 IP、装个软件、连一下”的活儿,但真上手之后你会发现,坑全藏在桌面环境、会话类型和防火墙这些不起眼的细节里。这篇东西不是从零讲网络基础,而是把我自己在 Ubuntu 22.04 上折腾过的 VNC、xrdp、SSH 三条远程控制路线完整记录下来。适合手里正好有一台 Ubuntu 22.04,想用 Windows 在局域网里远程操控它的人,不管你是想偶尔打开图形界面点两下,还是打算长期当服务器管理,都可以从里面挑出适合自己的一种方案。
1. 需求拆解与方案选型分析
1.1 先搞清楚:你要的是“共享屏幕”还是“独立会话”
很多人在开始之前容易忽略一个本质问题:远程控制到底要控制哪种“桌面”?你把需求说清楚之后,选型会快很多。
第一种是“屏幕上现在是什么,我远程就要看到什么”。比如你在 Ubuntu 机器面前已经登录了桌面,想回到 Windows 这边隔着网线操作同一个界面,这属于屏幕共享。系统自带的“远程桌面共享”功能干的就是这件事。第二种是“不管 Ubuntu 那边有没有人在用、有没有登录,我远程过去之后是一个全新的图形桌面”。这属于独立会话,xrdp 和 VNC Server 默认走的都是这个路线。
独立会话有个容易被踩的认知误区:你以为远程连进去看到的就是物理显示器上的画面,实际上 Ubuntu 本地屏幕可能停在登录界面,也可能是一块黑屏,而你在 Windows 这边看到的其实是一个新开的虚拟 Xorg 会话。很多人第一次用 xrdp 连 Ubuntu 22.04,看到“另一个桌面”里的文件、壁纸和自己刚配置的不一样,第一反应是配置错了,其实没有,这就是独立会话的正常表现。
明确这一点之后,再往下选方案就不会纠结了。
1.2 局域网远程控制的几条技术路线
局域网里远程控制 Ubuntu 22.04,常见的就三条路,各有各的适用场景。
第一条是 SSH,纯命令行。对于改配置、查日志、跑脚本这类运维操作,SSH 是最省资源也最稳定的方案,一条ssh 用户名@IP就能从 Windows 命令行进到 Ubuntu。但如果你要的是图形界面,SSH 帮不上忙,顶多通过 X11 转发跑单个 GUI 程序,效果还很不稳定。
第二条是 VNC。它结构简单,一台 Ubuntu 装一个 VNC Server,Windows 这边随便装一个 VNC Viewer 就能连。VNC 的好处是跨平台兼容非常好,不管 GNOME、XFCE 还是其他桌面环境都可以通过 VNC 暴露出来。坏处是画质和流畅度不如 RDP,操作响应会有肉眼可见的延迟,尤其是局域网稍微有点拥塞的时候,拖拽窗口能明显感觉到卡顿。
第三条是 xrdp。它让 Ubuntu 变成一台 RDP 服务器,Windows 这边不需要装任何额外客户端,直接打开自带的“远程桌面连接”工具输入 IP 就能连。RDP 协议本身是微软实践多年的产物,传输效率高,画面流畅,还能自动适配窗口大小。xrdp 实际上是 Ubuntu 里把 RDP 协议翻译给 Xorg 的一个服务,装起来并不复杂,真正的难点是得处理 22.04 自带的 GNOME 桌面跟它打架的问题。
1.3 为什么我最终把 xrdp 作为主力方案
我自己的使用习惯是:以 xrdp 为主,SSH 为辅,VNC 备用。原因很现实,Windows 10/11 系统里“远程桌面连接”是自带的,鼠标点两下就能连,不用在每台 Windows 电脑上都额外装 VNC 客户端。
xrdp 的传输效率也明显优于 VNC。同一局域网里,xrdp 调整窗口大小、滚动页面时基本能做到流畅,VNC 则经常出现画面撕裂和刷新不完整的现象。尤其是 Ubuntu 22.04 这种默认启用 GNOME 桌面的系统,本来桌面动画就比较重,VNC 在这种环境下的表现会更吃力。
不过,这不意味着 VNC 没有存在意义。xrdp 一次只能维持一个会话,如果需要同时开多个独立桌面,VNC 配合虚拟显示器会更灵活。而且有些场景下 xrdp 的 GNOME 黑屏问题排查起来费时间,VNC 接 XFCE 反而是最快能跑通的一条路。我的建议是:先看需求再选方案,不要带着“谁更高级”的心态来选工具。
2. 环境准备:先给 Ubuntu 固定 IP 并开放远程端口
2.1 修改 Netplan 配置,避免每次开机 IP 都变
不管最终用哪种远程方案,第一步永远是给 Ubuntu 一个固定的局域网 IP。如果靠 DHCP 自动分配,今天可能是 192.168.1.100,明天重启变成 192.168.1.105,Windows 这边就抓瞎了。
Ubuntu 22.04 使用的是 Netplan 管理网络配置,配置文件放在/etc/netplan/目录下。新装完系统一般会有一个.yaml文件,用ip a查一下网卡名称,比如enp3s0。然后编辑配置文件,把 DHCP 改成静态 IP:
network: version: 2 ethernets: enp3s0: dhcp4: no addresses: - 192.168.1.100/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: - 192.168.1.1 - 223.5.5.5这段配置的意思是给enp3s0设置一个静态地址192.168.1.100,网关指向路由器的192.168.1.1,DNS 先写网关,再写一个公共 DNS 作为备用。改完后执行sudo netplan apply让配置生效。这里有个细节:如果这台 Ubuntu 是某个云服务商的镜像或某个虚拟机模板装出来的,Netplan 文件里可能有很多额外配置,改的时候不要随手删掉不认识的字段,只需要把dhcp4改成no并加上静态地址即可。
为什么推荐先固定 IP?因为后面防火墙规则要以 IP 段为单位放行,Windows 的快捷方式也要保存这个地址,如果地址天天变,所有配置都得重来。固定 IP 之后,我会在 Windows 的 hosts 文件里加一条记录,给 Ubuntu 一个主机名,以后直接输名字就行。
2.2 用 UFW 精确放行 SSH、VNC 和 RDP 端口
Ubuntu 22.04 默认可能没有开启防火墙,但只要你手动启用 UFW,就会发现一个尴尬问题:忘了放行远程端口,结果把 SSH 自己也挡在外面。
我习惯在开启 UFW 之前先把规则写好。以下是我在局域网环境里常用的三条规则,按实际使用的协议放开对应端口:
sudo ufw allow from 192.168.1.0/24 to any port 22 proto tcp sudo ufw allow from 192.168.1.0/24 to any port 3389 proto tcp sudo ufw allow from 192.168.1.0/24 to any port 5900:5905 proto tcp sudo ufw enable第一条放行 SSH 的 22 端口,第二条放行 xrdp 的 3389 端口,第三条放行 VNC 的端口段。VNC 默认从 5900 开始,每开一个虚拟屏幕端口号加一,显示器编号 1 对应 5901,5900 到 5905 覆盖了前 6 个会话,局域网点对点够用。
这里最值得说的是“from 192.168.1.0/24”这个写法。我见过不少教程直接写sudo ufw allow 3389,这意味着任何来源的 IP 都能访问 3389 端口。如果这台机器只待在可信的家庭或办公室局域网里,危险性其实不大,但既然是远程控制,安全习惯还是该早点养成。限定了来源网段之后,即使这台 Ubuntu 某天被人扫描到,也不至于直接暴露 RDP 端口。
改完 UFW 规则后记得查看状态:sudo ufw status verbose。如果输出里显示规则是ALLOW状态,并且 22、3389、5901 这些端口都有记录,防火墙这关就算过了。
2.3 SSH 连通性测试:远程控制的“最低配”
图形远程方案还没配好之前,SSH 是最好的验证手段。只要 SSH 能通,说明网络链路、IP、防火墙都没问题,后面折腾 VNC 或 xrdp 的时候起码不用再怀疑基础环境。
Ubuntu 22.04 不一定默认装 SSH 服务端,先执行:
sudo apt update sudo apt install openssh-server sudo systemctl enable --now ssh然后到 Windows 上打开 PowerShell,执行:
ssh 用户名@192.168.1.100如果你之前从没连过,会看到一条指纹确认提示,输入yes回车再输入密码就能进入 Ubuntu 的命令行。这个地方有个很实用的小技巧:Windows 上如果提示ssh命令不存在,去系统设置里打开“可选功能”,找到“OpenSSH 客户端”装上就行,用不着装第三方终端。
我一般会再顺手测试一下远程桌面端口通不通,PowerShell 里执行:
Test-NetConnection 192.168.1.100 -Port 3389输出结果里如果TcpTestSucceeded是True,说明 3389 端口从 Windows 到 Ubuntu 已经畅通。这一步做完,网络基础就完全没有问题了,接下来无论是跑 VNC 还是 xrdp,都能把重心放在“桌面环境适配”而不是“网络不通”上。
3. VNC 方案:TigerVNC 加 XFCE,适合不想装额外依赖的场景
3.1 为什么选用 XFCE 而不是直接共享 GNOME 桌面
远程桌面最让人头疼的问题不是连不上,而是连上之后黑屏或者满屏报错。这个坑在 VNC 方案里特别典型,因为 Ubuntu 22.04 默认的 GNOME 桌面是基于 Wayland 会话的,而很多 VNC 服务端还是围绕 Xorg 设计的。如果你直接在一个 Wayland 会话里强行启动 VNC Server,通常会遇到无法捕获桌面、画面迟迟不刷新、鼠标键盘没反应等问题。
所以我的处理方式是在 VNC 的虚拟会话里跑 XFCE 桌面。XFCE 本身就是轻量级桌面环境,对远程会话的适配比 GNOME 友善得多。它不需要 systemd 用户会话支持,不会因为缺少某个总线服务就崩溃,而且启动速度快、占内存少。对于远程控制这个场景,目的是“能用、流畅、稳定”,而不是在远程画面上看毛玻璃特效,XFCE 就是最稳妥的选择。
这个思路也可以理解成:远程桌面协议和桌面环境之间是有兼容性配对的。xrdp 配 GNOME 需要多层修复,VNC 配 XFCE 却能开箱即用。既然我们要的是结果稳定,没必要在一个不合适的组合上死磕到底。
3.2 安装 TigerVNC 并设置 VNC 密码
Ubuntu 22.04 的软件源里自带 TigerVNC,不需要额外添加仓库。安装命令如下:
sudo apt install tigervnc-standalone-server tigervnc-xorg-extension sudo apt install xfce4 xfce4-goodies安装过程中如果提示选择显示管理器,我建议还是选gdm3,这样不会把 Ubuntu 原本的登录界面替换掉。虽然 XFCE 自带轻量级的 LightDM,但既然这台机器平时用的还是 GNOME,gdm3 更合适。
装完之后在自己的用户目录下创建 VNC 密码。注意这个密码不是系统登录密码,而是专门的 VNC 访问密码:
vncpasswd运行后会提示输入两次密码。这里要先想好密码,因为之后每次从 Windows 连 VNC 都要用。我踩过一次坑是密码设得太短,TigerVNC 不接受少于 6 位还是 8 位的密码,如果报错再设一遍就行。这个密码存放位置在~/.vnc/passwd,权限默认只有当前用户能读写,不需要额外处理。
3.3 创建 xstartup 启动脚本并注册为系统服务
TigerVNC 启动的时候会去读取用户目录下的启动脚本~/.vnc/xstartup,告诉它虚拟屏幕里该启动什么桌面环境。不写这个文件,VNC 启动后大概率只能看到一个灰屏或者空白窗口。
我的~/.vnc/xstartup内容如下:
#!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS exec startxfce4创建后要给它执行权限:
chmod +x ~/.vnc/xstartup这两行unset是关键的,目的是让远程会话里不要继承本地 GNOME 会话复用的一些进程管理变量,避免 DBus 或者 Session Manager 干扰虚拟会话的启动。很多 VNC 黑屏问题就出在没清掉这些环境变量上。
在把 VNC 做成开机服务之前,先在终端手动试一次:
vncserver :1 -geometry 1920x1080 -depth 24正常运行之后,可以在 Linux 上用ss -tlnp | grep 5901看到监听端口。这时候 Windows 端如果已经装好 VNC 客户端,应该就能连上了。但手动启动的方式有两个问题:一是重启后不会自动启动,二是默认可能只绑定本机回环地址,局域网里的其他机器连不上,所以还需要配置 systemd 服务。
我用的服务配置文件放在/etc/systemd/system/vncserver@.service:
[Unit] Description=TigerVNC Server for :1 After=syslog.target network.target [Service] Type=forking User=你的用户名 ExecStart=/usr/bin/vncserver :1 -geometry 1920x1080 -depth 24 -localhost no ExecStop=/usr/bin/vncserver -kill :1 [Install] WantedBy=multi-user.target这里最重要的参数是-localhost no,意思是不只监听本机,允许局域网内的其他机器通过 VNC 客户端访问。如果你的 VNC 服务端版本不同,ExecStart 里的路径可能略有区别,用which vncserver查一下实际路径更稳妥。
配置完成后执行:
sudo systemctl daemon-reload sudo systemctl enable --now vncserver@1.service如果之前已经手动启动了 VNC,先执行vncserver -kill :1把进程清掉,再让 systemd 接管,否则端口冲突会报错。
3.4 Windows 端连接 VNC 和参数调整
Windows 这边我习惯用 TigerVNC 自带的 Viewer,因为它和服务器端同出一系,兼容性问题最少。打开 Viewer,在地址栏输入192.168.1.100:5901,回车后输入 VNC 密码就能看到 XFCE 桌面。
连接成功后最先要调整的是分辨率。如果你在 Windows 上用高清屏远程进去,Ubuntu 那边如果锁定在 1920x1080,显示会小很多。TigerVNC 服务器端的-geometry参数决定虚拟屏幕分辨率,我建议选成 Windows 屏幕的物理分辨率,比如你的 Windows 笔记本是 2560x1600,那启动参数就改成-geometry 2560x1600。不过分辨率太高会影响刷新速度,具体值需要自己平衡。
VNC 的某些客户端默认会用压缩算法,如果局域网延迟稍高,画面会出现模糊、文字边缘发虚的情况。TigerVNC Viewer 里可以把画质模式从“自动”改成“高”,或者手动调高 JPEG 编码质量。要是局域网速度本身很快但画面还是很卡,多半是服务器端在软件编码环节拖了后腿,把桌面动画效果关掉、用轻量主题,都能有效提升流畅度。
3.5 TigerVNC 的体验瓶颈与适用场景
如果问我 VNC 方案最大的问题是什么,我会说是“刷新效率”。同样的网段里,xrdp 拖动窗口几乎是实时反馈的,VNC 则经常出现一小块一小块区域拖着重影慢慢刷新,尤其在 GNOME 这种动画比较重的桌面上更明显。
所以 TigerVNC 加 XFCE 这个组合,更适合下面几类场景:第一,你只需要一个轻量图形界面跑配置工具,不需要多余的桌面特效;第二,Ubuntu 那边没有接显示器,系统本身是 headless 模式,想要远程开个图形环境;第三,你想同时开多个独立图形会话,VNC 多显示器编号的机制比 xrdp 灵活。反过来说,如果你追求的是“像本地操作一样丝滑”,那 VNC 很可能满足不了你,直接看下一章的 xrdp 吧。
4. xrdp 方案:用 Windows 自带客户端连接 Ubuntu
4.1 安装 xrdp 并确认服务状态
xrdp 的原理是让 Ubuntu 监听 RDP 协议的 3389 端口,Windows 用自带“远程桌面连接”连过来时,xrdp 再把这个请求转交给 Xorg,拉起一个图形会话。整个过程对 Windows 用户几乎透明,看起来就像连了一台 Windows 远程电脑。
安装很简单:
sudo apt install xrdp这个包会自动把 xorgxrdp 等必需的依赖一起带上,不用手动一个个装。安装完成后检查服务状态:
sudo systemctl status xrdp --no-pager sudo systemctl enable xrdpenable这一步不能省,否则 Ubuntu 重启后 xrdp 不会自动启动,到时候又得跑回机器面前手动开服务。这里有一个容易遇到的问题:如果你重启后从 Windows 连接时提示“连接被拒绝”,先去 Linux 本机看systemctl status xrdp,如果服务是 active 状态,那大概率是防火墙没放行 3389 端口,回到前一章把 UFW 规则补上即可。
还有一个我很早踩过的坑:xrdp 服务虽然能启动,但日志里反复出现权限方面的报错。这是因为 xrdp 的会话进程需要通过ssl-cert组完成某些证书文件的读取,当前用户如果不在这组里就会出问题。保险起见手动加一次:
sudo adduser 你的用户名 ssl-cert加完之后需要重新登录一次用户,或者直接sudo reboot,组权限才会生效。
4.2 解决 GNOME 黑屏:.xsessionrc 与 polkit 配置
xrdp 装好后,用 Windows 远程桌面连接输入 Ubuntu 的 IP,理论上能看到 xrdp 的登录窗口,输入用户名密码后会进入一个图形桌面。但在 Ubuntu 22.04 上,这一步常常变成“登录后黑屏,只有壁纸和鼠标指针”。原因也很明确:xrdp 启动 Xorg 会话后,默认桌面环境选择和 GNOME 桌面必需的若干环境变量没有正确传递,导致 GNOME Shell 启动失败。
最简单的解决办法是给远程会话准备一个独立的启动环境文件。我在用户主目录下创建~/.xsessionrc,内容如下:
export GNOME_SHELL_SESSION_MODE=ubuntu export XDG_CURRENT_DESKTOP=ubuntu:GNOME export XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg然后再创建~/.xsession,内容只有一行:
exec gnome-session这两个文件的区别一个补充需要理解。.xsessionrc会被启动脚本在任何图形程序运行之前读取,相当于设置全局环境变量;.xsession则是指定最终启动哪个桌面会话。很多教程只让你建一个文件,结果配置不完整,黑屏照样出现。
除此之外,还有一个非常隐蔽的 colord 权限问题。如果不配置,xrdp 会话在启动 color 管理服务时会被 polkit 拦截,虽然不至于导致整个系统崩溃,但很多人的远程会话会在启动过程中卡死,表现就是从登录到黑屏之间的过渡特别长,甚至永远停住。我通过创建一个本地 polkit 规则解决,文件路径是/etc/polkit-1/localauthority/50-local.d/46-allow-xrdp-colorfix.pkla:
[Allow colord for all users] Identity=unix-user:* Action=org.freedesktop.color-manager.create-device;org.freedesktop.color-manager.create-profile;org.freedesktop.color-manager.delete-device;org.freedesktop.color-manager.delete-profile;org.freedesktop.color-manager.modify-profile;org.freedesktop.color-manager.modify-device ResultAny=yes ResultInactive=yes ResultActive=yes创建完记得sudo systemctl restart xrdp,让配置生效。如果你不想折腾 GNOME,也可以安装 XFCE,然后在~/.xsession里写一行exec startxfce4,xrdp 登录后就直接进 XFCE 桌面,这样可以彻底绕开 GNOME 黑屏问题。
4.3 用 mstsc 连接:操作流程和关键选项
Windows 远程桌面客户端在系统里叫 mstsc,不用额外安装。按Win+R输入mstsc回车就能打开窗口。
计算机地址栏输入192.168.1.100,注意 xrdp 默认监听 3389 端口,如果改过端口就需要输192.168.1.100:自定义端口。点“连接”后会弹出一个证书警告,这是正常的,因为 Ubuntu 端的 xrdp 证书是自签名的,不是 Windows 信任的证书颁发机构签发,选择“是”继续即可。
第一次连接会看到 xrdp 自己的登录界面,不是 Ubuntu 登录界面。这个界面上通常有会话类型选择,我通常选择Xorg,然后输入 Ubuntu 的用户名和密码。如果登录成功后桌面一闪而过又退回登录框,最常见的原因是密码输错,或者当前用户密码有特殊字符导致传递失败,改用 XFCE 会话配.xsession一般也能缓解。
连接成功后,Windows 远程桌面窗口默认会按本地屏幕大小自动适配 Ubuntu 桌面分辨率。你可以试试最大化窗口和全屏模式,xrdp 会动态调整 Xorg 的分辨率。这个体验比 VNC 手动指定-geometry要好得多。
4.4 剪贴板、分辨率和双会话问题
xrdp 默认支持文本剪贴板的双向同步。你在 Windows 上复制一段文本,切到 Ubuntu 远程窗口里按Ctrl+V就能粘贴进去,反过来也一样。这个功能由 xrdp 的剪贴板模块实现,不需要额外配置。但要注意图片和文件碎片这种大对象经常失效,如果需要频繁在 Windows 和 Ubuntu 之间传文件,不如直接用共享文件夹或局域网文件服务,别指望剪贴板。
分辨率方面,虽然远程桌面客户端会在窗口大小变化时触发 Xorg 分辨率切换,但如果你把 Ubuntu 设置改成了固定分辨率,比如在系统设置里选了 1920x1080,之后再最大化窗口,桌面可能不会自动拉伸到全屏。遇到这种情况要么在 Ubuntu 设置里重新选择分辨率,要么手动运行xrandr命令强制修改。
xrdp 还有一个容易忽略的坑:它默认同时只允许一个图形会话。如果之前连过的会话没有正常注销,下次再连可能看到“会话已存在”或者进入一个残留的旧桌面。我自己的习惯是远程操作完一定在 Ubuntu 里点“注销”,别直接点断开。如果出现残留会话,在 Ubuntu 本机执行systemctl restart xrdp可以清掉所有旧连接,但这会同时把正在连的会话也踢掉。
5. 实际操作中遇到的问题速查
5.1 连接被拒绝,首先查这三件事
Windows 端提示“连接被拒绝”或“远程桌面无法连接”时,不要急着重装软件,按下面顺序排查基本能定位问题。
先看服务是否在跑。Ubuntu 终端里执行systemctl status xrdp或systemctl status vncserver@1.service,如果显示 active,说明服务本身没问题。如果服务没起来,先sudo systemctl start xrdp再查看日志找原因。
再看端口是否监听。执行ss -tlnp | grep 3389,有输出才说明 3389 端口正在监听。如果什么输出都没有,说明 xrdp 启动失败,看/var/log/xrdp.log里的错误信息。VNC 就查对应端口,比如 5901。
最后看防火墙。这是最容易忽略的一步,sudo ufw status确认规则里有没有放行对应端口。我特别想提醒一点:Ufw 规则如果只写了allow 3389而没有限制来源网段,规则是有效的,但如果之前执行过ufw deny 3389,后面再allow也不会自动覆盖,得先ufw delete deny 3389再重新放行。
5.2 登录后黑屏或者只有壁纸
黑屏问题在 Ubuntu 22.04 远程控制里太常见了。VNC 和 xrdp 都可能遇到,但从我接触的情况看,xrdp 概率更高。
xrdp 登录后黑屏,优先检查~/.xsessionrc和~/.xsession是否存在,内容是否完整。如果这两个文件没问题,再检查 polkit 的 colord 规则是否创建。我见过一种情况是文件创建了但文件名后缀不是.pkla,polkit 会直接忽略,系统好像什么都没发生一样继续黑屏。所以创建后最好再执行一次systemctl restart xrdp,同时确认文件名和路径是对的。
VNC 登录后只有壁纸和鼠标,通常是~/.vnc/xstartup里的桌面环境没有正确启动。可以切换到 XFCE 再试一次,也可以手动在终端执行startxfce4看有没有报错输出。如果提示DISPLAY变量不对,先export DISPLAY=:1,再启动桌面进程。
另外提醒一句,黑屏问题有时候不是配置错误,而是登录会话残留。重启 xrdp 或者 VNC 服务之前,先遍历一遍正在运行的进程,把之前残留的虚拟会话清理干净再重新连。
5.3 鼠标键盘响应很差、画面模糊
远程控制时“能用”和“好用”之间差距很大。鼠标键盘响应差,绝大多数情况是网络延迟或编码负载过高,而不是配置错误。
VNC 方面,画面模糊多半是编码质量设置太低。TigerVNC 客户端把“画质”调到高,同时把“压缩级别”往平衡方向调,一般会有明显改善。xrdp 方面,如果用的是 Windows 默认颜色深度设置,改成 32 位色深能减少色块和模糊感。
鼠标响应差还有一种特殊情况:Ubuntu 桌面里启用了 GNOME 的动画特效或 XFCE 的合成器,远程协议处理这些桌面特效非常吃力。最简单的降负载方法是关闭桌面合成效果,XFCE 里可以关闭窗口合成,GNOME 里把动画效果设置成“无”或“减少动效”。服务器性能不够强的话,建议远程会话里不要开浏览器看视频或滚动长页面,实测下来卡顿感会非常明显。
还有一个容易忽视的点:Windows 端在远程连接窗口里如果把本地键盘输入法切成中文输入法,再往 Ubuntu 里输入字符,可能出现字符错乱或卡键。连接状态下保持 Windows 输入法为英文模式,能省掉很多莫名其妙的输入问题。
5.4 端口测试与日志定位
远程控制出了问题,光靠猜是很费时间的。我习惯先用端口测试确认问题发生层级。
Windows 端 PowerShell 执行 Test-NetConnection,端口通了就说明网络没问题,问题在应用程序或者桌面环境层。端口不通,先查 Linux 端防火墙和服务状态。这一步能用一分钟排除掉一半以上的庸人自扰。
如果端口通了但连上之后体验不对,看日志比看教程有用。xrdp 日志在/var/log/xrdp.log和/var/log/xrdp-sesman.log,用tail -f实时跟踪连接过程,每次从 Windows 发起连接都能看到新记录。VNC 服务端如果不是 systemd 管理而是手动启动的,日志会直接输出到终端;如果是 systemd 管理,用journalctl -u vncserver@1.service -f查看。
我个人体会是,远程控制的排查一定要有耐心,问题通常层层嵌套:网络不通查防火墙,防火墙没问题查服务,服务正常查桌面环境,桌面环境还是不对就去看日志。跟着这个顺序走,大多数问题都能找到落脚点。
6. 一点个人经验收尾
上面三种方案我都实际用过,最后留一点个人感觉。如果你只是临时连一下 Ubuntu 图形界面,比较推荐 xrdp,顺手装好、Windows 原生支持,用起来最接近“无感”。如果是为了运维服务器、改配置文件,SSH 才是最可靠的选择,别贪图形界面。VNC 更像一个“万金油”后备方案,适合那些需要多会话或者比较特殊的桌面环境需求。
我见过不少人纠结“到底哪个方案最好”,其实没必要。局域网里远程控制,最终目标是把活干完、把体验稳住。选一个适合你场景的方案,把对应的配置写成笔记,下次换电脑、换网段、换系统版本的时候照着走一遍就够了。希望这篇文章里踩过的坑能帮你少走几次弯路。