- 问题描述
在按照 [1] 中的步骤,利用 Ubuntu 16.04 + xrdp + Xfce 实现 Windows 远程桌面连接 Linux 后发现一个问题,有的时候重启电脑、IP 改变、程桌面卡死、网络中断或者点击 Fullscreen
,Fit to window size
时(如下图所示,笔者使用的是 MobaXterm 的 rdp session 进行远程,Windows 自带的 mstsc
即远程桌面连接功能也可利用 xrdp 进行远程),会进入到另一个空的会话 (session) 中,东西全都不见了 (原来会话的进程依旧在运行)。
- 解决方法
- 方法一
[2] 给出了一个方法,关闭远程窗口后再重新登录时,选择Reconnect选项后再登录,此时即可恢复上一次的远程会话。
但是这种方法在 MobaXterm 的 rdp session 不太实用,适合于Windows 自带的 mstsc
即远程桌面连接功能,而且登录过程十分繁琐。
- 方法二
[3] 给出了另一个方法,通过设置port=“曾经使用的会话的端口号” 来实现恢复登录曾经使用的会话。
但是此方法登录过程也是比较繁琐,并且一般人不会去记住曾经使用的会话的端口号,去查询也挺麻烦,如果是多人使用可以采取此种方案。
- 个人方法
根据个人的使用习惯,xrdp 远程桌面为个人使用,需要在不同电脑不同情况下都远程登录使用同一个会话 (session) ,借鉴上面两种方法,方法如下:
-
首先连接时观察连接时的端口(port):
可以看到此时的会话端口号为:5910
,后面我们将一直登录此会话。 -
在命令行中运行:
sudo vim /etc/xrdp/xrdp.ini
修改
/etc/xrdp/xrdp.ini
文件(按i
进入编辑模式,修改后按esc
退出编辑模式,输入:wq
即可保存离开) -
修改的地方为:
将 [xrdp1] 下的port
的值改为步骤 1 中对应的端口号,此处即为 “5910”。 -
重启 xrdp,即在命令行下输入:
sudo service xrdp restart
-
重新远程连接,此时登录界面变为:
直接进入了端口号为5910
的会话,且不管怎么变,甚至新开一个连接都只会进入到这个会话中。
- 会话 (session)设置
如果要修改会话 (session) 的设置,可以修改 xrdp 的 sesman.ini
配置文件。
进入 sesman.ini
文件的命令为:
sudo vim /etc/xrdp/sesman.ini
结果为:
[Globals]
ListenAddress=127.0.0.1
ListenPort=3350
EnableUserWindowManager=1
UserWindowManager=startwm.sh
DefaultWindowManager=startwm.sh
[Security]
AllowRootLogin=1
MaxLoginRetry=4
TerminalServerUsers=tsusers
TerminalServerAdmins=tsadmins
[Sessions]
X11DisplayOffset=10
MaxSessions=10
KillDisconnected=0
IdleTimeLimit=0
DisconnectedTimeLimit=0
[Logging]
LogFile=/var/log/xrdp-sesman.log
LogLevel=DEBUG
EnableSyslog=0
SyslogLevel=DEBUG
[X11rdp]
param1=-bs
param2=-ac
param3=-nolisten
param4=tcp
[Xvnc]
param1=-bs
param2=-ac
param3=-nolisten
param4=tcp
param5=-localhost
param6=-dpi
param7=96
主要是 [Session]
下进行修改。其中常用的设置有:
MaxSessions=10
代表最大会话数为10,如果要改变最大会话数可以修改这个地方;KillDisconnected=0
表示是否立即关闭断开的连接,如果为1
则表示断开连接后会自动注销,我们如果想要断开后会话进程依旧运行可以设置此处为0
。
其他的参数的意义可以参考 [4] 这篇文章。