Kika's
Blog
摄于 图片简介 | CC BY 4.0 | 换一张

Xrdp成功登录后闪退

2025-04-11 120 views

给服务器上的Ubuntu系统装了xrdp,然后用Remmina客户端连接gnome桌面,但是发现成功登录后,直接闪退,找了半天原因,最后查询xrdp-sesman的日志:

sudo systemctl status xrdp-sesman.service

部分输出如下:

[WARN ] Window manager (pid 31300, display 10) exited with non-zero exit code 255 and signal 15.

发现是因为Window manager自动退出(signal 15 = SIGTERM),而这是由于上次登录的session还存在着,而一个用户账户不能被多人登录ref

所以解决方法就是强制结束Window manager之前的会话,我这里使用的Window manager是gnome,所以使用命令:

DISPLAY=:10 gnome-session-quit --force

这样来结束display 10的session,这里的display 10可参考上面的报错信息,这样再使用Remmina连接就可以了。

每次退出的时候,记得logout也可以避免此问题。


另外一台服务器也遇到了这样的闪退问题,但是并没有上面的报错,反而显示

[INFO ] connected ok

但是仍然登录成功后闪退。不过这台服务器并没有使用gnome桌面,而是使用的xfce,这次参考了这个回答下面的第一条评论,才修好。

具体办法是:在/etc/xrdp/startwm.sh文件中test -x那一行前面增加一行:

export $(dbus-launch)

过了几天,发现又出问题了,这次让gemini排查了一下,运行下面的命令检查xsession-errors

cat /home/your_username/.xsession-errors

发现有输出:

(xfwm4:4461): Gtk-WARNING : 23:06:25.393: cannot open display: wayland-0 (xfsettingsd:4462): dbind-WARNING : 23:06:25.476: Could not open X display

xrdp貌似只能使用X11,不能使用wayland,所以修改/etc/xrdp/startwm.sh,就好了:

#!/bin/sh
#
# /etc/xrdp/startwm.sh
#
# 此脚本强制使用 X11 会话,解决 Wayland 冲突

# 强制设为 X11 模式
export XDG_SESSION_TYPE=x11
export GNOME_SHELL_SESSION_MODE=xfce
export XDG_CURRENT_DESKTOP=XFCE

# 清理可能冲突的 Wayland/DBus 变量
unset DBUS_SESSION_BUS_ADDRESS
unset XDG_RUNTIME_DIR

# 加载系统配置文件
if [ -r /etc/profile ]; then
  . /etc/profile
fi

# 启动标准的 /etc/X11/Xsession
# 这个脚本会自动执行你主目录下的 .xsession 文件
exec /etc/X11/Xsession

注意.xsession里面设置的是xfce

echo "xfce4-session" > /home/your_username/.xsession