给服务器上的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