本文由秀依林楓提供友情贊助,首發于爛泥行天下
在上一篇文章中,我們講解了如何給ubuntu安裝遠程桌面及其配置,這篇文章我們再來講解下有關ubuntu遠程桌面會話的問題。
一、問題描述
在我們使用ubuntu遠程桌面時,會經常遇到這樣的問題。在連接遠程桌面時,我打開的是會話A,我在會話A下處理一些工作的事情。由于自己不小心把這個遠程桌面給關閉了,或者今天工作完畢關閉該遠程桌面會話。等再進行連接遠程桌面時,發現ubuntu會給出一個新的遠程桌面會話B,而不是我們剛剛連接過的那個會話A,或者是昨天連接的那個會話A。
以上這個問題,我們在實際的工作中是經常遇到的。
那么我們該如何解決這個問題呢?或者換一種說法,我們該如何再次連接到上一次的遠程桌面會話A呢?
注意:本篇文章中的ubuntu遠程桌面全部是基于XRDP協議。
二、ubuntu遠程桌面的原理
要解決以上的問題,我們就要了解基于xrdp協議的ubuntu遠程桌面與vncserver之間的關系。
其實有關ubuntu遠程桌面的原理,我們在上一篇文章《爛泥:學習ubuntu遠程桌面(一):配置遠程桌面》中已經提到過一些,基于XRDP方式的遠程桌面連接是需要vncserver的支持。
為什么需要vncserver的支持呢?是因為我們在通過3389端口連接ubuntu遠程桌面時,xrdp會把所有通過3389端口數據都轉發到vncserver的端口上,同時vncserver只監聽127.0.0.1這個地址,所以vncserver的端口是不對外開放的。
除此之外,vncserver還為每一次遠程桌面會話分配一個系統端口,注意這個端口很重要。
如果我們要連接上一次的遠程桌面會話A的,我們只需要連接會話A所在vncserver端口即可。
那么我們如何才能連接和查看這個vncserver端口呢?這就需要我們修改xrdp的相關配置。
為什么要講解這個原理?是因為只有我們理解了這個原理,那么我們才能很容易的解決ubuntu遠程桌面會話的問題,而且也能很容易的理解,我們對xrdp配置文件的相關修改。
三、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 系統日志記錄等級
四、連接遠程桌面
現在我們來通過遠程桌面來連接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遠程桌面會話的問題全部結束。
新聞熱點
疑難解答
圖片精選