烂泥:学习ubuntu远程桌面(二):远程桌面会话管理

本文首发于烂泥行天下ubuntu

在上一篇文章中,咱们讲解了如何给ubuntu安装远程桌面及其配置,这篇文章咱们再来说解下有关ubuntu远程桌面会话的问题。缓存

1、问题描述ssh

在咱们使用ubuntu远程桌面时,会常常遇到这样的问题。在链接远程桌面时,我打开的是会话A,我在会话A下处理一些工做的事情。因为本身不当心把这个远程桌面给关闭了,或者今天工做完毕关闭该远程桌面会话。等再进行链接远程桌面时,发现ubuntu会给出一个新的远程桌面会话B,而不是咱们刚刚链接过的那个会话A,或者是昨天链接的那个会话A。ide

以上这个问题,咱们在实际的工做中是常常遇到的。学习

那么咱们该如何解决这个问题呢?或者换一种说法,咱们该如何再次链接到上一次的远程桌面会话A呢?加密

注意:本篇文章中的ubuntu远程桌面所有是基于XRDP协议。spa

2、ubuntu远程桌面的原理debug

要解决以上的问题,咱们就要了解基于xrdp协议的ubuntu远程桌面与vncserver之间的关系。rest

其实有关ubuntu远程桌面的原理,咱们在上一篇文章《烂泥:学习ubuntu远程桌面(一):配置远程桌面》中已经提到过一些,基于XRDP方式的远程桌面链接是须要vncserver的支持日志

为何须要vncserver的支持呢?是由于咱们在经过3389端口链接ubuntu远程桌面时,xrdp会把全部经过3389端口数据都转发到vncserver的端口上,同时vncserver只监听127.0.0.1这个地址,因此vncserver的端口是不对外开放的。

除此以外,vncserver还为每一次远程桌面会话分配一个系统端口,注意这个端口很重要。

若是咱们要链接上一次的远程桌面会话A的,咱们只须要链接会话A所在vncserver端口便可。

那么咱们如何才能链接和查看这个vncserver端口呢?这就须要咱们修改xrdp的相关配置。

为何要讲解这个原理?是由于只有咱们理解了这个原理,那么咱们才能很容易的解决ubuntu远程桌面会话的问题,并且也能很容易的理解,咱们对xrdp配置文件的相关修改。

3、XRDP配置文件详解

XRDP配置文件有两个,分别是/etc/xrdp目录下的xrdp.ini和sesman.ini文件。

xrdp.ini配置文件,关键部分在globals,具体内容以下:

[globals]

bitmap_cache=yes 位图缓存

bitmap_compression=yes 位图压缩

port=3389 xrdp监听的端口(重要)

crypt_level=low 加密程度(low为40位,high为128位,medium为双40位)

channel_code=1

max_bpp=24 XRDP最大链接数

[xrdp1]

name=sesman-Xvnc XRDP的链接模式

lib=libvnc.so

username=ask

password=ask

ip=127.0.0.1

port=-1

注意:在xrdp.ini配置文件中,须要注意max_bpp参数,这参数定义XRDP最大的链接数。

要解决本文所提出的问题,咱们只须要修改sesman-Xvnc模式中的port参数。修改后的prot参数,以下:

cat /etc/xrdp/xrdp.ini

clip_p_w_picpath001

sesman.ini配置文件,内容以下:

[Globals]

ListenAddress=127.0.0.1 监听ip地址(默认便可)

ListenPort=3350 监听端口(默认便可)

EnableUserWindowManager=1 1为开启,可以让用户自定义本身的启动脚本

UserWindowManager=startwm.sh

DefaultWindowManager=startwm.sh

[Security]

AllowRootLogin=1 容许root登录

MaxLoginRetry=4 最大重试次数

TerminalServerUsers=tSUSErs 容许链接的用户组(若是不存在则默认所有用户容许链接)

TerminalServerAdmins=tsadmins 容许链接的超级用户(若是不存在则默认所有用户容许链接)

[Sessions]

MaxSessions=10 每一个用户最大会话数

KillDisconnected=0 是否当即关闭断开的链接(若是为1,则断开链接后会自动注销)

IdleTimeLimit=0 空闲会话时间限制(0为没有限制)

DisconnectedTimeLimit=0 断开链接的存活时间(0为没有限制)

[Logging]

LogFile=./sesman.log 登录日志文件

LogLevel=DEBUG 登录日志记录等级(级别分别为,core,error,warn,info,debug)

EnableSyslog=0 是否开启日志

SyslogLevel=DEBUG 系统日志记录等级

4、链接远程桌面

如今咱们来经过远程桌面来链接ubuntu,以下:

clip_p_w_picpath002

注意:图中标记出来的端口号

远程桌面链接进入后,打开终端建立一个文件test,以下:

clip_p_w_picpath003

test建立完毕后,而后关闭这个远程桌面链接。

注意:为了下面的演示效果,建立该文件的界面,我没有关闭。

此时咱们再经过ssh登陆进入ubuntu,查看此时vncserver所使用的端口,以下:

netstat –tunlp

ps -ef |grep 1673

clip_p_w_picpath004

经过上图,咱们能够知道目前这个会话,vncserver使用的是5912这个端口。

如今咱们修改下xrdp的配置文件xrdp.ini,以下:

sudo vi /etc/xrdp/xrdp.ini

clip_p_w_picpath005

以上修改完毕后,咱们要从新启动xrdp,以下:

sudo /etc/init.d/xrdp restart

clip_p_w_picpath006

重启完毕后,咱们再次链接远程桌面,以下:

clip_p_w_picpath007

注意:上图中的port端口,咱们填写的是5912这个端口,也就是上边那个远程桌面会话vncserver所使用的端口。

远程桌面进去后,以下:

clip_p_w_picpath008

经过上图,咱们能够很明显的看出,咱们确实链接到了上次本关闭的那个远程桌面界面。

PS:若是不知道每一次的链接的端口的话,咱们也能够经过上查看用户的xrdp日志进行查看。具体步骤,以下:

sudo cat /var/log/xrdp-sesman.log

clip_p_w_picpath009

经过xrdp日志查看用户启动xrdp的pid。

而后再根据pid,查看启动的xrdp进程,以下:

ps -ef |grep 1693

clip_p_w_picpath010

经过上图,基本能够看出此xrdp进程所使用的是5912端口。

为了更清晰的确认端口号,使用netstat命令,以下:

netstat -tunlp

clip_p_w_picpath011

经过上图,能够很明显的看出pid为1693的xrdp,使用的是5912 端口。

到此有关ubuntu远程桌面会话的问题所有结束。