2013年9月7日 星期六

解決「不能以 rdesktop 連接遠端的 VirtualBox 虛擬機」的問題

現在的 PC 運算能力遠超大部份人的日常需求,為充份利用 PC 的強大功能,安裝「虛擬機模擬器」是最近很盛行的電腦應用之一。若考慮『免費』、『開源碼』和『跨平台』則非 VirtualBox 莫屬,關於 VirtualBox (文中或稱 VBox) 的安裝和設定,請參考前面的發文:
當要連接遠端「電腦主機」中的「虛擬機」時(以兩部主電腦都為 Fedora 系統為例),有幾個方法(注意同一列中的數字順序)
連線方式虛擬機執行方式說 明
1. 以 VNC 連線至「遠端主機」2. 以 GUI 方式啟動 VBox 的虛擬機
3. 透過 VNC 操作 VBox 虛擬機
◎ 與在「本地電腦」的桌面使用 VBox 虛擬機的經驗類似。
◎ 因為是間接操作「虛擬機」,故反應略有延遲。
2. 以 VNC 或 RDP 連線至「虛擬機」1. 以 GUI 方式啟動 VBox 的虛擬機
3. 以 VNC 或 RDP 直接連接、操作虛擬機
◎ 需先設妥「虛擬機」之『遠端桌面』設定
◎「遠端電腦」為桌面環境,要耗用資源
◎ 以 VNC 或 RDP 連線後,「虛擬機」的操作與第一個方法的經驗類似。
◎ 因為是直接操作「虛擬機」,故反應較前一方法略快。
2. 以 VNC 或 RDP 連線至「虛擬機」1. 以命令 (SSH) 或網頁 (phpVirtualBox) 啟動 headless 模式的 VBox 虛擬機
3. 以 VNC 或 RDP 直接連接、操作虛擬機
◎ 需先設妥「虛擬機」之『遠端桌面』設定
◎「遠端主機」無桌面環境,較節省資源
◎ 以 VNC 或 RDP 連線後,「虛擬機」的操作與第一個方法的經驗類似。
◎ 因為是直接操作「虛擬機」,故反應較第一個方法略快。
1. 以文字(SSH)或網頁(phpVirtualBox)連線至「遠端電腦」
3. 以 VRDP 連接虛擬機的 VBox 『遠端顯示』
2. 以命令(SSH)或網頁(phpVirtualBox)啟動 headless 模式的 VBox 虛擬機
4. 以 VRDP 直接連接、操作虛擬機
◎「虛擬機」無需任何設定
◎ 一般「虛擬機」的主機多用此法,可保留較多的資源給虛擬機
◎ 以 VRDP 連線後,由虛擬機所見畫面與一般直接接電腦的螢幕相似。從開機到使用的過程都會顯示。

上表中第一、二欄的編號為該方法的連線操作步驟,RDP 是 Remote Desktop 的簡稱,而 VRDP 則是指 VirtualBox 修改過的 RDP。本文著重在第四個方法,即以 SSH 連線後,啟動 headless 模式的虛擬機,再以 VRDP 連線、使用虛擬機。
  以前用 VRDP 從「本地電腦」連線到「遠端電腦」上的 VirtualBox 虛擬機時,在「終端機」下這個命令
[SiB@Celeron-D ~]$ rdesktop 192.168.10.17:3389
就可以連線成功。上面命令中的 192.168.10.17 是「虛擬機」所在的「遠端電腦」之網路位址 (IP),而 3389 是「虛擬機」顯示的「遠端桌面」之埠號。最近在 Fedora 19 依這個命令連線時,卻出現錯誤訊息
[SiB@Celeron-D ~]$ rdesktop 192.168.10.17:3389
Failed to negotiate protocol, retrying with plain RDP.
WARNING: Remote desktop changed from 800x600 to 1366x656.
X Error of failed request:  BadWindow (invalid Window parameter)
    Major opcode of failed request:  18 (X_ChangeProperty)
    Resource id in failed request:  0x0
    Serial number of failed request:  38
    Current serial number in output stream:  43
