2014年6月29日 星期日

解決「用 VRDP 連線 VirtualBox 虛擬機時,某些『控制鍵』不能作用」的問題

之前常透過「rdesktop-vrdp」連線、使用在「遠端主機」中執行的「虛擬機」(詳見之前的相關發文),回應的連線訊息中都有“ERROR: Failed to open keymap en-us”這個『鍵盤對應』錯誤訊息,
[SiB@Celeron-D ~]$ rdesktop-vrdp 192.168.10.17:3389
ERROR: Failed to open keymap en-us
雖然只有某些『控制鍵』(如:方向鍵、翻上頁、翻下頁、插入、刪除)不能正常作用,對大部份的其它操作並不影響。
  但是,就因為這些不正常動作,使得透過遠端使用「虛擬機」時,與在本機操作有許多不同。為了讓這些操作感覺相同,解決這個『鍵盤對應』錯誤,也是一直列在我的『待辦清單』中。
  偏偏想找這問題的解決辦法時,查不到相關資訊;在找其它問題的解法時,它反而就出現了,趕緊將它拿來試試。

1. 用「strace」記錄程式執行時,所調用的系統函式

參考的文章中使用「strace」追蹤、顯示程式執行時所調用的系統函式,
[SiB@Celeron-D ~]$ strace -o vrdp.txt rdesktop-vrdp 192.168.10.17:3389
ERROR: Failed to open keymap en-us
上例中,是將執行過程中系統函式調用記錄存於 vrdp.txt 檔案中。在關閉「rdesktop-vrdp」之後,再從 vrdp.txt 檔案中過濾出與 keymap 有關的記錄,
[SiB@Celeron-D ~]$ grep keymap vrdp.txt
open("/home/Sib/.rdesktop/keymaps/zh-tw", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/opt/VirtualBox/rdesktop-vrdp-keymaps/zh-tw", O_RDONLY) = -1 ENOENT (No such file or directory)
open("keymaps/zh-tw", O_RDONLY)         = -1 ENOENT (No such file or directory)
open("/home/SiB/.rdesktop/keymaps/zh", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/opt/VirtualBox/rdesktop-vrdp-keymaps/zh", O_RDONLY) = -1 ENOENT (No such file or directory)
open("keymaps/zh", O_RDONLY)            = -1 ENOENT (No such file or directory)
open("/home/SiB/.rdesktop/keymaps/en-us", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/opt/VirtualBox/rdesktop-vrdp-keymaps/en-us", O_RDONLY) = -1 ENOENT (No such file or directory)
open("keymaps/en-us", O_RDONLY)         = -1 ENOENT (No such file or directory)
write(2, "Failed to open keymap en-us\n", 28) = 28
從上面的記錄中可以看到,「rdesktop-vrdp」搜尋『鍵盤對應』表的預設路徑,是先設向系統目錄「/opt/VirtualBox/rdesktop-vrdp-keymaps」,再使用者的個人目錄「/home/SiB/.rdesktop/keymaps」。有了這個資訊,要解決『找不到鍵盤對應」這個問題就簡單多了。

2. 加入「keymaps」的鏈結

既然知道問題是『鍵盤對應表』的搜尋路徑問題,就建立一個『鏈結』將搜尋路徑導向正確的『鍵盤對應表』目錄。修改的方法有二:

方法一:由系統管理者設定

系統管理者的設定比較簡單,先切換成 root 身份再下命令建立新鏈結
[root@Celeron-D ~]# ln -s /usr/share/virtualbox /opt/VirtualBox
設定完成後,所有使用者都同時解決這個問題。

方法二:由使用者個別設定

若無法由系統管理者設定時,使用者可以經由以下設定,解決自已的問題。
[SiB@Celeron-D ~]$ ln -s /usr/share/virtualbox/rdesktop-vrdp-keymaps ~/.rdesktop/keymaps

已測試版本:

  • Fedora: 19

參考資料:

沒有留言:

張貼留言

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