2010年6月4日

在 Linux 桌面嵌入遠端 Windows 視窗

以 rdesktop 指令遠端桌面連線 Windows 作業系統, 透過 Windows 主機上的 SeamlessRDP 無縫桌面程式執行 Windows 軟體, 感覺就像在 Linux 桌面直接操作 Windows 視窗.

環境: openSUSE 11.2 LxDE Desktop, Windows XP

Step 1. 讓 Windows 背景處理遠端桌面連線

作法請參閱本站: 讓 XP 允許遠端桌面多重登入
並加入幾個使用者帳號作為遠端桌面連線使用
記得開放防火牆允許遠端桌面連線

Step 2. 在 Windows 系統安置 SeamlessRDP 檔案

SeamlessRDP 官網: http://www.cendio.com/seamlessrdp/
SeamlessRDP 檔案: http://www.cendio.com/seamlessrdp/seamlessrdp.zip
將 seamlessrdp.zip 解壓縮到 C:\seamlessrdp 目錄下

Step 3. 在 Linux 系統以 rdesktop 指令 (v1.5.0 以上) 執行以下指令進行無縫連線

rdesktop -A -s "c:\seamlessrdp\seamlessrdpshell.exe notepad" 192.168.1.1 -u 使用者名稱 -p 密碼

其中 192.168.1.1 是 Windows 主機的 IP Address
不過一個 rdesktop 連線只能 seamlessrdpshell.exe 一個 Windows 程式, 若要同時使用多個程式可以:

  1. 同一主機連入不同帳號
  2. 遠桌連線多部主機
  3. 把 Windows 桌面整個嵌入 Linux 桌面

執行結果範例:

↓ 分別連線到不同 Windows 電腦啟動 IE 瀏覽器, 讓 IE6、IE8 同台演出的有趣畫面

↑ rdesktop 加上 -r sound:local 參數就能讓聲音在本地端 (Linux Host) 播放. 上圖是在 Linux 桌面收聽 hifree 線上音樂

-

把 Windows 桌面整個嵌入 Linux 桌面的方法

若要將 Widnows 工作列嵌入 Linux 桌面, 可先遠桌 Windows 執行 regedit, 進行以下操作:

HKEY_CURRENT_USER -> Software -> Microsoft -> Windows -> CurrentVersion -> Policies -> Explorer

新增一 DWORD 值, 名稱: NoDesktop, 數值資料: 1

登出後以下列方式連入:

rdesktop -A -s "c:\seamlessrdp\seamlessrdpshell.exe explorer" 192.168.1.1 -u 使用者名稱 -p 密碼 -r sound:local

執行結果範例:

-

seamlessrdp 已知問題

  1. 無法操作 cmd.exe 與 cygwin.exe 這種命令提示字元視窗, 就算嵌入整個 Windows 桌面也是一樣. 若 rdesktop 直接呼叫semlessrdpshell.exe 執行 cmd.exe, 執行完後就像是當掉沒有回應, 此時 Ctrl + C 中斷 rdesktop 程序會造成遠桌 session 殘留在 Windows 主機上. 此外, .bat 批次檔因透過 cmd 執行, 所以也有同樣的問題. 對於需要使用到 cmd、cygwin 的情況下, 還是得用傳統遠桌連線的方式來操作.
  2. 無縫執行 hifree.exe 這種關閉視窗之後還會殘留 tray icon (系統狀態列小圖示) 的程式時, 關閉視窗後 rdesktop session 仍持續連線, Ctrl + C 中斷後再執行一次相同的無縫呼叫即無法作用.
  3. 看不到中文輸入法選字視窗, 對於需要選字的輸入法非常不方便.

-

解決 rdesktop session 殘留在 Windows 主機上的幾個方法

  1. 臨機操作 Windows 主機, 透過 "工作管理員" 將 rdesktop session 逐一刪除
  2. 臨機操作 Windows 主機, 在命令提示字元視窗執行:

    查看遠桌 session#
    0 是本機 session, 所以遠桌 session 一定是 1 以上的數字
    tasklist

    刪除所有 session# = 1 的程序
    taskkill /fi "session eq 1" /f

  3. 啟動 Windows 主機的 Telnet 服務, 開放 tcp 23 port 給 Linux Host, 從 Linux telnet 到 Windows 主機操作上述 task* 指令

-

參考資料: SeamlessRDP in Ubuntu 10.04

http://cha.homeip.net/blog/2010/06/2372.html

沒有留言:

發佈留言