不用搬显示器、不用插KVM切换器,在Windows的屏幕上直接操作另一台Ubuntu 22.04,这是很多人实际工作里的常见诉求。我在工位上就是这么干的:主力机Windows,边上一台Ubuntu 22.04跑任务、做测试,日常就用远程方式过去操作。折腾过几轮之后,结论很明确:方案不在多,选对一条路走到黑。这篇文章就把我实际用下来最稳的组合、步骤和坑一次性讲完,适合Windows和Ubuntu双机在同一个局域网里的同学,也适合刚把Ubuntu当成开发副机、想省掉物理切换的人。
这篇文章不是纯理论堆砌,我尽量把每一步命令、每一个容易翻车的地方都写出来。包括最基础的SSH命令行通道、Windows自带远程桌面直接连的XRDP方案、VNC备选、以及两台机器互相拷贝文件的几种做法。读完你能直接照着搭出一套能日常使用的远程控制环境,而不是只学会某个软件怎么点。
1. 动手前的系统检查与网络准备
1.1 先搞清楚Ubuntu 22.04的桌面协议
很多人上来就装远程软件,装完发现连不上、黑屏、闪退,折腾到半夜。我踩过这个坑之后才明白,第一步应该是看Ubuntu的桌面会话是什么协议。Ubuntu 22.04默认用的是GNOME桌面,登录界面默认走Wayland协议,但很多远程桌面工具本质上是围绕X11设计的,尤其是VNC和XRDP这两类,和Wayland的兼容性一言难尽。
检查当前会话类型很简单,在Ubuntu终端里执行:
echo $XDG_SESSION_TYPE如果显示wayland,那就意味着你远程连接过去的桌面环境会比本地操作多出很多不确定性。常见现象是:远程登录后能看到壁纸和鼠标,但任务栏、窗口管理器全都没有,或者直接黑屏。
最省心的做法是让Ubuntu用Xorg(X11)会话登录。在登录界面,点击输入密码框旁边那个齿轮图标,选择"Ubuntu on Xorg"或者"GNOME on Xorg"选项,再输密码进入系统。这样后续无论是XRDP还是VNC,底座都是X11,兼容性会好非常多。我实测下来,这是解决各种远程桌面怪问题的第一个关键点。
提示:如果你只是偶尔远程,可以只在远程会话里选Xorg;如果远程是你日常高频操作,建议本地登录也直接用Xorg,保持两个环境一致,省得踩会话切换的坑。
1.2 固定IP:远程控制稳定性的隐形前提
远程控制最烦的事情不是连不上,而是连着连着IP变了。DHCP分配地址在重启路由器或租约更新之后可能变化,刚配好的桌面连接、SSH别名、SFTP书签全部失效。所以动手搭远程方案之前,给Ubuntu固定一个局域网IP是值得花五分钟做的事。
Ubuntu 22.04桌面版默认是NetworkManager管理网络,用命令行固定IP比较快。先看连接名称:
nmcli connection show一般有线网卡会叫Wired connection 1或类似名字,记住这个名字,然后执行:
sudo nmcli connection modify "Wired connection 1" ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns 192.168.1.1 sudo nmcli connection up "Wired connection 1"注意IP地址要替换成你局域网实际网段。比如路由器是192.168.31.x,那就用192.168.31.100这种,别照抄我的。配置完成后用ip addr确认一下地址是否生效。
如果你用的是服务器版或者偏好改配置文件,也可以改/etc/netplan/目录下的yaml文件,但桌面版用nmcli更直观。固定IP的意义在于,之后SSH配置、远程桌面地址、Samba共享路径都可以一次写好,不再受IP漂移影响。
1.3 防火墙与端口规划
Ubuntu 22.04默认没有启用防火墙(ufw处于inactive状态),但如果你之前手动开过,或者系统镜像自带安全策略,远程连不上就可能是被防火墙拦了。先看状态:
sudo ufw status verbose如果是Status: active,就需要放行可能用到的端口。按照后面的方案,至少要开放SSH(22)、RDP(3389)、VNC(5900),如果还要用Samba共享文件,那再加139和445。我建议不要直接放行所有来源,而是限制到局域网网段,加一层意义不大的但心理上舒服一点的边界:
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 proto tcp网段要和你自己的局域网对上。这样配置之后,外面接口的请求到不了这些端口,局域网内正常工作不受影响。远程控制说白了是在自己局域网里用的,端口面尽量收窄永远是好事。
2. 基础但够用的命令行通道:SSH
2.1 在Ubuntu侧开启SSH服务
远程控制不只是图形界面,实际上对于日常开发、跑脚本、改配置来说,SSH命令行通道是效率最高的方式。它资源占用极小,不需要桌面渲染,网络不稳定时也能凑合工作。而且后面SFTP传文件、Tunnel加密都依赖SSH,所以这是所有方案里的地基。
Ubuntu 22.04默认不一定装了openssh-server,先装再启动:
sudo apt update sudo apt install -y openssh-server sudo systemctl enable --now ssh然后确认22端口在监听:
ss -tlnp | grep :22看到类似0.0.0.0:22的监听记录就说明服务起来了。注意服务名是ssh,有些文档写成sshd,在systemd里这个服务在Ubuntu上叫ssh,别敲错。
2.2 Windows侧连接与密钥登录配置
Windows 10和11自带了OpenSSH客户端,不需要额外装任何软件。打开终端(PowerShell或CMD都行),直接连:
ssh user@192.168.1.100第一次连接会提示确认主机指纹,输入yes,然后输入密码就进去了。这一步如果通了,说明网络和SSH基础都没问题,后面所有方案都建立在这个通路上。
但密码登录有个问题:每次都要输密码,而且如果用XSHELL之类的工具还好,在PowerShell里输密码连密码粘贴都不方便。建议配成密钥登录。在Windows上先生成密钥对:
ssh-keygen -t ed25519 -C "windows-desktop"生成的公钥在C:\Users\你的用户名\.ssh\id_ed25519.pub,把内容复制到Ubuntu的~/.ssh/authorized_keys文件里,一行一个。注意Ubuntu侧的文件权限必须设置对,否则SSH会拒绝使用密钥:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys配置完再试一次ssh user@192.168.1.100,应该就不用输密码了。这一步非常值得做,尤其是后面要用SCP、SFTP、Rsync的场合,不用密码意味着脚本和自动化都顺畅多了。
2.3 用SCP和SFTP传文件的小技巧
SSH通了,传文件就不用开U盘或微信文件传输助手了。SCP最直接,Windows终端里执行:
scp ./test.txt user@192.168.1.100:/home/user/想传整个目录加-r参数。反过来,把Ubuntu上的文件拉到Windows:
scp user@192.168.1.100:/home/user/data.zip D:\downloads\如果你觉得SCP命令记起来麻烦,Windows资源管理器其实支持SFTP协议直连。在文件管理器地址栏输入:
sftp://user@192.168.1.100/home/user回车之后会要求输入密码(有些版本需要输入账号密码),然后就能像操作本地文件夹一样浏览、拖拽文件,特别适合不熟悉命令行的同学。不过这个方式依赖密码登录,刚才配过密钥的话需要在Windows侧配置一下,否则第一次还是会要求输密码。
SSH这套东西的价值在于它是所有远程控制的底座。后面的XRDP、VNC即使崩了,SSH永远是你最后一条能掌控系统的通道。建议先把这条链路养成熟,再做图形界面。
3. 图形化远程桌面:Windows自带mstsc + XRDP(强烈推荐)
3.1 为什么推荐XRDP而不是VNC
图形化远程控制的第一选择,我强烈推荐XRDP。原因特别朴实:Windows自带的远程桌面客户端(mstsc.exe)走的是RDP协议,而XRDP就是一个Linux端的RDP服务端,两边协议完全对得上,你不用装任何第三方客户端,Windows上双击就能连。
相比VNC,RDP协议在画面压缩、带宽利用、鼠标键盘响应上都更成熟。局域网千兆环境下,RDP的体验非常接近本地操作,滚动网页、编辑文档都感觉不到明显延迟。VNC在局域网里也不慢,但画面全屏刷新时会偶发毛刺和拖影,体验差一个档次。另外XRDP天然支持Windows远程桌面里的很多功能,比如剪贴板文本互通、分辨率自适应窗口大小,这些都是VNC方案要额外配置才有的。
3.2 XRDP安装与启动
Ubuntu 22.04的软件源里就有xrdp,安装命令很简单:
sudo apt install -y xrdp sudo systemctl enable --now xrdp装完先别急着连,检查一下服务状态:
systemctl status xrdp正常会显示active (running)。端口监听确认:
ss -tlnp | grep 3389如果一切正常,Windows侧按Win+R输入mstsc,在"计算机"一栏填192.168.1.100,用户名填Ubuntu的普通账户名,然后连接。第一次会提示证书警告,因为xrdp用的是自签名证书,选择"继续"就行。
注意:如果连接后登录界面一闪而过或者反复回到登录窗口,多半是会话残留问题。先执行
sudo systemctl restart xrdp,如果还不行,看后面常见问题章节里的排查方法。
3.3 登录会话配置与桌面环境适配
很多人在xrdp连接后遇到两种典型问题:一种是登录后只有一个蓝色或灰色的桌面,没有任务栏和应用启动器;另一种是直接黑屏。这两个我都遇到过,根源基本都在于会话启动脚本没配好。
xrdp的会话启动由/etc/xrdp/startwm.sh控制。默认脚本会尝试加载系统桌面,但GNOME在xrdp环境下偶尔会抽风。我的做法是手动在~/.xsession里指定桌面会话:
echo "gnome-session --session=ubuntu" > ~/.xsession chmod +x ~/.xsession如果当前用户之前没有~/.xsession文件,这样创建就行。重启xrdp服务后重新连接,桌面就能正常加载。
不过要给你打预防针:GNOME在远程桌面下的表现并不算轻快。如果你那台Ubuntu配置一般,或者远程操作只是跑一些带图形界面的工具,我建议换个思路——安装一个轻量级桌面,比如XFCE4,专门给远程连接用:
sudo apt install -y xfce4 echo "startxfce4" > ~/.xsession这样xrdp连接后直接进XFCE,响应速度比GNOME快不少,而且和本地登录的GNOME互不干扰。我现在的做法就是这台机器本地登录偶尔用GNOME,远程连过去进XFCE,两边各管各的,稳定得很。
3.4 分辨率、剪贴板和音频的细节设置
mstsc连接时,显示选项里可以选择全屏或者指定分辨率。xrdp会跟随窗口大小自动调整桌面分辨率,这一点比VNC强太多。在Windows远程桌面客户端里,可以勾选"将我的会话锁定在远程计算机上"、"剪贴板"等选项,文本复制粘贴是默认支持的,实测在Windows和Ubuntu之间复制文本没有障碍。
音频方面,xrdp默认不支持把Ubuntu的音频重定向到Windows,这属于RDP协议之外的模块问题。如果你只是日常操作、写代码、跑程序,基本用不到远程声音。只有看视频或者处理音频素材的场景下,这个问题才值得去折腾PulseAudio模块。我建议普通用户直接忽略音频功能,别在这里浪费时间。
文件拖拽是另一个容易误会的点。很多人以为远程桌面应该像本地桌面一样直接把文件拖过去,但xrdp的拖拽支持非常有限,甚至经常失败。跨机器传文件,老老实实用SFTP或者Samba,我在后面专门有一节讲这个。
4. VNC方案:适合单用户场景的备选
4.1 两种VNC思路:自带桌面共享 vs 独立VNC服务
如果你不想装xrdp,或者那台Ubuntu常年只给一个用户用,VNC也是一种可行方案。VNC在Ubuntu上有两种实现路径,一个是GNOME桌面自带的"远程桌面"功能(底层是gnome-remote-desktop或vino),另一个是自己装TigerVNC之类的独立服务端。
系统自带的远程桌面在"设置 → 共享"里可以开启,界面友好,但有两个问题:默认开启加密,Windows端的VNC客户端兼容性不一定好;而且在Wayland会话下,状态不稳定,我遇到过明明开启成功但客户端死活连不上的情况。如果你能接受折腾,优先考虑独立VNC服务。
安装TigerVNC服务端:
sudo apt install -y tigervnc-standalone-server vncpasswdvncpasswd会提示设置访问密码,这个密码是VNC专用的,和系统用户密码无关。然后手动启动一个虚拟桌面,指定显示编号和分辨率:
vncserver -localhost no -geometry 1920x1080 :1-localhost no允许非本机访问,局域网里必须加。-geometry指定远程桌面的分辨率。启动后VNC服务默认监听5901端口(显示编号1对应5901)。
4.2 VNC实测中的黑屏与性能问题
VNC连接后黑屏的概率比xrdp更高,主要原因还是桌面会话没正确启动。TigerVNC启动时读取~/.vnc/xstartup这个脚本,如果里面没有启动桌面环境的命令,连接上去自然只有一个灰底终端。
解决办法是编辑~/.vnc/xstartup,写入类似内容:
#!/bin/bash unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS exec gnome-session --session=ubuntu或者如果你走XFCE路线,改成exec startxfce4。改完给脚本可执行权限:
chmod +x ~/.vnc/xstartup重启vncserver再连接,桌面就正常了。
性能方面,VNC在局域网内如果只做轻量操作还能接受,但窗口拖动、滚动页面时画面会有明显延迟,尤其是默认的像素格式和压缩算法下。想要流畅一点,客户端不要选择"自动"编码,手动选ZRLE或Tight编码,色彩深度降到16位,画面会流畅不少。不过说实话,如果你主要用图形界面,xrdp的RDP协议体验本身就比VNC好,VNC在我这里更多是应急备用。
4.3 什么时候该用NoMachine这类第三方工具
还有一类方案是NoMachine、AnyDesk、TeamViewer这些商业或半商业工具。NoMachine在局域网内的性能确实很好,底层的NX协议做了大量优化,同样的网络环境下比VNC流畅,比xrdp甚至还要跟手。它的安装包是图形界面操作,几乎零门槛,装完填IP连接就行。
但我为什么不把它当首选?第一,私有协议意味着你得单独装客户端,不像mstsc和RDP协议那样随处可用;第二,这类工具更多是为跨网络、跨防火墙设计的,功能面大但复杂度也大,在局域网这个简单场景里属于杀鸡用牛刀。如果你的Ubuntu机器要被多个人远程使用,那你需要的是XRDP或VNC这种标准协议方案,而不是装一个桌面工具在机器上反复点点点。
所以我的态度是:NoMachine可以装一个备用,但日常主力还是SSH + XRDP组合。
5. 文件互通与双机协作效率
5.1 Windows访问Ubuntu文件:Samba共享
远程控制搞定了,文件传输必然跟着来。前面说的SFTP是一种方式,但如果你希望Ubuntu的目录像Windows共享文件夹一样直接出现在资源管理器里,Samba是正解。
安装Samba:
sudo apt install -y samba编辑/etc/samba/smb.conf,在文件末尾加一个共享段:
[myshare] path = /home/user/shared browseable = yes read only = no valid users = user然后创建共享目录、设置Samba密码:
mkdir -p /home/user/shared sudo smbpasswd -a user sudo systemctl restart smbdWindows侧在资源管理器地址栏输入:
\\192.168.1.100\myshare输入账号密码后,这个目录就会像本地文件夹一样显示,拖拽文件、编辑文件都行。我的实际体验是:往共享目录里拖几个GB的资料都没问题,千兆局域网下速度可以跑满,比U盘和网盘靠谱太多。
5.2 Ubuntu访问Windows共享:挂载到本地目录
反过来,如果Ubuntu要读取Windows机器上的共享文件夹,可以用cifs挂载。Windows侧先把某个文件夹设置为共享(右键 → 属性 → 共享),然后Ubuntu里安装cifs工具并挂载:
sudo apt install -y cifs-utils sudo mkdir -p /mnt/windows_share sudo mount -t cifs //192.168.1.50/share /mnt/windows_share -o username=windows用户名,password=密码,uid=1000,iocharset=utf8挂载后直接cd /mnt/windows_share操作。如果想要开机自动挂载,可以写到/etc/fstab里,但注意密码会明文写在配置里,介意的话改用credentials文件。这一步不是必需,但双机协作时很方便,属于锦上添花。
5.3 远程会话里的剪贴板和拖拽真相
再巩固一下这个认知:远程桌面协议里的剪贴板互通和数据传输是两回事。XRDP默认同步的是文本剪贴板,也就是你在Windows复制一段文本,切到Ubuntu远程桌面里能直接粘贴,反之亦然。这个功能实测稳定,日常拷贝命令、链接、代码片段非常顺手。
但文件拖拽就另说。xrdp的文件拖拽支持在GNOME下我试过基本无效,拖过去没反应或者只有个坏掉的链接。VNC的剪贴板文件传输取决于客户端实现,也不统一。所以在远程会话里别指望拖文件,记住三条路:SFTP、Samba、共享网盘,足够覆盖绝大多数场景。把这个习惯养好,操作效率不会比本地差。
6. 常见问题速查与实测排错记录
6.1 连接后黑屏或只有壁纸
这是远程桌面领域出现频率最高的故障。当你在xrdp或VNC连接后看到桌面壁纸但没有任何功能组件,说明窗口管理器没有被正确启动。
排查步骤按顺序来:
- 确认当前Ubuntu登录会话是否是Xorg,Wayland下很多怪问题先从这里解决。
- 检查
~/.xsession是否存在且内容正确,我用的GNOME写法是gnome-session --session=ubuntu。 - 查看xrdp日志:
tail -f /var/log/xrdp-sesman.log,有报错信息直接影响排查方向。 - 如果上述都不行,直接换轻量桌面XFCE,别跟GNOME死磕。
6.2 连接闪退或反复回到登录界面
xrdp登录成功后立刻断开,回到登录界面,通常是会话残留或者polkit权限问题。polkit问题在Ubuntu 22.04上有一个已知情况,color管理器的权限不足会导致会话启动被拦腰截断。解决方法是创建一个polkit规则文件:
sudo tee /etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla <<EOF [Allow Desktop Color Management] Identity=unix-user:* Action=org.freedesktop.color-manager.create-device ResultAny=yes ResultInactive=yes ResultActive=yes EOF然后重启xrdp:
sudo systemctl restart xrdp实测这个操作能解决很大一部分闪退和登录后立即断开的案例。另外如果机器上有旧会话没有正常退出,执行ps aux | grep xrdp看到一堆残留进程,重启服务就清掉了。
6.3 端口通但连不上的排查顺序
如果从Windows能ping通Ubuntu,但远程桌面就是连不上,按这个顺序排查:
- 检查端口是否监听:在Ubuntu上执行
ss -tlnp | grep 3389,没有输出说明xrdp没起来。 - 检查防火墙:
sudo ufw status,如果active,确认3389端口放行规则是否匹配你的来源IP网段。 - 从Windows侧用telnet测试端口:在PowerShell里执行
Test-NetConnection 192.168.1.100 -Port 3389,如果TcpTestSucceeded显示False,说明端口不通,问题在Ubuntu侧的网络或防火墙。 - 如果端口通但还是连不上,把Ubuntu侧的xrdp日志拉出来看,很多时候答案就在日志最后几行。
6.4 性能优化与体验提升清单
远程桌面用起来卡,不一定是网络问题。以下几个调整对体验改善非常明显:
- Ubuntu侧关掉桌面特效:gnome的动画在远程会话里会拖慢响应,换成XFCE基本没这个烦恼。
- mstsc连接时,显示选项里的“持久位图缓存”和“桌面背景”可以按需关闭。远程操作时桌面背景其实没必要加载,关掉能省不少带宽。
- 网络优先用有线:Wi-Fi不稳定时远程画面会瞬间卡成幻灯片,有线千兆体验完全是另一个档次。
- 如果远程主要是跑终端和IDE,别纠结图形界面卡不卡,直接用SSH + 终端复用工具,跟手程度远超任何远程桌面。
最后分享一个我自己实际磨合出来的工作方式:需要运维、装包、看日志时,直接用Windows终端SSH过去,键盘敲命令效率最高;需要操作图形界面、偶尔看个截图或配置面板时,再打开mstsc连XRDP。文件传输无脑走Samba共享目录。这套流程稳了大半年,没出过需要重启服务以外的大问题。你按这个思路搭一遍,基本也能一次到位。如果哪一步卡住了,对照前面这些排查方法逐条过,大部分问题都能在十分钟内定位。