用Windows的遠端桌面操作Linux——xrdp與VNC Server搭配
在之前我介紹過用VNC Server做到遠端連線的功能,但老實說,這VNC遠端桌面實在是不太好用,不僅操作上總是會有延遲的感覺,更讓人頭痛的是,VNC Server免費版本是沒有加密功能,很容易遭人竊取!
在網路上找來找去,總算找到一個解決方案:xrdp,開放原始碼的遠端桌面通訊協定(remote desktop protocol)伺服器。
使用xrdp,你就可以用Windows上的「遠端桌面連線」來看到Linux上的桌面喔!
網路上很多人都是用Ubuntu的apt-get來安裝xrdp,但這對RedHat家族的CentOS來說可就沒有apt-get這個方便的工具了。因此這一篇則是記錄著在CentOS 4.3上安裝設定xrdp與vnc server的方法,可惜最後我無法開機自動啟動VNC Server,這部份就得手動用SSH來開啟了。
1. 安裝xrdp
CentOS要安裝xrdp可以用簡單的rpm來安裝。請到DAG: xrdp RPM packages for Red Hat, CentOS and Fedora裡面下載xrdp-0.4.0-1.rh9.rf.i386.rpm(注意到自己OS的版本)。
執行rpm安裝指令:
# rpm -ivh xrdp-0.4.0-1.rh9.rf.i386.rpm
這個rpm檔案安裝完畢之後,大部分設定檔是擺在「/etc/xrdp/」之中,在本文裡面我們並沒有特別要去變動的設定,在這邊就只稍微提一下而已。
2. 啟動xrdp,並設定開機自動啟動
xrdp啟動指令如下:
# /etc/rc.d/init.d/xrdp_control.sh start
最後的「start」改用「stop」跟「restart」則會是停止、重新啟動的指令。
到這裡為止,你已經可以用遠端桌面來連到該伺服器了,但還不能順利執行遠端桌面喔。
為了讓伺服器在開機時就自動啟用xrdp,我們得要設定/etc/rc.local。編輯/etc/rc.local:
# vim /etc/rc.local
在最後加入以下指令
/etc/rc.d/init.d/xrdp_control.sh start
這樣開機就會自動啟動xrdp了。
p.s. 我後來在CentOS 5 Final上面安裝rpm檔案,卻會套件相依性的錯誤。用yum install那些套件之後,在安裝rpm,卻也會有錯誤訊息,而且到最後找不到xrdp_control.sh的位置。總之就是安裝失敗,真是讓人遺憾。
3. 用VNC Server來登入遠端桌面
xrdp只是一個通訊協定,真正進行遠端桌面的還得依賴其他軟體,在此我們使用的是VNC Server。
VNC Server的啟動與設定方法我在之前VNCserver初始設定與自動啟動裡面有敘述過,這邊再簡單把作法帶過:
- 以root修改vncservers啟動設定:
# vim /etc/sysconfig/vncservers
如果你要以dspace帳號登入,登入桌面為1024x768,那麼加入以下設定:VNCSERVERS="1:dspace"
VNCSERVERARGS[1]="-geometry 800x600" - 以root啟動vncserver
# /etc/init.d/vncserver start
- 切換到dspace帳號
# su dspace
執行vncpasswd來設定密碼#vncpasswd
修改~/.vnc/xstartup (如果沒有這個檔案,那代表之前2個步驟沒有完成)
Password: //輸入 VNC 密碼
Verify: //再輸入一次 VNC 密碼以確認# vim ~/.vnc/xstartup
該檔案的內容如下,請將SESSION_MANAGER與exec /etc/X11/xinit/xinitrc開頭的#註解拿掉,其他行則加上註解。參考如下:#!/bin/sh
# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc
#[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
#[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
#xsetroot -solid grey
#vncconfig -iconic &
#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#twm & - 回到root
# exit
重新啟動VNC Server# /etc/init.d/vncserver restart
修改/etc/rc.local,把啟動的命令加進去# vim /etc/rc.local
在最後加入以下指令/etc/init.d/vncserver start
這樣就大功告成了。而VNC Server預設是會被防火牆擋住,所以只能靠xrdp進到本機端來連線。
根據之前在CentOS 5 Final安裝VNC Server的經驗,照理說在/etc/rc.local增加「service vncserver start」的指令應該就能夠開機自動啟動VNC Server,但嘗試多種設定方法之後依然失敗。VNC Server有在執行中,但並沒辦法開啟遠端桌面。
因此最後我的解決方案是,在需要用遠端桌面的時候,先以SSH登入Linux「service vncserver start」,再用遠端桌面登入Linux。
4. 用Windows的遠端桌面連到Linux
「遠端桌面連線」通常在「開始→所有程式(程式集)→附屬應用程式→通訊→遠端桌面連線」可以找到。
請在「電腦」的地方輸入該伺服器的IP或Domain Name,按下「連線」。
使用者名稱跟密碼隨便輸入,按下「確定」。
Module選擇「console」(本機操作),密碼則輸入在設定vncpasswd時的密碼。按下ok。
如果沒有出現錯誤訊息的話,那就可以順利進入到Linux的桌面囉!
如果出現error - connect problem,那得要用SSH登入Linux將vncserver restart囉。
這一篇從昨天晚上寫到今天下午,而且還不算是很完美的解決方案,有點讓人灰心啊。
厲害
回覆刪除我上次搞超久的都弄不好,我是裝在ubuntu上,看來我應該是vnc那邊沒設好,不過我已經把ubuntu移除了T_T
事後我看看,好像還是沒有完全搞定
回覆刪除有些電腦連線會出現問題,有些不會
很怪
似乎是跟Windows遠端桌面的版本有關
回覆刪除在安裝Windows SP3以前使用的版本可以連線,像是5.2版本就可以
可是升級之後改用遠端桌面6.0版本,就不能連了。
cent5上裝了xrdp-0.4.0-1.e15.rf
回覆刪除利用rpm -ql xrdp
可以看到
/usr/share/doc/xrdp-0.4.0/xrdp_control.sh
/usr/share/doc/xrdp-0.4.0/xrdp_control.sh
另外,也有
/usr/share/doc/xrdp-0.4.0/install.txt
可參考.
作者已經移除這則留言。
回覆刪除但是xrdp只支援rdpv4,
回覆刪除利用vista等新版的rdpv6連入
會出現協定錯誤,無法成功訊息.
原來如此,難怪我使用Windows XP把遠端桌面升級過後也沒辦法連回XRDP的電腦。
回覆刪除稍微找了一下XRDP的資訊,似乎並沒有提到RDPv6的解決方案。
到頭來我還是回頭使用VNC了orz
感謝您的告知!真的是很有用的資訊!
towns使用Fedora 14安裝xrdp,並不需要啟動vnc server,就可以用逺端桌面登入了呢!
回覆刪除讚ㄛ!
回覆刪除XRDP 無法穿過防火牆連到外面的linux
回覆刪除是比較可惜的地方
To Benson:
回覆刪除可以考慮使用TeamViewer的Linux版
http://www.teamviewer.com/zhtw/download/index.aspx
使用方式跟Windows很像,也很實用呢
其實內網來說
回覆刪除VNC連Linux是很順的
To Facemaskman:
回覆刪除我記得當初就是用內部的區域網路在測試,但跟RDP比起來,還真的不太流暢。
現在其實不會了說~~
回覆刪除當時有可能會是因為內部路由器設定的問題
或是硬體有誤所以跑起來不順暢
或著可能是老電腦的關係吧,都快四年以前的事情了。
回覆刪除這篇好久了XD
回覆刪除目前用起來的一些心得:
(CentOS 6.7, xrdp 0.6.1 from EPEL)
1. session不能重連
因為預設安裝是VNC底, 每次連進去他就開一個新的VNC session. 這樣很難用...
似乎可以做到連線時會問session號碼, 還需要測試.
xrdp可以選用x11rdp底層, 不過在CentOS上還沒有裝起來過.
2. 多重使用者OK
我的用途是要給多人同時操作, 就我的理解, Linux上的Teamviewer是直接去抓console吧? 所以不能多人連線?
To Mike Chen,
回覆刪除沒想到這篇還有人在看
現在大家都想要做DaaS,所以希望多人同時連一台電腦
但是光是這樣子還是很難做到
我認為可能要改用CaaS的方式即時建立容器來讓人連線,這樣比較有用吧
Unix家族這塊做的都很爛啊,雖然不一定是壞事,但其實用NAS那套webUI方案其實更好一點,要不就只能用很沒效率的SSH
回覆刪除