在我們使用ubuntu遠端桌面時,會經常遇到這樣的問題。在連接配接遠端桌面時,我打開的是會話a,我在會話a下處理一些工作的事情。由于自己不小心把這個遠端桌面給關閉了,或者今天工作完畢關閉該遠端桌面會話。等再進行連接配接遠端桌面時,發現ubuntu會給出一個新的遠端桌面會話b,而不是我們剛剛連接配接過的那個會話a,或者是昨天連接配接的那個會話a。
以上這個問題,我們在實際的工作中是經常遇到的。
那麼我們該如何解決這個問題呢?或者換一種說法,我們該如何再次連接配接到上一次的遠端桌面會話a呢?
<b>注意:本篇文章中的ubuntu遠端桌面全部是基于xrdp協定。</b>
要解決以上的問題,我們就要了解基于xrdp協定的ubuntu遠端桌面與vncserver之間的關系。
為什麼需要vncserver的支援呢?<b>是因為我們在通過3389端口連接配接ubuntu遠端桌面時,xrdp會把所有通過3389端口資料都轉發到vncserver的端口上,同時vncserver隻監聽127.0.0.1這個位址,是以vncserver的端口是不對外開放的。</b>
<b>除此之外,vncserver還為每一次遠端桌面會話配置設定一個系統端口,注意這個端口很重要。</b><b></b>
<b>如果我們要連接配接上一次的遠端桌面會話a的,我們隻需要連接配接會話a所在vncserver端口即可。</b>
那麼我們如何才能連接配接和檢視這個vncserver端口呢?這就需要我們修改xrdp的相關配置。
為什麼要講解這個原理?是因為隻有我們了解了這個原理,那麼我們才能很容易的解決ubuntu遠端桌面會話的問題,而且也能很容易的了解,我們對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配置檔案,内容如下:
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 系統日志記錄等級
現在我們來通過遠端桌面來連接配接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遠端桌面會話的問題全部結束。