December 29, 2011

在 Android 上運作 X server

在 Android 上運作 X11 server 的想法大概從 2009 年始,就有頗多單位陸續實現,不過大部分都是 close source。整個 X11 若要在 Android bionic (libc) 上完整編譯,會面臨頗多問題,比方說缺少 SysV shm 的支援。而 Tom Marshall 則貢獻了一個 open source 的實做,專案暫時命名為 "android-x-server",完全以 Java 搭配 Android framework 來開發,程式碼維護於 github [android-x-server]。目前還在開發初期,不過大致能運作了。

下圖是我在 Nexus S 手機先執行 [android-x-server] (X server),然後接受 xlogo 的顯示要求 (X client):

之間的通訊方式當然是 X protocol,而在 Android 環境下,我們可透過 adb 的 port forwarding,指定將 host 端的特定 port 對應到 X server 所 listen 的 port 6000,操作方式很簡單,就這麼一行:
$ adb forward tcp:6099 tcp:6000
上述指令將 host 端的 port 6099 (也就是 DISPLAY=:99) 對應到 Android 手機上的 port 6000,自然就是 X server 接受 X protocol 之處,以下是參考的 xdpyinfo 輸出:
$ DISPLAY=:99 xdpyinfo 
name of display:    :99
version number:    11.0
vendor string:    My Vendor
vendor release number:    0
maximum request size:  262140 bytes
motion buffer size:  0
bitmap unit, bit order, padding:    32, LSBFirst, 32
image byte order:    LSBFirst
number of supported pixmap formats:    6
...
screen #0:
  dimensions:    480x800 pixels (50x84 millimeters)
  resolution:    244x242 dots per inch
  depths (2):    24, 32
  root window id:    0x5
  depth of root window:    24 planes
  number of colormaps:    minimum 1, maximum 1
  default colormap:    0x4
  default number of colormap cells:    256
  preallocated pixels:    black 0, white 16777215
  options:    backing-store NO, save-unders NO
整個實做非常精簡,但對於研究 X protocol 與 X server 是極好的參考項目。
由 jserv 發表於 December 29, 2011 9:19 PM
迴響
發表迴響









記住我的資訊?