ubuntu上配置xrdp远程桌面黑屏的根本原因是gnome会话环境未正确加载,需设置~/.xsessionrc三行关键环境变量、修改/etc/xrdp/startwm.sh并重启xrdp服务。

Ubuntu上配置xrdp远程桌面,最常卡在连接后黑屏或根本连不上——这不是安装没成功,而是GNOME会话环境没正确加载。直接用sudo apt install xrdp装完就以为能连,90%会失败。
为什么装完xrdp还是黑屏
Ubuntu 22.04+ 默认用GNOME 42+,而xrdp默认启动脚本不兼容GNOME的session bus和XDG变量。它试图拉起一个空会话,结果桌面进程根本没启动,只剩黑底光标。
-
journalctl -u xrdp -b | grep -i "fail\|error"通常会看到Failed to load session "ubuntu"或No session manager found - 不是桌面环境没装,是xrdp压根没告诉GNOME“我要跑一个真实桌面”,而是起了个裸X session
- 旧教程教改
/etc/xrdp/startwm.sh加startxfce4,但Ubuntu默认没装XFCE,硬加反而报错
~/.xsessionrc必须写对三行环境变量
这是GNOME能被xrdp识别的关键。只写XDG_CURRENT_DESKTOP=GNOME不够,必须匹配Ubuntu发行版的会话标识。
- 创建
~/.xsessionrc(注意是当前用户家目录,不是root):export GNOME_SHELL_SESSION_MODE=ubuntu<br>export XDG_CURRENT_DESKTOP=ubuntu:GNOME<br>export XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg<br>export XDG_DATA_DIRS=/usr/share/ubuntu:/usr/local/share:/usr/share
- 漏掉
GNOME_SHELL_SESSION_MODE=ubuntu,GNOME会 fallback到“fallback mode”,没有任务栏和应用启动器 -
XDG_CONFIG_DIRS路径必须含/etc/xdg/xdg-ubuntu,否则读不到Ubuntu定制的GNOME策略
/etc/xrdp/startwm.sh要删两行、加一行
官方脚本里那两行DBUS和XDG清理,本意是防冲突,结果把GNOME必需的session bus干掉了。
- 打开
/etc/xrdp/startwm.sh,找到并删除这两行:unset DBUS_SESSION_BUS_ADDRESS<br>unset XDG_RUNTIME_DIR
- 在
fi之后、exec /etc/X11/Xsession之前,插入:. $HOME/.xsessionrc
- 不重启服务就改,新连接仍会读旧缓存;必须执行
sudo systemctl restart xrdp - 如果连gdm都卡住,顺手
sudo systemctl restart gdm3比硬等更省时间
防火墙和端口别只开3389就完事
ufw允许3389只是第一步。xrdp实际要跟本地显示管理器通信,涉及动态端口和Unix socket。
-
sudo ufw allow 3389必须执行,但别忘了sudo ufw allow from 你的IP to any port 3389更安全 - 腾讯云/阿里云等厂商控制台还要单独放行安全组里的3389 TCP端口,光开ufw没用
- 如果用非标准端口(比如改了
/etc/xrdp/xrdp.ini里的port=3390),ufw和安全组都要同步改 - 连上后鼠标卡顿?大概率是
max_bpp=32在/etc/xrdp/xrdp.ini里没设,改成32再重启服务
真正麻烦的不是命令敲多少行,而是GNOME和xrdp之间那几行环境变量的咬合精度——差一个路径、少一个冒号,就黑屏。改完别急着重连,先systemctl status xrdp确认active,再看tail -n 10 /var/log/xrdp-sesman.log有没有session start成功记录。











