X Window


簡介

[X 的架構] 一個執行當中的 X 視窗環境包括 server 與 clients 兩部分. 不妨把 X server 理解成 [顯示卡+滑鼠+鍵盤] 的驅動程式, 真正負責在螢幕上畫點/畫線/著色, 同時也接受使用者的輸入. 在 /usr/X11R6/bin 底下有很多驅動不同顯示卡的 X servers, 叫做 XF86_*. 而 /etc/X11/X 則根據你的硬體, 指向其中的一個 X server.

Clients 則是我們一般看到的應用程式, 例如 xpaint, xplaymidi 等等.

其中有一個特別的 client 叫做 window manager, 負責管理桌面, 以及為所有其他 clients 的視窗加上外框. 沒有 window manager 的話, 其他 clients 用起來會很不方便, 連移動視窗都會有問題. 一個螢幕上同時最多只能有一個 window manager 在執行.

最簡單的狀況下, server 與所有的 clients 都在同一部機器上執行. 但是其實 X server 與 X clients 也可以分別位於網路的兩頭, 因而增加了許多 MS Windows 沒有的彈性.

一般通用的命令列選項

大部分的 X 應用程式都認得以下命令列選項:

  1. -title 顯示在視窗抬頭的字串
  2. -bg 背景顏色
  3. -fg 前景顏色
  4. -font 使用那一套字形
  5. -geometry 視窗的大小及位置
  6. -display 這個程式要丟到那部機器的螢幕上去顯示. 見 遠端執行 一節.
  7. -xrm 設定 resource. 見 resource 一節.

顏色可以用名稱表示 (見 /usr/X11R6/lib/X11/rgb.txt) 或用 "#hhhhhh" 表示 (每兩位十六進位數 hh 分別代表 red, green, blue 的成分). 大小寫不分.

視窗大小可以用 dddxddd 表示, 其中的 ddd 通常以 pixel 為單位; 但像是 xterm 或 rxvt 這類程式, 其單位則為字元數. 視窗位置可以用 +ddd+ddd 表示, 左上角為 +0+0; 若將 + 號改為 - 號, 則表示從另一側數過來, 例如右上角為 -0+0. 大小與位置可以串起來一起寫.

例: xeyes -title beholder -fg blue -geometry 80x50+0-0 &

常用應用程式

用 Resources 設定應用程式

改變你的 .xinitrc 與 window manager

Window Managers for X

執行遠端的 X Clients

如前所述, X server 與 X clients 其實可以不在同一部機器上跑. 假設你眼前手邊有一部古董級的 386 (CPU 頻率 33 MHz, 夠慢了吧?) 硬碟只有 800MB, 而它的 ip 是 163.17.27.128 ; 又假設遠端有一部速度超快, 硬碟容量超大, 安裝了很多最新軟體的主機, 它的 ip 是 penguin.im.cyut.edu.tw. 我們當然希望可以在 penguin 上執行程式 -- 例如耗費大量 cpu 資源的光跡追蹤軟體 povray 好了 -- 然後把畫面丟回古董機來. 古董機只要負責管你手邊的滑鼠鍵盤, 以及在眼前的螢幕上按照 penguin 指示畫點線著顏色就好; 至於 povray 裡面的反射折射等等複雜運算當然要在 penguin 上做. 也就是說, 我們的古董機要跑 X server, 而 penguin 上的 povray 程式則是一個 X client. (聽起來有點顛倒, 怎麼遠端的快主機是 client, 而手邊的古董機反而是 server? 其實你從 "server 就是管理資源的機器" 這個角度來看就沒有問題了 -- X server 管的是 你手邊的資源 不像其他 server 管的是遠端的資源)

要將遠端的 X client 丟回手邊的古董機 X server 執行之前, 必須先

  1. 查看 server 端的通行碼 -- 在古董機下: xauth list $DISPLAY
  2. 把通行碼告訴 X client -- 在 penguin 下: xauth add 163.17.27.128:0 . 「剛才看到那一串通行碼」
  3. 告訴 penguin 以後所有視窗都丟到古董機去: export DISPLAY=163.17.27.128:0

從此以後 penguin 上執行的應用程式, 都會顯示到手邊的古董機來了. 其實如果你連線的工具是 ssh 而不是 telnet 的話, 很可能連上面三步都不必做 -- 如果古董機上的 /etc/ssh/ssh_config 裡面有一句 ForwardX11 yes 那麼 ssh 會自動安排將通行碼轉交給 penguin. (不過我的機器似乎有其他地方設定錯誤, 所以還是必須做上面三步...) 以上資料參考自 Remote-X-Apps HOWTO

參考資料

  1. 中研院: X Window 入門
  2. 中研院: X 環境下圖文整合
  3. XFree86 Frequently Asked Questions 與 XFree86 相關的特殊問題. (設定檔, 顯示卡, 滑鼠, OS/2 及 MS Windows 版...)
  4. XWindow-User-HOWTO: X Window 的基本概念
  5. comp.windows.x.apps FAQ 在 X Window 上有沒有應用程式可以做 ...?
  6. Web Directory: Major X Window System WWW Sites 「X Window 相關資訊網頁」的目錄
  7. Window Managers for X
  8. 遠端執行 X
  9. Aron Hsiao. {The Concise Guide to} XFree86 For Linux. Que.