简介:面向需要在Ubuntu 20.04上建立远程桌面连接的Linux运维人员与开发者,这份PDF资料围绕Xrdp服务器的安装与配置展开,覆盖从选择Gnome/Xfce桌面环境、安装Xrdp服务、添加ssl-cert用户组到防火墙放行3389端口、通过Windows RDP客户端远程登录的完整流程。资源为1个PDF文件,压缩包大小约160KB,图文命令清晰,适合作为服务器远程管理操作的快速参考。目前已有9666人学习下载,内容以实操命令为主线,同时穿插Xrdp配置项说明、SSH隧道加密等安全建议,可帮助读者避开常见权限与端口问题,在本地图形界面下高效管理远程Ubuntu系统。
1. 为什么 Ubuntu 20.04 的远程桌面我推荐 Xrdp 而不是先装 VNC
管理员手边常有一台 Ubuntu 20.04 的服务器或办公主机,想从 Windows 直接远程桌面连过去做图形化运维。这类需求的第一反应是装 VNC,但 VNC 在会话拓扑、端口透传和 Windows 端客户端兼容性上都更折腾。Xrdp 把问题收敛成三步:Ubuntu 上装好 xrdp,放行 3389 端口,Windows 自带远程桌面客户端(mstsc)直接连。它不替代 SSH 的管理通道,而是补齐图形化访问这块短板。下面的操作把安装、排错、验证串成一条可复现的路径,并说明哪些参数不能改、哪些报错其实不用怕。
2. Ubuntu 20.04 安装 Xrdp 的完整流程:从软件源到首次连接
2.1 安装前的检查项:桌面环境和软件源
安装 Xrdp 之前,先弄清这台 Ubuntu 20.04 是桌面版还是 Server 版,两者差在 X server 和显示管理器上。桌面版默认带 GNOME 3.36,Xrdp 装完后可以直接用;Server 版没有图形环境,需要先补一个桌面,否则连进去只会看到一个孤立的光标或直接退出来。
ls /usr/share/xsessions/ echo $XDG_CURRENT_DESKTOP cat /etc/os-release | grep VERSION_ID第一条命令列出系统已注册的桌面会话文件,GNOME 桌面对应gnome.desktop,装上 xfce 后会多出对应条目;第二条命令告诉你当前登录环境是什么,输出为空说明你不在图形会话里查看;第三条命令确认版本号是 focal(VERSION_ID="20.04"),这决定后面 apt 源匹配是否准确。
| 命令 | 输出含义 |
|---|---|
ls /usr/share/xsessions/ | 列出系统已注册的桌面会话入口 |
echo $XDG_CURRENT_DESKTOP | 当前图形会话的桌面环境名 |
cat /etc/os-release | 确认系统版本及代号 |
如果目标机器在隔离内网、没有外网,仍然可以完成安装。做法是在一台同样架构、同样为 Ubuntu 20.04 且有网的机器上准备离线包:
sudo apt download xrdp xorgxrdp xrdp-sesmanapt download只把指定 .deb 拉到当前目录,不会写入本机软件库;把文件拷贝到离线机后用sudo dpkg -i *.deb安装,中途若报依赖缺失,用sudo apt -f install -y修复一次依赖。这一步要注意 xrdp-sesman 是会话管理进程,少一个 deb,装出来的服务就不完整。动手前先把源索引刷新到最新:
sudo apt update提示:建议先更新再安装。20.04 是老 LTS,索引缺失会导致 apt 在解析依赖时直接中断。
2.2 安装 Xrdp 本体和它需要的桌面组件
主线安装对 Ubuntu 20.04 来说就是一条命令:
sudo apt install xrdp -y装完后系统里会出现两个服务:xrdp监听 3389 端口,负责和远程桌面客户端握手;xrdp-sesman负责用户认证、会话分配和拉起显示进程。两步分开设计的好处是连接层和会话层可以独立重启。先确认两个服务都起来:
sudo systemctl status xrdp sudo systemctl status xrdp-sesman sudo systemctl enable --now xrdp如果xrdp是 active 而xrdp-sesman显示 failed,不要急着重启 3389 端口,优先去翻/var/log/xrdp-sesman.log,大部分问题出在 polkit 权限或用户家目录的所有者不对。
桌面版可以直接跳到下一节;Server 版补装桌面时,我一般推荐 xfce4 而不是继续装完整版 GNOME:
sudo apt install xfce4 xfce4-goodies -y选择 xfce4 的原因不是它好看,而是 Xrdp 的会话管理对它最省心。GNOME 3 在 xrdp 会话里经常出现登录后只有背景图、没有窗口和任务栏的情况,处理成本很高;xfce4 没有全局菜单和复杂的合成器依赖,远程会话的绘制压力也小,这在内网带宽一般、机器配置不高的环境下尤其明显。
2.3 配置会话启动器:让 Xrdp 知道登录后启动哪个桌面
Xrdp 认证通过后读/etc/xrdp/startwm.sh,这个脚本决定启动什么桌面。Ubuntu 20.04 默认内容会调用系统的 Xsession,在 Xorg 会话下很容易黑屏,所以通常把最后一行的启动命令指向 xfce4。
#!/bin/sh # 加载系统默认 locale,避免远程会话里中文显示成方块 if [ -r /etc/default/locale ]; then . /etc/default/locale export LANG LANGUAGE fi # 启动 Xfce 会话,Xrdp 会等待该进程存活 startxfce4用编辑器打开/etc/xrdp/startwm.sh把内容替换成上面这样,然后保存并赋权重启:
sudo chmod +x /etc/xrdp/startwm.sh sudo systemctl restart xrdp对单用户主机,也可以把startxfce4写进用户主目录的~/.xsession,效果等价;两者同时存在时.xsession优先级更高,排错时先看它。注意不要把exit 0加在startxfce4前面,这是黑屏最常见的元凶。
2.4 放行 3389 端口并确认监听状态
装好不等于能连,防火墙这步漏掉,连接会卡在“正在用远程桌面协议进行连接”。常见做法是只放给内网网段:
sudo ufw allow from 192.168.1.0/24 to any port 3389 proto tcpfrom指定来源网段,proto tcp限定协议,端口填 3389。如果要求不严,直接sudo ufw allow 3389/tcp也能过,但不要把它暴露到公网。RDP 的 TLS 只解决传输加密,认证层面扛不住暴力尝试。查看是否真的在监听:
ss -tlnp | grep 3389看到LISTEN 0 10 *:3389 *:*即表示 xrdp 已接管端口。如果输出为空,说明服务没起来或者 3389 被别的进程占住,先用sudo netstat -tlnp | grep 3389查一遍再决定重启哪个服务。
3. Xrdp 连接出现黑屏或登录闪退的排错路径
3.1 黑屏与闪退的四个高频来源
连上去之后的黑屏,绝大多数不是 Xrdp 安装环节出错,而是会话脚本没按预期工作。按出现频率排序,第一是startwm.sh被改坏:很多安装教程让用户在文件末尾追加一行startxfce4,但默认文件尾部本来就有条件判断和exit 0,新追加的命令根本轮不到执行,结果就是登录成功但桌面起不来。第二种是~/.xsession指向了不存在的会话名称,Xrdp 解析不出有效桌面。第三种是用 GNOME 3 直接对接 Xrdp,登录后长时间只有背景图。第四种是 dbus 环境变量没带进远程会话,导致部分组件启动后立即退出。
排查时先在终端里 SSH 登录这台机器,手工启动一次桌面:
sudo -u yourname startxfce4如果这条能拉起来窗口,说明桌面环境本身没坏,问题缩到 Xrdp 的会话脚本上;如果连手工启动都报错,先解决桌面依赖,再回头看远程连接。
3.2 通过日志定位 Xrdp 启动失败的位置
Xrdp 的日志路径比较固定:连接层看/var/log/xrdp.log,会话层看/var/log/xrdp-sesman.log,用户侧桌面启动失败看家目录下的~/.xsession-errors。排错顺序也按这个方向走。
sudo tail -n 100 /var/log/xrdp.log sudo tail -n 100 /var/log/xrdp-sesman.log tail -n 100 ~/.xsession-errors| 日志文件 | 负责环节 | 黑屏时的信号 |
|---|---|---|
| /var/log/xrdp.log | 网络连接与协议协商 | 没有连接记录说明端口未放行 |
| /var/log/xrdp-sesman.log | 认证与显示会话分配 | 没有 started session 说明会话没拉起 |
| ~/.xsession-errors | 用户桌面进程 | 这里报的错才是黑屏真正的根因 |
xrdp.log打印 TCP 握手和远程桌面协议协商,看到connection received from说明客户端已经触达服务端;xrdp-sesman.log记录starting xrdp-sesman with pid和用户认证结果;~/.xsession-errors记录桌面进程自己的报错,黑屏时这里往往已经写好了真正异常,比如dbus-launch找不到或者某个.desktop文件语法错误。
顺着时间戳读一次典型登录流程:
[INFO ] Socket 12: connection received from 10.0.0.8 port 51234 [INFO ] using default: hashed password file [INFO ] login_success: user yourname [INFO ] started session for user yourname: X11 :1login_success之后如果started session迟迟不出现,多半是startwm.sh在启动过程中卡住;出现started session但用户侧黑屏,注意力就去~/.xsession-errors。还有一类连接层错误值得提:Windows 客户端可能报 0x204 之类的连接失败,这通常发生在 TLS 协商阶段,先确认 3389 端口可达,再检查xrdp.ini里的security_layer是否被设成了不匹配的组合,恢复为negotiate能解决大多数这类兼容问题。
3.3 PAM 与 polkit:认证通过但会话不成立的隐形门槛
Xrdp 在 Ubuntu 20.04 上的认证走 PAM,配置文件是/etc/pam.d/xrdp-sesman。它默认引入common-auth,正常情况下和 SSH 的密码认证共用同一套逻辑。如果这台机器加固过 PAM,比如修改过pam_unix.so的调用链,就会出现“Xrdp 登录页面提示密码错误,SSH 却能登录”的怪象。排查方法是直接在终端里测认证链:
sudo apt install pamtester -y sudo pamtester xrdp-sesman yourname authenticatepamtester安装后运行第二条命令,按提示输入密码,验证失败会打印 PAM 层返回的错误码。它不经过网络,直接模拟 PAM 流程,能干净地分离出认证层与会话层的问题。
polkit 这层通常以“会话建立后马上掉线”的形式出现。Xrdp 拉起 Xorg 时需要访问部分系统资源,xrdp-sesman本身的权限如果不正确,日志里会出现类似Error: Can't open display的记录。检查家目录属主和权限,用stat -c '%U %a' /home/yourname确认是 755 或 700 且所有者正确;不对就改回来,然后清理残留会话进程再重试。
sudo pkill -u yourname pkill -f xrdp-sesman sudo systemctl restart xrdppkill -u yourname把该用户所有残留显示进程清干净,避免旧的 X 锁文件导致下一次连接失败;pkill -f xrdp-sesman在 sesman 卡死时使用,之后重启 xrdp 父进程,它会自动拉起子会话服务。
4. Xrdp 在 Ubuntu 20.04 上的进阶参数与会话管理技巧
4.1 改端口、调颜色深度:xrdp.ini 里最值得动的四个参数
Xrdp 的主配置在/etc/xrdp/xrdp.ini,[Globals]段里的参数决定远程桌面客户端和它协商出来的最终效果。日常改动集中在端口、颜色深度和加密协商策略上。
| 参数 | 常见值 | 作用 |
|---|---|---|
| port | 3389 | RDP 监听端口,被占时改成 3390 |
| max_bpp | 32 | 最大颜色深度,24 能明显减少带宽占用 |
| security_layer | negotiate | 安全协商;老客户端兼容问题改回 rdp |
| crypt_level | high | 加密级别,改 low 会降低安全性 |
只需要动[Globals]段里的两处:
[Globals] port=3390 max_bpp=24把port提到 3390 有两个副作用:Windows 客户端连接时要显式写ip:3390,防火墙要同步放行新端口。max_bpp从 32 降到 24,在宽带受限的远程场景里收益明显,颜色平滑度下降一点点,换来的是重绘延迟下降;对文字为主的运维场景够用,看视频则不推荐。
crypt_level在遇到加密协商报错时可临时降级。默认high用 128 位及以上,个别老客户端会握手失败,降到low能连通,但风险由你承担。改完配置务必重启,因为参数在启动期加载,热改不会生效:
sudo systemctl restart xrdp4.2 多人同时登录:从单会话切换到多会话并存
Ubuntu 20.04 上的 Xrdp 默认支持多个用户并发登录,但很多人没有单独配过多会话。远程会话与本地登录共用显示环境时,Xrdp 会分配独立的显示编号(:1、:2 等)来区分会话,这些内容定义在/etc/xrdp/xrdp.ini的[Xorg]与[Xvnc]两类会话区块里。
[Xorg] name=Xorg lib=libxup.so username=ask password=ask port=-1 code=20username=ask和password=ask表示连接时由用户现场输入;port=-1让 sesman 自动分配显示端口,避免多会话撞在一起;code=20是给 RDP 客户端的标识符。[Xvnc]区块格式基本一致,只是lib=libvnc.so,后端从 Xorg 换成 VNC 虚拟显示。多人同时登录时,把会话模板切到[Xvnc]更合适,它不绑定物理 GPU,虚拟显示可以并行开多个。
切换方法是在连接时把会话类型选成 Xvnc。也可以把xrdp.ini里的[Xorg]名字改成[Xorg-disabled],让客户端拉列表时看不到这个入口。会话僵死时的回收命令是:
sudo systemctl restart xrdp-sesman这条命令会把所有远程桌面会话连同 Xorg/Xvnc 进程一起重置。它会踢掉在线用户,执行前先确认当前没有正在干活的人。
4.3 中文输入法与键盘布局:远程会话里的两个隐藏坑
Xrdp 的键盘布局默认跟随客户端的语言设置,Windows 上是中文系统,连进去后键盘映射基本不出问题。真正要处理的是输入法框架。Xrdp 会话默认不会自动启动 ibus 或 fcitx,只装不启动,中文输入法便调不出来。
比较稳妥的流程是先在主机层面装好框架,再让远程会话继承相关变量。以 fcitx5 为例:
sudo apt install fcitx5 fcitx5-chinese-addons -y im-config -n fcitx5装完后在~/.xprofile里按下面的模板导入环境变量:
export XDG_SESSION_TYPE=x11 export XMODIFIERS=@im=fcitx export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx最后三个变量分别告诉 X11 上层环境、GTK 程序和 Qt 程序如何找到输入法。远程会话重新登录后,在 Xfce 面板里调出 fcitx 状态条,再添加拼音输入源即可。若看到XMODIFIERS为空,说明输入法没在会话启动前加载,优先检查.xprofile是否被桌面会话读取。用 xfce4 的好处在这里也会体现:它默认执行.xprofile,GNOME 远程会话则不一定。
中文字体显示成方块是另一个常见坑,根因是 locale 或字体包缺失。按第 2 章的写法在/etc/xrdp/startwm.sh里加载/etc/default/locale就能规避大部分问题,再安装fonts-noto-cjk兜底:
sudo apt install fonts-noto-cjk -y5. 用 Windows 和 Linux 客户端双重验证 Xrdp 安装是否真正跑通
从客户端视角验证比什么都直接。Windows 上打开自带远程桌面(mstsc),地址填内网 IP,不带端口号;如果改过端口就填内网IP:3390。用户名密码是 Ubuntu 系统账户,不是 Xrdp 自己的账户体系。首次连接会弹证书校验提示,这是 Xrdp 自签 TLS 证书的常规流程,选择继续连接即可。
如果连认证界面都见不到,先回到服务端跑一次自检:
sudo systemctl is-active xrdp && ss -tln | grep 3389第一条输出active且第二条能看到监听端口,说明服务侧正常。再验证会话真的被拉起,用who看在线状态:
who正常能看到类型为:1、:2这样的显示编号,和 SSH 的pts/0不同。它说明 RDP 握手、PAM 认证、X 会话初始化三个环节都走通了。此时回到 Windows 窗口,应该已经能看到 Xfce 桌面。
Linux 客户端验证常用xfreerdp,命令行方式更适合快速确认:
xfreerdp /v:10.0.0.8:3389 /u:yourname/v指定目标地址和端口,/u指定用户名;密码会提示输入或由/p传入。xfreerdp 能打印更多底层协商日志,出问题时它的报错比 Windows 客户端详细。如果 Linux 与 Windows 两台客户端都能连通,说明安装本身没有问题。
最后压一个实用技巧:验证结束后把残留会话清掉,避免占用显示编号:
sudo systemctl restart xrdp-sesman这条命令会踢掉所有远程用户并释放所有 X 会话资源。对没有人在线的机器,这是最省事的清理方式;对多人共用机器,先用who确认无人再执行。
本文还有配套的精品资源,点击获取