最近更新: 2011-06-02

Matchbox keyboard

因為工作需要,我需要評估一些平板電腦相關的應用。因此我接觸過 MeeGo ,使用過它提供的幾種虛擬鍵盤(軟體鍵盤),例如 fvkbd, meegotouch-inputmethodkeyboard 。更進一步地,當我嘗試著在 Debian/Ubuntu 系統上自訂一個平板桌面環境時,也需要一個虛擬鍵盤。而 Ubuntu 套件庫中就提供了 Matchbox keyboard

Matchbox keyboard 並不是功能最多的虛擬鍵盤。但它應該是結構最簡單的一套,也提供了設定鍵盤佈局的功能。而且 X window 上的其他虛擬鍵盤的原理跟 matchbox keyboard 大同小異。如果想要嘗試客製化一個具有虛擬鍵盤的操作環境,可以 matchbox keyboard 為起點。等到產品化時,我們隨時可以用其他同樣基於 X 協定的虛擬鍵盤替換它。

Install

Debian/Ubuntu 提供的 Matchbox keyboard 相關套件為: matchboxkeyboard, libfakekey0 。 在自訂操作環境時,你也需要 libfakekey-dev 套件,以便重新編譯 Matchbox keyboard 的源碼。

你可以從 Matchbox keyboard 官方網頁上取得其源碼。或是從 Ubuntu 源碼庫中取得: matchbox-keyboard_0.1+svn20080916.orig.tar.gz

我建議先安裝套件庫提供的 Matchbox keyboard 套件,然後再自行編譯源碼替換。

Fix embedding bug

當你配合 --xid 參數執行 matchbox-keyboard 程式時,它或許不會正確地呈現鍵盤內容。這似乎是個 bug。 若你碰到這個狀況時,需要修改 matchbox keyboard 的源碼修正它。編輯 src/matchbox-keyboard.c ,將下列所示的兩行程式碼註消。

  /*
  if (want_embedding)
    mb_kbd_ui_set_embeded (kb->ui, True);
  */
Build

我使用取自 Ubuntu 源碼庫的源碼編譯。在 matchbox keyboard 源碼的根目錄下進行下列操作即可。

 $ ./autogen.sh 
 $ ./configure --prefix=/usr
 $ make
 $ sudo make install-exec

最後一步將安裝 matchbox-keyboard 到 /usr/bin/matchbox-keyboard.

基本控制範例

1. 執行 matchbox-keyboard,並配合 --xid 參數。 它會列出此虛擬鍵盤所屬的視窗容器的 XID,你需要這個 XID 才能從外部控制虛擬鍵盤的位置。

 $ matchbox-keyboard --xid
 1234567

2. 以 python 為例,啟動 python 交談環境,輸入下列敘述。你將可觀察到虛擬鍵盤被控制的情形。


import gtk

xid = 1234567  # the XID of matchbox-keyboard


foreign_window = gtk.gdk.window_foreign_new(xid)

foreign_window.set_keep_above(True)

foreign_window.show()

foreign_window.move(200,200)

foreign_window.set_decorations(0) # disable all decorations.


foreign_window.hide()

matchbox keyboard control demo

在 matchbox keyboard 源碼中,還提供了一個範例: examples/matchbox-keyboard-gtk-embed.c 。 此範例展示如何以內嵌形式,利用 gtk-event-box 控制項,將 matchbox-keyboard 嵌入你的視窗軟體的佈局中。

各位可以瀏覽 screenshots 的下半頁,觀看它實際運用的樣子。

樂多舊網址: http://blog.roodo.com/rocksaying/archives/15747723.html