判斷是因為新版 VirtualBox 的 VRDP 與 Fedora 內附的 rdesktop 水土不服。改用 VirtualBox 套件中所附的 rdesktop-vrdp 就可以解決問題了,完整步驟如下:

1. 虛擬機設定

「遠端電腦」的虛擬機要先設定開啟其『遠端顯示伺服器』的設定,由 VirtualBox 的管理員程式的選單,《設定值》→《顯示》→《遠端顯示》會出現一個設定視窗如下:
勾選【啟用伺服器】,在【伺服器埠】填入 3389 這是 RDP 的標準連接埠號,如果更改等一下連線時要注意。而【驗證方法】、【驗證逾時】和【多重連線】的設定以後再說明,在這裏先維持預設值。最後,按【確定】存入設定值,下次啟動虛擬機時就可以用 VRDP 遠端連線了。

注意一:更改上述的『遠端顯示』設定一定要重新啟動虛擬機,否則設定不會生效。
注意二:上例中的『伺服器埠』預設值為 3389,如果遠端的「主機電腦」是安裝 Windows 系統,這個預設值一定不能與遠端的 Windows 相同,否則連線不會成功。

2. 在「本地電腦」安裝 VirtualBox

在這個步驟安裝 VirtualBox 並不是為了在「本地電腦」執行虛擬機,而是為了使用其中的一個工具 rdesktop-vrdp。而且 rdesktop-vrdp 這個工具,在 RPM Fusion 的套件資料庫所收錄的 VirtualBox 套件中並不存在,需要由 VirtualBox.org 官網下載的才有。
  由官網安裝的命令如下:
[root@Celeron-D ~]# wget -P /etc/yum.repos.d/ http://download.virtualbox.org/virtualbox/rpm/fedora/virtualbox.repo
[root@Celeron-D ~]# yum install VirtualBox-4.2
上例中,第一個命令是由 VirtualBox 官網下載套件資料庫,第二個命令是安裝 VirtualBox 4.2 版。如果有安裝上的問題,可參考之前的發文

注意:官網下載安裝的 VirtualBox 才有 rdesktop-vrdp,由 RPM Fusion 下載的沒有。

3. 開啟「遠端電腦」中的虛擬機連線

若不想透過 VNC 開啟「遠端電腦」中的虛擬機,可用 SSH 連線到「遠端電腦」,在『命令提示』下這個命令
[SiB@Core-i7 ~]$ VBoxManage startvm VM_test --type=headless
其中 Test_iSCSI 是「遠端電腦」中的虛擬機的名稱,而 --type=headless 這個參數使得虛擬機啟動時不會在「主機電腦」建立『圖形化視窗』(即:無螢幕、無鍵盤、無滑鼠)。
  因此,當「遠端電腦」沒有啟動『桌面環境』時,若再使用 VRDP 連線,也能使用有『圖形化視窗』的「虛擬機」。

4. 與「遠端電腦」中的虛擬機連線

接下來就可以和「遠端電腦」中的虛擬機連線,命令如下:
[SiB@Celeron-D ~]$ rdesktop-vrdp 192.168.10.17:3389
其中 192.168.10.17 是「遠端電腦」的網路位址,而 3389 是虛擬機『遠端顯示伺服器』的埠號。

注意一:『網路位址』和『埠號』都是「遠端電腦」的,不是「虛擬機」內所安裝之系統的。
注意二:同一部「主機電腦」中同時開啟的「虛擬機」所用的埠號不可重覆

已測試版本:

  • 遠端主機:Fedora 19  +  VirtualBox 4.2.18  +  Extension Pack 
  • 虛  擬  機:Fedora 19  +  VirtualBox Guest Additions 4.2.18
  • 本地電腦:Fedora 19  +  VirtualBox 4.2.18

參考資料:

沒有留言:

張貼留言

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)