本文首發於爛泥行天下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
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,以下:
注意:圖中標記出來的端口號
遠程桌面鏈接進入後,打開終端建立一個文件test,以下:
test建立完畢後,而後關閉這個遠程桌面鏈接。
注意:爲了下面的演示效果,建立該文件的界面,我沒有關閉。
此時咱們再經過ssh登陸進入ubuntu,查看此時vncserver所使用的端口,以下:
netstat –tunlp
ps -ef |grep 1673
經過上圖,咱們能夠知道目前這個會話,vncserver使用的是5912這個端口。
如今咱們修改下xrdp的配置文件xrdp.ini,以下:
sudo vi /etc/xrdp/xrdp.ini
以上修改完畢後,咱們要從新啓動xrdp,以下:
sudo /etc/init.d/xrdp restart
重啓完畢後,咱們再次鏈接遠程桌面,以下:
注意:上圖中的port端口,咱們填寫的是5912這個端口,也就是上邊那個遠程桌面會話vncserver所使用的端口。
遠程桌面進去後,以下:
經過上圖,咱們能夠很明顯的看出,咱們確實鏈接到了上次本關閉的那個遠程桌面界面。
PS:若是不知道每一次的鏈接的端口的話,咱們也能夠經過上查看用戶的xrdp日誌進行查看。具體步驟,以下:
sudo cat /var/log/xrdp-sesman.log
經過xrdp日誌查看用戶啓動xrdp的pid。
而後再根據pid,查看啓動的xrdp進程,以下:
ps -ef |grep 1693
經過上圖,基本能夠看出此xrdp進程所使用的是5912端口。
爲了更清晰的確認端口號,使用netstat命令,以下:
netstat -tunlp
經過上圖,能夠很明顯的看出pid爲1693的xrdp,使用的是5912 端口。
到此有關ubuntu遠程桌面會話的問題所有結束。