xrdp输密码后闪退的根本原因是startwm.sh脚本调用不兼容的/etc/x11/xsession,导致会话启动失败;需清理环境变量、删除旧启动行、末尾仅保留有效exec命令(如exec /usr/bin/xfce4-session),并确保~/.xsession存在且权限正确。

根本不是蓝屏,是xrdp会话启动失败后直接断连,Windows远程桌面客户端误报成“连接中断”或黑屏闪退——Ubuntu本身不会蓝屏。
为什么xrdp一输密码就闪退?
核心问题在startwm.sh脚本末尾的默认启动逻辑。它试图调用/etc/X11/Xsession,但Ubuntu 22.04+(尤其是24.04 LTS)默认用GNOME+Wayland,而Xsession已不兼容当前会话管理机制,导致桌面进程崩溃退出。
- 现象:输入账号密码后窗口瞬间关闭,
/var/log/xrdp-sesman.log里常出现session_start: session exit code 1或Failed to run command: /etc/X11/Xsession - 关键点:
startwm.sh不是只读配置文件,它是实际执行的shell脚本,改错位置或漏掉exec会导致静默失败 - 别信“重启服务就能好”——没改对
startwm.sh,重启多少次都一样
必须改的三处:/etc/xrdp/startwm.sh
用sudo nano /etc/xrdp/startwm.sh打开,重点处理以下三块:
- 顶部加环境变量清理(防DBus冲突):
unset DBUS_SESSION_BUS_ADDRESSunset XDG_RUNTIME_DIR - 删掉所有以
test -x ... && exec ...开头的旧启动行(特别是调用/etc/X11/Xsession那几行) - 末尾只留一行真正有效的启动命令,例如用xfce4:
exec /usr/bin/xfce4-session
或强制X11模式的GNOME:export GDK_BACKEND=x11export XDG_SESSION_TYPE=x11exec gnome-session
用户级补丁:~/.xsession不能少
即使startwm.sh改对了,xrdp仍可能 fallback 到用户家目录下的.xsession。这个文件若不存在、权限不对或内容无效,就会触发二次失败。
- 创建并写入(以xfce4为例):
echo "exec /usr/bin/xfce4-session" > ~/.xsession - 设权限:
chmod 644 ~/.xsessionchown $USER:$USER ~/.xsession - 注意:不要写
#!/bin/sh头,xrdp不认;也不要写startxfce4(已废弃),用exec /usr/bin/xfce4-session - GNOME用户同理,但必须加
export GDK_BACKEND=x11,否则仍走Wayland路径
WSL2环境下要额外关掉Wayland
Win11 + WSL2 + Ubuntu跑xrdp,startwm.sh和.xsession全对也闪退?大概率是WSL2里残留的Wayland环境变量干扰了Xorg会话初始化。
- 在
/etc/xrdp/startwm.sh顶部加这三行(顺序不能错):unset WAYLAND_DISPLAYexport GDK_BACKEND=x11export XDG_SESSION_TYPE=x11 - 检查WSL2是否启用了systemd(Ubuntu 22.04+默认关):
grep -i systemd /etc/wsl.conf,如果没这一行或值为false,需手动启用,否则dbus-run-session等组件无法正常拉起 - WSL2中xrdp监听的是
127.0.0.1:3389,Windows端必须用mstsc连localhost:3389,不能填WSL2的IP或主机名
最易被忽略的点:改完startwm.sh和.xsession后,必须用sudo systemctl restart xrdp(不是service xrdp restart),且Windows端要彻底关闭mstsc进程再重开——残留的客户端会复用旧会话缓存,掩盖真实修复效果。











