1. 为什么要在 Ubuntu 26.04 上折腾远程桌面
Ubuntu 26.04 这个版本号一出来,很多老用户的第一反应是"又该重装系统了"。但真正让我在意的是它默认桌面环境的变化——GNOME 版本迭代之后,远程桌面的底层协议栈也跟着动了。以前那套"装个 xrdp 就完事"的粗暴玩法,在新版本上会遇到不少新情况。我前后在三台不同配置的机器上做了实测,踩了一些坑,也总结出一套比较稳的流程,这里完整分享出来。
先说清楚这个内容解决什么问题:你有一台装了 Ubuntu 26.04 的机器(可能是办公室的台式机、家里的迷你主机、或者云上的实例),你想从一台 Windows 电脑远程连过去,像操作本地电脑一样使用它的图形界面。适合谁看?适合有一定 Linux 基础、能敲命令、但不想在远程桌面这种"小事"上反复折腾的开发者、运维人员、以及把 Linux 当主力机用的普通用户。如果你完全没碰过 Linux,建议先补一下基本的终端操作再来。
远程桌面这件事,表面上看是"连上去就行",实际上涉及三个层面的东西:服务端用什么协议、桌面会话怎么管理、网络和认证怎么打通。Ubuntu 26.04 在这三块都有它自己的脾气,尤其是 GNOME 从 X11 向 Wayland 迁移的大背景下,传统的 xrdp 方案会遇到会话冲突、黑屏、剪贴板失效等一系列问题。我实测下来,最稳的路线是走 GNOME 自带的远程桌面功能配合 RDP 协议,而不是硬上 xrdp。下面把整个思路、原理、操作和避坑经验一层层拆开讲。
2. 方案选型:为什么我不推荐一上来就装 xrdp
2.1 三种主流路线的对比
在 Ubuntu 上做远程桌面,常见的有三条路:VNC、xrdp、以及 GNOME 内置的 RDP 远程桌面。很多人习惯性地搜"Ubuntu 远程桌面"然后照着老教程装 xrdp,结果在新版本上各种报错。我先把这三条路的本质区别讲清楚,你就知道为什么选型比操作更重要。
VNC 的原理是服务端把屏幕帧缓冲抓下来编码传给你,客户端解码显示,同时把你的键鼠事件回传。它跟桌面环境是解耦的,所以兼容性好,但性能一般,尤其在动画多、分辨率高的时候明显卡顿,而且默认不加密,需要额外套一层。
xrdp 是一个开源的 RDP 服务端实现,它让 Linux 能接受 Windows 自带的远程桌面客户端连接。听起来很美,但它的工作方式是"自己起一个 X 会话",这跟 GNOME 已经登录的会话是两套东西。你在 Windows 上连过去,看到的是一个全新的、空的桌面,而不是你本机正在用的那个。更麻烦的是,在 Wayland 环境下 xrdp 的兼容性一直不太理想,经常出现黑屏或者登录后闪退。
GNOME 内置的远程桌面(基于 gnome-remote-desktop)是 Ubuntu 官方从 22.04 开始逐步主推的方案。它直接集成在系统设置里,走 RDP 协议,Windows 自带的"远程桌面连接"就能连,不需要装任何第三方客户端。它的关键优势是跟当前登录的桌面会话绑定,你连过去看到的就是本机正在跑的那个桌面,窗口、剪贴板、文件都是同一套。
| 方案 | 协议 | 是否共享当前会话 | 性能 | 配置复杂度 | 新版本兼容性 |
|---|---|---|---|---|---|
| VNC (TigerVNC等) | RFB | 可配置 | 中等 | 中等 | 较好 |
| xrdp | RDP | 默认新建会话 | 较好 | 较高 | 一般 |
| GNOME 内置远程桌面 | RDP | 是 | 好 | 低 | 好 |
2.2 我最终选择 GNOME 内置 RDP 的理由
选型的核心判断标准其实就一条:你要的是"远程操作这台机器上正在运行的那个桌面",还是"远程开一个独立的新桌面"。绝大多数人的真实需求是前者——本机开着的东西,远程接着用。GNOME 内置方案天然满足这一点,而 xrdp 默认是后者,要改成前者还得折腾会话接管,成本高且不稳定。
另一个理由是协议。RDP 在 Windows 端是原生支持的,你不需要在 Windows 上装任何软件,直接 Win+R 输入 mstsc 就能连。这对"从 Windows 远程连 Ubuntu"这个场景来说是最省事的。VNC 则需要在 Windows 上装客户端,多一道手续。
还有一点是维护成本。GNOME 内置功能跟着系统更新走,Ubuntu 官方在维护,出问题的概率低。xrdp 是社区项目,版本更新和桌面环境的适配总有滞后,每次大版本升级都可能踩坑。我实测在 26.04 上,内置方案的稳定性明显优于 xrdp。
注意:GNOME 内置远程桌面要求系统运行在 Wayland 会话下才能发挥最佳效果,如果你之前手动切到了 X11,建议切回 Wayland,否则某些功能会受限。
2.3 前置条件盘点
动手之前,先确认几件事,避免做到一半发现缺东西。第一,你的 Ubuntu 26.04 必须是带图形界面的桌面版,服务器版默认没有桌面环境,需要先装 GNOME。第二,确认当前会话类型,终端里执行echo $XDG_SESSION_TYPE,输出应该是wayland。第三,确保你知道自己的登录密码,远程桌面认证要用。第四,网络层面,Ubuntu 和 Windows 要在能互相访问的网络里,如果是跨网段或者云服务器,还得考虑端口放行的问题。
3. 服务端配置:在 Ubuntu 26.04 上把远程桌面开起来
3.1 图形界面下的开启步骤
最直接的方式是走系统设置。打开"设置",找到"系统"分类下的"远程桌面"选项。进去之后你会看到一个总开关,默认是关闭的。打开它,系统会自动启用 RDP 服务并监听 3389 端口。
这里有几个关键配置项需要留意。首先是"远程登录"的认证方式,默认使用系统账户密码,你可以选择是否需要每次连接时在本地机器上确认。我建议初次配置时把"需要确认"打开,这样每次有人连进来,本机屏幕上会弹一个授权提示,安全一些。等你确认整套流程跑通、环境可信之后,再关掉它图方便。
其次是网络接口的绑定。默认它可能只监听在某些接口上,如果你是从外部网络连进来,需要确认监听地址是否正确。在设置界面里通常有"允许从以下网络连接"之类的选项,选"所有网络"或者指定你的网卡。
还有一个容易被忽略的点:屏幕锁定。如果本机屏幕锁了,远程连过去可能看到的是锁屏界面而不是桌面。这个行为在不同版本上略有差异,实测 26.04 上如果本机处于锁屏状态,远程连接会要求你先解锁,输入的是同一个账户密码。所以远程操作前,最好确保本机没有进入深度休眠。
3.2 命令行方式:更可控的配置路径
图形界面点几下虽然简单,但如果你想脚本化、或者在没有显示器的机器上配置,就得用命令行。GNOME 的远程桌面配置存在 dconf 里,可以用gsettings来读写。
先看当前状态:
gsettings get org.gnome.desktop.remote-desktop.rdp enable返回false说明没开。开启它:
gsettings set org.gnome.desktop.remote-desktop.rdp enable true认证相关的配置项在org.gnome.desktop.remote-desktop.rdp这个 schema 下,你可以用gsettings list-keys org.gnome.desktop.remote-desktop.rdp把所有可配置项列出来。其中比较重要的有view-only(只读模式,开了之后远程只能看不能操作)、screen-share(是否共享当前屏幕)等。
端口方面,RDP 默认 3389,如果你想改,可以在配置里调整。改端口的好处是避开一些自动化扫描,但要注意 Windows 客户端连接时得手动指定端口,格式是地址:端口。
提示:用命令行改完配置后,有些设置需要重新登录会话或者重启远程桌面服务才生效。最稳妥的做法是注销再登录一次。
3.3 防火墙与端口放行
Ubuntu 默认可能启用了 ufw 防火墙。如果开了,3389 端口默认是拦着的,远程连不进来。先看防火墙状态:
sudo ufw status如果是active,放行 RDP 端口:
sudo ufw allow 3389/tcp如果你改了端口,把 3389 换成你的端口。放行之后再用sudo ufw status确认规则生效。
这里有个实操心得:很多人放行了端口还是连不上,问题往往出在云服务商的安全组上。如果你用的是云主机,除了系统内的 ufw,还得在云控制台的安全组里放行对应端口。这两层防火墙是独立的,缺一不可。我第一次配的时候就在这上面卡了半小时,系统内怎么查都通,最后发现是安全组没开。
3.4 确认服务监听状态
配置完,验证一下服务是不是真的在监听。用ss命令看端口:
ss -tlnp | grep 3389正常应该能看到类似LISTEN 0 128 0.0.0.0:3389的输出,说明服务在监听所有网络接口的 3389 端口。如果只看到127.0.0.1:3389,说明只监听了本地回环,外部连不进来,需要回去检查绑定地址的配置。
还可以用systemctl看相关服务的状态。GNOME 远程桌面在 26.04 上通常由用户级的 systemd 服务管理,可以这样查:
systemctl --user status gnome-remote-desktop.service如果服务没起来,先看日志找原因:
journalctl --user -u gnome-remote-desktop.service -n 50日志里通常会直接告诉你缺什么依赖或者配置哪里有问题。
4. Windows 端连接:mstsc 的正确用法与参数调优
4.1 基本连接流程
Windows 这边不需要装任何东西,系统自带的"远程桌面连接"就是现成的客户端。按 Win+R,输入mstsc,回车,弹出连接窗口。在"计算机"栏里填 Ubuntu 机器的 IP 地址,如果改了端口就填IP:端口,然后点"连接"。
接下来会弹出凭据输入框,用户名填你在 Ubuntu 上的账户名,密码填对应的登录密码。注意这里有个坑:如果你的 Ubuntu 账户名和显示名不一致,要填的是登录名(也就是whoami输出的那个),不是设置里显示的全名。我第一次连的时候填了显示名,一直认证失败,排查半天才发现是这个问题。
认证通过后,如果服务端开了"需要确认",Ubuntu 本机屏幕上会弹一个授权框,点允许之后 Windows 这边才会真正显示桌面。整个过程大概几秒钟。
4.2 连接参数的针对性调整
mstsc 默认的参数不一定适合 Linux 桌面,有几个地方值得调。点连接窗口左下角的"显示选项"展开详细设置。
"显示"标签页里,分辨率建议选"全屏"或者跟你的 Windows 屏幕匹配的分辨率。如果选得太小,Ubuntu 桌面会挤在一个小窗口里,操作很难受。颜色深度一般默认 32 位就行,除非你的网络特别差,可以降到 16 位省带宽。
"体验"标签页里有个"连接速度"的下拉框,它会自动帮你勾选一些优化项。如果你是在局域网内,选"局域网",画质和响应都最好。如果是跨网络,选"低带宽"会自动关掉一些视觉效果,牺牲画质换流畅度。我实测在局域网下,选"局域网"模式,动画和滚动都很顺,基本感觉不到延迟。
"本地资源"标签页值得关注的是剪贴板。默认"剪贴板"是勾选的,这意味着你在 Windows 上复制的东西可以直接在 Ubuntu 里粘贴,反过来也行。这个功能实测在 26.04 上工作正常,是提升效率的关键。如果你发现剪贴板不通,先检查这里有没有勾上。
4.3 保存连接配置省去重复输入
每次连接都重新填 IP 和参数很烦。在 mstsc 里配置好之后,点"另存为",存成一个.rdp文件。下次直接双击这个文件就能连,参数都保留着。更进一步,你可以在保存的 rdp 文件里手动加一行username:s:你的用户名,这样连用户名都不用每次输了,只剩密码。
不过要注意,rdp 文件里如果存了密码是有安全风险的,明文或者弱加密存储都可能被读取。我的做法是只存用户名和参数,密码每次手动输,兼顾方便和安全。
5. 实测中遇到的典型问题与排查实录
5.1 连接被拒绝的几种可能
最常见的问题是 mstsc 报"由于网络错误,连接被拒绝"或者"无法连接到远程计算机"。这个报错信息很笼统,实际原因可能有好几种,得逐一排查。
先确认服务端服务在跑、端口在监听,前面 3.4 节的命令再跑一遍。如果服务没起来,看日志。如果服务正常但连不上,检查防火墙,系统内的 ufw 和云安全组都要看。如果防火墙也放行了,试试从 Ubuntu 本机自己连自己:在 Ubuntu 上装个 RDP 客户端或者用telnet 127.0.0.1 3389看端口通不通。本机通、外部不通,基本就是防火墙或网络隔离的问题。
还有一种情况是 IP 填错了或者机器换了 IP。如果你用的是 DHCP 动态分配,机器重启后 IP 可能变了。建议给 Ubuntu 配个静态 IP,或者在路由器上做 IP 绑定,省得每次找 IP。
5.2 连上了但黑屏或闪退
这个在 xrdp 方案里特别常见,GNOME 内置方案相对少,但也不是没有。黑屏通常意味着会话建立失败或者桌面渲染出了问题。先看服务端日志,journalctl --user -u gnome-remote-desktop.service里往往有线索。
一个常见诱因是会话类型不匹配。如果你的系统跑在 X11 下,而远程桌面功能期望 Wayland,就可能出问题。用echo $XDG_SESSION_TYPE确认,如果是x11,在登录界面切换回 Wayland 会话再试。
另一个诱因是显卡驱动。某些专有驱动在远程桌面场景下渲染异常,导致黑屏。可以临时切到开源驱动测试,如果开源驱动正常,说明是驱动兼容性问题,考虑换驱动版本或者调整渲染后端。
5.3 剪贴板不互通的排查
剪贴板失效是很影响体验的问题,复制个命令还得手动敲。先确认 mstsc 的"本地资源"里剪贴板勾选了。如果勾了还不通,检查服务端这边有没有相关限制。GNOME 远程桌面在某些配置下会禁用剪贴板同步,可以在 dconf 里查一下相关键值。
实测中还有一个隐蔽原因:如果本机屏幕处于锁定状态,剪贴板同步可能被安全策略阻断。解锁本机屏幕后再试,往往就恢复了。这个行为跟具体版本和安全策略有关,遇到时先排除这个因素。
5.4 常见问题速查表
| 现象 | 可能原因 | 排查动作 |
|---|---|---|
| 连接被拒绝 | 服务未启动/端口未监听 | 查 systemctl 状态、ss 端口 |
| 连接被拒绝 | 防火墙拦截 | 查 ufw 状态、云安全组 |
| 认证失败 | 用户名填错(填了显示名) | 用 whoami 确认登录名 |
| 黑屏 | 会话类型不匹配 | 确认 Wayland 会话 |
| 黑屏 | 显卡驱动问题 | 换开源驱动测试 |
| 剪贴板不通 | 客户端未勾选/本机锁屏 | 检查 mstsc 设置、解锁本机 |
| 卡顿严重 | 带宽不足/分辨率过高 | 降分辨率、调体验模式 |
5.5 几个我踩过的坑
第一个坑是账户名。前面提过,填显示名导致认证失败,这个坑很隐蔽,因为报错信息不会告诉你"用户名错了",只说认证失败。
第二个坑是休眠。Ubuntu 默认一段时间无操作会休眠,休眠后远程就连不上了。如果你需要长期远程访问,得在电源设置里把自动休眠关掉,或者改成"从不"。这个设置在本机操作时无所谓,但作为远程主机就很关键。
第三个坑是分辨率自适应。有时候连上去之后,Ubuntu 桌面的分辨率跟 Windows 窗口对不上,出现黑边或者拉伸。这通常是客户端和服务端协商分辨率时出了问题。在 mstsc 的显示设置里手动指定一个固定分辨率,往往能解决。
6. 安全加固与长期使用建议
6.1 别把 3389 裸奔在公网
RDP 端口直接暴露在公网是很危险的,自动化扫描和暴力破解非常猖獗。如果你的 Ubuntu 机器有公网 IP,强烈建议不要直接把 3389 开放给所有人。几个可行的做法:一是只允许特定 IP 访问,在 ufw 里限制来源地址;二是改一个非默认端口,降低被扫到的概率(但这只是障眼法,不能替代真正的防护);三是通过内网或者专线访问,不暴露公网。
在 ufw 里限制来源 IP 的写法:
sudo ufw allow from 你的Windows机器IP to any port 3389 proto tcp这样只有指定 IP 能连,其他一律拒绝。如果你 Windows 这边的 IP 是动态的,这个方案就不太适用,得考虑其他方式。
6.2 强密码与账户策略
远程桌面的第一道防线是账户密码。确保 Ubuntu 账户用的是强密码,别用生日、123456 这种。如果条件允许,可以考虑更严格的认证方式,但要注意兼容性,不是所有方案都能跟 Windows 的 mstsc 顺畅配合。实测下来,系统账户密码认证是最省事且够用的,前提是密码足够强。
另外,建议给远程访问单独建一个账户,而不是用你的主账户。这样权限可以控制得更细,出问题也好隔离。不过要注意,GNOME 远程桌面是跟当前登录会话绑定的,用哪个账户登录本机,远程看到的就是哪个账户的桌面,所以这个隔离策略要结合你的实际使用方式来设计。
6.3 保持系统和客户端更新
远程桌面涉及协议实现,安全漏洞时有出现。Ubuntu 这边保持系统更新,sudo apt update && sudo apt upgrade定期跑一下。Windows 这边也保持更新,mstsc 的协议实现跟着系统补丁走。两边都新,兼容性和安全性都更有保障。
6.4 性能调优的几个实操点
如果觉得远程操作不够流畅,除了前面说的调 mstsc 体验模式,服务端这边也有可调的地方。降低桌面特效能明显减轻编码负担,比如关掉动画、减少透明效果。在"设置"的"辅助功能"或者用 GNOME Tweaks 工具可以调整这些。
网络层面,如果 Ubuntu 和 Windows 在同一个局域网,确保走的是有线或者 5G 频段的 Wi-Fi,2.4G 频段带宽和稳定性都差一些,远程桌面这种实时性要求高的场景容易卡。实测有线连接下,1080p 分辨率的远程桌面基本无感延迟。
7. 一些延伸玩法
这套流程跑通之后,其实还能扩展出不少用法。比如你可以把 Ubuntu 机器当成一台"远程工作站",Windows 只作为瘦客户端,重活都在 Ubuntu 上跑。又比如多台 Windows 设备连同一台 Ubuntu,虽然同一时间只能有一个活跃会话,但切换起来很方便。
还有一个实用的点:如果你经常在不同网络环境间切换,可以给 Ubuntu 配一个固定的内网地址,然后在 Windows 这边做个 hosts 记录或者用计算机名访问,省得每次记 IP。计算机名访问的前提是局域网内有名称解析,这个在大多数家用和办公网络里都能工作。
我个人在实际操作中的体会是,远程桌面这种基础设施,配置一次就要配扎实,把安全、稳定性、性能都考虑到,后面用起来才省心。图省事裸奔端口、用弱密码,迟早要出问题。反过来,前期多花二十分钟把防火墙、账户、分辨率这些细节调好,后面每天用都是顺的。这套在 26.04 上实测下来的流程,我用了几个月没出过幺蛾子,你可以直接照着抄。