Chapter 11. X Window System 及 Virtual Consoles

Wei-Hon Chen
11.1. 我想要執行 X ,我該怎麼做?
11.2. 試著 要執行 X, 但是當我鍵入 startx 時,得到 ``KDENABIO failed (Operation not permitted)'' 錯誤。我該怎麼辦?
11.3. 為什麼我不能在 X 裡使用滑鼠?
11.4. 我的滑鼠有個很炫的滾輪。我能在 X 裡面使用嗎?
11.5. 為什麼 X Window 的選單和對話框不能正常運作?
11.6. 什麼是 virtual console?我要怎麼做才能用多一點?
11.7. 我要怎麼從 X 切換到 virtual console?
11.8. 我要怎麼做才能在開機時啟動 XDM?
11.9. 為什麼當我執行 xconsole 時,發生了 ``Couldn't open console'' 的錯誤?
11.10. 以前我可以以一般使用者執行 XFree86,為什麼現在它說我一定要 以 root 才能執行?
11.11. 我的 PS/2 滑鼠在 X 中有點不正常?
11.12. 我的 PS/2 滑鼠不能透過 MouseSystem 來運作?
11.13. 當我建立 X 程式時,imake 說它找不到 Imake.tmpl。它在哪兒?
11.14. 我在 build 一個 X 應用程式,它需要 XFree86 3.3.x,但是 我已經安裝 XFree86 4.x 了。我該怎麼辦?
11.15. 我要怎麼做才能設定左撇子用的滑鼠?
11.16. 要如何安裝 splash 圖形顯示程式?那裡可以找得到呢?
11.17. 我能在 X 裡使用鍵盤上的 Windows ® 嗎?
11.18. 我要怎麼樣才能得到 OpenGL 的 3D 硬體加速功能?

11.1. 我想要執行 X ,我該怎麼做?

最簡單的方法就是在安裝系統的時候一併安裝。

然後看看 xf86config 的文件,這個程式可以 幫您設定 XFree86(tm) 使它能夠使用您的顯示卡/滑鼠等週邊。

您或許也想試試看 Xaccel server。詳情請看 Xi Graphics 或是 Metro Link 這一段。

11.2. 試著 要執行 X, 但是當我鍵入 startx 時,得到 ``KDENABIO failed (Operation not permitted)'' 錯誤。我該怎麼辦?

你的系統一定提高了 securelevel,對不對?在一個提高了 securelevel 的系統上,是絕對無法起動 X 的。想知道為什麼, 請參考 init(8) 說明文件。

所以這個問題變成:你還能怎麼辦。基本上你有兩種選擇: 將你的 securelevel 設回零 (通常在 /etc/rc.conf 裡面設定),或是在啟動時執行 xdm(1) (在 securelevel 被昇高前)。

請參考 Q: 11.8. 以取得更多有關啟動時 執行 xdm(1) 的資訊。

11.3. 為什麼我不能在 X 裡使用滑鼠?

如果您用的是 syscons (內定的 console 驅動程式) 的話,您可以 經由設定 FreeBSD 來讓它支援在每個 virtual console 使用滑鼠。為了 避免和 X 產生衝突,syscons 使用了一個叫做 /dev/sysmouse 的虛擬裝置。所有滑鼠產生的 event 都會利用 moused 來寫到 sysmouse 這個裝置。如果您希望在一個 或以上的 virtual console 上使用滑鼠,並且 能夠使用 X 的話,請參考 Q: 4.13. 並且設定好 moused。

然後編輯 /etc/XF86Config 這個檔案, 並且確認你有以下這幾行的設定。

    Section         Pointer
    Protocol        "SysMouse"
    Device          "/dev/sysmouse"
    ....

以上的例子,適用於 XFree86 3.3.2 及其後的版本。用於更早的 版本的,其 Protocol 應為 MouseSystems

有些人比較喜歡在設定 X 的時候用 /dev/mouse 這個裝置。如果您要讓它能夠 正常工作的話,您就必須把 /dev/mouse 連結到 /dev/sysmouse (請參考 sysmouse(4)):

    # cd /dev
    # rm -f mouse
    # ln -s sysmouse mouse

11.4. 我的滑鼠有個很炫的滾輪。我能在 X 裡面使用嗎?

可以。不過你需要設定 X 用戶端程式。 請參考 Colas Nahaboo 的網頁 (http://www.inria.fr/koala/colas/mouse-wheel-scroll/) .

如果你要使用 imwheel 程式, 只要跟著下列步驟作即可。

  1. 轉換滾輪 event Translate the Wheel Events

    imwheel 程式的運作原理, 是將滑鼠的第四鍵與第五鍵轉換成按鍵 event。因為如此,所以 你必須讓滑鼠驅動程式將滑輪事件轉換成第四鍵與第五鍵 event。 有兩種方法可以達到目的,一是讓 moused(8) 作轉換,二是 讓 X 本身去作 event 轉換。

    1. 使用 moused(8) 來轉換滾輪 Event

      要讓 moused(8) 來作 event 轉換,只要在 執行 moused(8) 的命令列中加上 -z 4 即可。舉個例子,如果你一般都是以 moused -p /dev/psm0 來起動 moused(8) 的話,只要改成 moused -p /dev/psm0 -z 4 即可。如果你是在開機過程中利用 /etc/rc.conf 來起動 moused(8), 你可以在 /etc/rc.conf 中將 moused_flags 上加 -z 4 即可。

      你現在需要讓 X 知道你的滑鼠有五個按鍵,只要在 /etc/XF86Config 中的 "Pointer" 區塊中加上 Buttons 5 這一行即可。例如, 你可能在 /etc/XF86Config 中有 以下的 "Pointer" 區塊:

      Example 11-1. 在 XFree86 3.3.x 系列的 XF86Config 設定檔的 "Pointer" 區塊中,以 moused 作轉換 的滾輪鼠的設定範例

          Section "Pointer"
             Protocol        "SysMouse"
             Device          "/dev/sysmouse"
             Buttons         5
          EndSection

      Example 11-2. 在 XFree86 4.x 系列的 XF86Config 設定檔的 "InputDevice" 區塊中,以 X Server 作轉換 的滾輪鼠的設定範例

          Section "InputDevice"
             Identifier      "Mouse1"
             Driver          "mouse"
             Option          "Protocol" "auto"
             Option          "Device" "/dev/sysmouse"
             Option          "Buttons" "5"
          EndSection

      Example 11-3. 在 ".emacs" 中,設定滾輪鼠的原生 頁面滾動支援範例

          ;; wheel mouse
          (global-set-key [mouse-4] 'scroll-down)
          (global-set-key [mouse-5] 'scroll-up)
    2. 利用你的 X Server 來作滾輪 Event 轉換

      如果你沒有執行 moused(8),或是你不想利用 moused(8) 去作滾輪 event 轉換,你可以改用 X server 來作這樣的 event 轉換。你得在 /etc/XF86Config 檔案中作幾個更動。第一, 你要為你的滑鼠選擇適當的通訊協定。大多數的滾輪鼠都 使用 "IntelliMouse" 協定,不過 XFree86 也支援其它的通訊協定,例如羅技的 MouseMan+ 滑鼠所用的 "MouseManPlusPS/2"。當你選好之後,只要 加進一行 "Pointer" 區塊的 Protocol 變數即可。

      第二,你要告訴 X server 將捲動事件重新對映至滑鼠的 第四和第五鍵。這可以利用 ZAxisMapping 選項辦到。

      舉個例子,如果你沒有使用 moused(8),而你有一個 IntelliMouse 安裝在 PS/2 滑鼠埠的話,你可以在 /etc/XF86Config 裡使用以下的設定。

      Example 11-4. 在 XF86Config 設定檔的 "Pointer" 區塊中,以 X Server 作轉換的滾輪鼠的設定範例

          Section "Pointer"
             Protocol        "IntelliMouse"
             Device          "/dev/psm0"
             ZAxisMapping    4 5
          EndSection

      Example 11-5. 在 XFree86 4.x 系列的 XF86Config 設定檔的 "InputDevice" 區塊中,以 X Server 作轉換 的滾輪鼠的設定範例

          Section "InputDevice"
             Identifier      "Mouse1"
             Driver          "mouse"
             Option          "Protocol" "auto"
             Option          "Device" "/dev/psm0"
             Option          "ZAxisMapping" "4 5"
          EndSection

      Example 11-6. 在 ".emacs" 中,設定滾輪鼠的原生 頁面滾動支援範例

          ;; wheel mouse
          (global-set-key [mouse-4] 'scroll-down)
          (global-set-key [mouse-5] 'scroll-up)
  2. 安裝 imwheel

    接下來,從 Ports 裡安裝 imwheel 。在 x11 類別裡可以找到它,它可以將 滾輪 event 對映到鍵盤 event。舉個例子,它可以在你 將滾輪往前推時,送出一個 Page Up 到你的應用程式去。Imwheel 利用一個設定檔,以便對應滾輪 event 至鍵盤 event,這樣 它就可以在不同的應用程式中,送出不同的鍵盤按鍵。預設的 imwheel 設定檔是在 /usr/X11R6/etc/imwheelrc,如果你想 編輯自訂的設定檔的話,可以將它複製到 ~/.imwheelrc,然後依你的需要修改它。 設定檔的格式在 imwheel(1) 裡面有詳細的說明。

  3. 設定 EmacsImwheel 協同工作 (選擇性)

    如果你使用 emacs 或是 Xemacs 的話,那你需要在你的 ~/.emacs 檔案裡加上一小段設定。 emacs 請加上這一段:

    Example 11-7. ImwheelEmacs 設定

        ;;; For imwheel
        (setq imwheel-scroll-interval 3)
        (defun imwheel-scroll-down-some-lines ()
          (interactive)
          (scroll-down imwheel-scroll-interval))
        (defun imwheel-scroll-up-some-lines ()
          (interactive)
          (scroll-up imwheel-scroll-interval))
        (global-set-key [?\M-\C-\)] 'imwheel-scroll-up-some-lines)
        (global-set-key [?\M-\C-\(] 'imwheel-scroll-down-some-lines)
        ;;; end imwheel section

    Xemacs 則在 ~/.emacs 檔裡加上這一段:

    Example 11-8. ImwheelXemacs 設定

        ;;; For imwheel
        (setq imwheel-scroll-interval 3)
        (defun imwheel-scroll-down-some-lines ()
          (interactive)
          (scroll-down imwheel-scroll-interval))
        (defun imwheel-scroll-up-some-lines ()
          (interactive)
          (scroll-up imwheel-scroll-interval))
        (define-key global-map [(control meta \))] 'imwheel-scroll-up-some-lines)
        (define-key global-map [(control meta \()] 'imwheel-scroll-down-some-lines)
        ;;; end imwheel section
  4. 執行 Imwheel

    安裝之後,你可以直接在 xterm 裡鍵入 imwheel 命令以起動它。它會以背景執行,並且馬上發揮效用。 如果你確定要直接使用 imwheel, 只要把它加進你自己的 .xinitrc.xsession 內檔案即可。你可以不管 imwheel 所送出來有關 PID 檔案 警告。那些警告只對 Linux 版的 imwheel 有效而已。

11.5. 為什麼 X Window 的選單和對話框不能正常運作?

把 Num Lock 關掉試試。

如果您的 Num Lock 在開機時的預設值是開著的話,您必須把下列 這行放到 XF86Config 設定檔中的 Keyboard 部份。

    # Let the server do the NumLock processing.  This should only be
    # required when using pre-R6 clients
        ServerNumLock

11.6. 什麼是 virtual console?我要怎麼做才能用多一點?

簡單來說,virtual console 就是可以讓您不必做太多複雜的設定 如使用網路或執行 X ,而在同一臺機器上同時做好幾件事的方法。

當啟動系統並顯示完所有開機訊息之後,您就會在螢幕上看到一個 login 的提示符號。在這個時候您就可以輸入您的 login name 以及 password ,然後就可以在第一個 virtual console 上開始工作了 (或者開始玩!) 。

在某些情況下,您可能會想要作其他的工作,例如說是看看您正在 執行的程式的說明文件,或是當您在 FTP 傳輸的等待時間中看看您的 郵件。您只需要按 Alt-F2 (按住 Alt 鍵不放,並按下 F2 鍵) ,然後 您就會在第二個 "virtual console" 上看到一個 login 提示符號!當您想要回到原來的工作時,請按 Alt-F1。

FreeBSD 在安裝時的預設值是使用三個 virtual console (3.3-RELEASE 後為八個),您可以用 Alt-F1,Alt-F2,以及 Alt-F3 在它們之間做切換。

如果您想要多一點 virtual console 的話,您只需要編輯 /etc/ttys 這個檔 (請參考 ttys(5)), 在 "Virtual terminals" 這個註解後面加入 ttyv4ttyvc 的欄位:

    # Edit the existing entry for ttyv3 in /etc/ttys and change
    # "off" to "on".
    ttyv3   "/usr/libexec/getty Pc"         cons25  on secure
    ttyv4   "/usr/libexec/getty Pc"         cons25  on secure
    ttyv5   "/usr/libexec/getty Pc"         cons25  on secure
    ttyv6   "/usr/libexec/getty Pc"         cons25  on secure
    ttyv7   "/usr/libexec/getty Pc"         cons25  on secure
    ttyv8   "/usr/libexec/getty Pc"         cons25  on secure
    ttyv9   "/usr/libexec/getty Pc"         cons25  on secure
    ttyva   "/usr/libexec/getty Pc"         cons25  on secure
    ttyvb   "/usr/libexec/getty Pc"         cons25  on secure

您想用幾個就設幾個。您設越多 virtual terminal ,它們就用掉 越多系統資源;如果您只有不到 8MB 的記憶體的話,這影響就大了。 您可能也會想把 secure 換成 insecure

Important: 如果您想要執行 X 的話,您 必須 為它保留 (或關掉) 至少一個 virtual terminal 。這就是說,如果 您想在按十二個 Alt 功能鍵時都有 login 提示符號,而且又在同一 部電腦上也想執行 X 的話,那麼這真是太不幸了 - 您只能用十一個。

取消一個 console 最簡單的方法就是把它關掉。舉例來說,如果 您像上面講的一樣設定了全部的 12 個 terminal 並且想要執行 X , 您必需把 virtual terminal 12 從:

    ttyvb   "/usr/libexec/getty Pc"         cons25  on  secure

設成:

    ttyvb   "/usr/libexec/getty Pc"         cons25  off secure

如果您的鍵盤只有 10 個功能鍵的話,您就要改成這樣:

    ttyv9   "/usr/libexec/getty Pc"         cons25  off secure
    ttyva   "/usr/libexec/getty Pc"         cons25  off secure
    ttyvb   "/usr/libexec/getty Pc"         cons25  off secure

(您也可以直接把這幾行砍掉。)

一旦您改了 /etc/ttys,下一個步驟就是要 確定您有足夠的 virtual terminal 裝置。最簡單的方法就是:

    # cd /dev
    # sh MAKEDEV vty12

再過來,想要啟動這些 virtual console 最簡單 (也是最乾淨) 的做法就是重開機。然後,如果您不想重開機的話,您可以把 X Window 關掉,然後用 root 的身份執行下列指令:

    # kill -HUP 1

當您執行這個命令前,您一定要完全把 X Window 關掉。如果 您不這麼做的話,您的系統可能會在您執行 kill 命令後出現當掉或 鎖死的情況。

11.7. 我要怎麼從 X 切換到 virtual console?

請用 Ctrl+Alt+Fn 以切回至 virtual console。 Ctrl+Alt+F1 可以切回至第一個 virtual console。

當你切回至文字 console 後,你就可以使用一般 Alt+Fn 按鍵組合,在各 console 之間切換。

要回到 X 的話,你必須切回至執行 X 的 virtual console。 如果你是從命令列裡起動 X 的話 (例如使用 startx 指令),那麼 X 會依附在下一個未使用的 virtual console,而不是它被 起動的文字 console。如果你有八個使用中的 virtual terminal,那麼 X 就會在第九個上執行,你就可以使用 Alt+F9 以返回至 X 中。

11.8. 我要怎麼做才能在開機時啟動 XDM?

有兩種方法可以啟動 xdm。一種方法是從 /etc/ttys 來啟動, 可以參考 ttys(5) 說明文件中的範例;另一種方法是在 rc.local (請參考 rc(8)) 執行 xdm,或是 在 /usr/local/etc/rc.d 放一個 X.sh。這兩種方法都是合法的,如果您試某一種 方法無效的話,您可以試試另外一種。這兩種方法的結果是一樣的:X 會顯示一個圖形化的 login: 提示。

用 ttys 的方法的優點,在於指明了 X 在啟動時到底是用那個 vty, 並且將 logout 時重新啟動 X server 的責任丟給 init。 rc.local 的方法則是在當啟動 X 出了問題時,可以很輕鬆地把 xdm 殺掉來解決 問題。

如果是用 rc.local 的方法,在執行 xdm 時您不能加任何參數(也就是跑成 daemon)。必須在 getty 執行後 才能啟動 xdm,否則 getty 和 xdm 會互相衝突而鎖住 console。最好的 方式是在 script 中加個 sleep,讓它暫停 10 秒鐘左右,接著才執行 xdm。

如果你是從 /etc/ttys 啟動 xdmxdmgetty(8) 仍有機會互相衝突。一個避免它的方法,就是在 /usr/X11R6/lib/X11/xdm/Xservers 檔案中加入 vt 數字。

    :0 local /usr/X11R6/bin/X vt4

上面的例子中,會指示 X server 在 /dev/ttyv3 中執行。請注意數字是差一的。X server 從一開始數 vty,而 FreeBSD 核心則是從零開始數 vty 的。

11.9. 為什麼當我執行 xconsole 時,發生了 ``Couldn't open console'' 的錯誤?

如果你是用 startx 來啟動 startx 的話,/dev/console 的權限並 不會 改變,結果就是 xterm -C xconsole 這類的程式無法 正常執行。

這一切的問題,都是因為 console 的權限是採用系統預設值。 在一個多使用者的系統裡,我們不希望每個使用者都可以直接寫入系統 console 。如果使用者是從機器的 VTY 直接 login 的話,那麼 fbtab(5) 可以解決這類的問題。

簡單地說,請確保 /etc/fbtab (請參考 fbtab(5)) 這個檔案中的這一行沒有被註解掉:

    /dev/ttyv0 0600 /dev/console

這一行設定的存在可以確保從 /dev/ttyv0 登入的使用者可以控制 console。

11.10. 以前我可以以一般使用者執行 XFree86,為什麼現在它說我一定要 以 root 才能執行?

所有的 X server 都需要以 root 來執行, 才能直接存取你的視訊硬體。舊版本的 XFree86 (<= 3.3.6) 會自動 將所附的 server 以利用 root 身份執行的方式 安裝起來 (setuid 為 root)。由於 X server 都是體積龐大又複雜的程式,顯而易見地,這是一個安全上的災難。 因為這個原因,新版的 XFree86 就不將這些 server 以 setuid 為 root 的方式安裝。

很明顯地,我們完全無法接受將 X server 以 root 的身份執行。起碼就安全上不是個好主意。 有兩種方法可以以一般使用者的身份使用 X。第一是利用 xdm 或是其它的 display manager (例如 kdm);第二是利用 Xwrapper

xdm 是一個處理圖形界面登入的 daemon。 它通常在開機時執行起來,而且負責對使用者作身份認證,以及起動 使用者的工作環境;它可說是圖形環境下的 getty(8)login(1) 的對應程式。想得知更多有關 xdm 的資訊,請參考 XFree86 文件,以及其 FAQ 項目

Xwrapper 是 X server 的包裝程式;它可以 讓一般使用者可以手動起動 X server 的小工具,而還能維持一定的安全 環境。它會檢查傳入的命令列參數,如果沒問題的話,就起動適當的 X server。如果你因為某種理由而不想執行 display manager 的話, 它是為你而設定的。如果你安裝了完整的 ports,你可以在 /usr/ports/x11/wrapper 中找到它。

11.11. 我的 PS/2 滑鼠在 X 中有點不正常?

您的滑鼠和您的滑鼠驅動程式可能存在有不同步的現象。

在 2.2.5 以及更早的系統裡,從 X 切到 virtual terminal 然後 再切回來就可以使它們重新做同步的動作。如果這個問題常常發生的話, 您可以在您的核心設定檔中加入下面這個選項然後重新編譯:

    options PSM_CHECKSYNC

如果您沒有建立核心程式的經驗,請看 自訂核心 這一節。

加上這個選項以後,滑鼠和滑鼠驅動程式間的同步問題應該就比較 不會出現了。如果這個問題仍然存在的話,在移動滑鼠時按按滑鼠按鍵 可以使滑鼠和滑鼠驅動程式重新做同步的動作。

該注意的是這個選項並不是對每一個系統都有效,它可能會讓接在 PS/2 滑鼠位置的 ALPS GlidePoint 裝置失去 "tap" 這項功能。

在 2.2.6 及其後的版本,同步的確認已經有了較好的解決辦法, 而且這些都已經是 PS/2 滑鼠驅動程式的標準了。這個方法也可以在 GlidePoint 上正常工作。 (因為確認的程式碼已經成為一個標準功能, 所以在這些版本中我們不在提供 PSM_CHECKSYNC 的選項了。) 不過在 極少數的案例中,這些驅動程式會誤報同步性錯誤,然後您就會看到 這樣的核心訊息:

    psmintr: out of sync (xxxx != yyyy)

然後您就會發現您的滑鼠不能正常運作了。

如果您發生了這樣的狀況,您必須藉由把 PS/2 滑鼠驅動程式的 flag 設成 0x100 來把同步確認的程式碼給取消掉。然後在開機提示符號時用 -c 選項來進入 UserConfig

    boot: -c

然後,在 UserConfig 命令列中鍵入:

    UserConfig> flags psm0 0x100
    UserConfig> quit

11.12. 我的 PS/2 滑鼠不能透過 MouseSystem 來運作?

有一些報告指出某些廠牌的 PS/2 滑鼠只能在 "高解析度" 狀態下才能運作。如果不是的話,滑鼠游標 會常常跑到螢幕的左上角去。

非常不幸的,這個問題在 2.0.X 和 2.1.X 下是無解的。在 2.2 到 2.2.5 版,您可以對 /sys/i386/isa/psm.c 使用下列 patch 然後重建您的核心。如果您沒有建立核心程式的經驗, 請看 自訂核心 這節。

    @@ -766,6 +766,8 @@
         if (verbose >= 2)
             log(LOG_DEBUG, "psm%d: SET_DEFAULTS return code:%04x\n",
                 unit, i);
    +    set_mouse_resolution(sc->kbdc, PSMD_RES_HIGH);
    +
     #if 0
         set_mouse_scaling(sc->kbdc);        /* 1:1 scaling */
         set_mouse_mode(sc->kbdc);                /* stream mode */

在 2.2.6 及以後的版本,在 PS/2 滑鼠驅動程式中設定 0x04 的 flag 會把滑鼠設成高解析度模式。在開機提示符號時用 -c 選項來進入 UserConfig

    boot: -c

然後,在 UserConfig 的命令列中鍵入:

    UserConfig> flags psm0 0x04
    UserConfig> quit

前一節有提到另一個可能導致滑鼠問題的原因。

11.13. 當我建立 X 程式時,imake 說它找不到 Imake.tmpl。它在哪兒?

Imake.tmpl 是 Imake 套件的一部份,Imake 是標準的建立 X 程式的工具。 Imake.tmpl 和其他數個 header file 一樣是建立 X 程式的必要檔案,您可以在 X prog distribution 中找到它們。您可以用 sysinstall 來安裝或是 直接從 X distribution 中手動安裝。

11.14. 我在 build 一個 X 應用程式,它需要 XFree86 3.3.x,但是 我已經安裝 XFree86 4.x 了。我該怎麼辦?

要告訴 port 在編譯程式時,使用 XFree86 4.x 函式庫,你可以 在 /etc/make.conf 裡 (如果你沒有這個檔, 請建立它) 加上下面這一行:

    XFREE86_VERSION=        4

11.15. 我要怎麼做才能設定左撇子用的滑鼠?

在您的 .xinitrc 或是 .xsession 中執行 xmodmap -e "pointer = 3 2 1" 的指令。

11.16. 要如何安裝 splash 圖形顯示程式?那裡可以找得到呢?

就在發行 FreeBSD 3.1 之前,我們加進了在開機時顯示 "splash" 圖形的新功能。目前用來顯示在螢幕上的檔案 必須是 256 色的點矩陣圖形 (*.BMP) 或 ZSoft PCX(*.PCX) 的格式。除此之外,解析度也必須在 320x200 以下,才能和標準 VGA 顯示卡搭配使用。如果您編譯 kernel 時有加入 VESA 支援,那麼最大解析度可以到 1024x768。注意 VESA 的 支援需要加入 VM86 這個 kernel 選項。VESA 支援實際上可以在編譯 kernel 時加入 VESA 選項、 或載入 VESA 的 kld module 來達成。

您要修改控制 FreeBSD 開機步驟的設定檔,才能使用 splash 顯示圖形的功能。設定檔在發行 FreeBSD 3.2 前有些更動,所以現在 有兩個方法可以載入 splash 的功能:

  • FreeBSD 3.1

    先選出用來顯示在螢幕上的圖形,3.1 版只支援 Windows 的點矩陣格式。選好了您要的圖檔後,將它拷到 /boot/splash.bmp。接著把下面幾行加入 /boot/loader.rc 中:

        load kernel
        load -t splash_image_data /boot/splash.bmp
        load splash_bmp
        autoboot
  • FreeBSD 3.2+

    除了加入對 PCX 檔案的支援外,FreeBSD 3.2 也改進了 開機程序的設定方式。如果您願意的話,可以用上述 FreeBSD 3.1 的方法,將 splash_bmp 換成 splash_pcx 來載入 PCX 檔案即可。 如果想用新的設定方式,您的 /boot/loader.rc 必須包括這幾行:

        include /boot/loader.4th
        start

    還需要一個包含以下幾行的 /boot/loader.conf

        splash_bmp_load="YES"
        bitmap_load="YES"

    這是假設您用 /boot/splash.bmp 來當作 splash 的螢幕顯示。如果想用 PCX 的檔案,把它拷成 /boot/splash.pcx,如上述做出 /boot/loader.rc,再將這幾行加到 /boot/loader.conf 中:

        splash_pcx_load="YES"
        bitmap_load="YES"
        bitmap_name="/boot/splash.pcx"

現在就只剩下 splash 用來顯示的圖檔,您可以在 http://www.baldwin.cx/splash/ 找到各種樣品。

11.17. 我能在 X 裡使用鍵盤上的 Windows ® 嗎?

可以。你所要作的,就是利用 xmodmap(1) 去定義你想使用 的功能。

假設所有的 "Windows®" 都是標準的, 那它們的 keycode 分別為:

  • 115 - Windows® 鍵, 在左手的 Ctrl 與 Alt 鍵之間

  • 116 - Windows® 鍵, 在 Alt-Gr 鍵右邊

  • 117 - 選單鍵,右手的 Ctrl 鍵左邊

要讓左邊的 Windows® 鍵印出一個逗點,試試這個:

    # xmodmap -e "keycode 115 = comma"

你可能要重跑你的 windows manager,才會有動作。

要讓 Windows® 鍵 的對映在每次 X 起動時自動設定好,你可以在你的 ~/.xinitrc 裡加上 xmodmap, 或是最好建立一個 ~/.xmodmaprc 檔案,裡面 每一行就是一個 xmodmap 的選項,然後在你的 ~/.xinitrc 裡加上:

    xmodmap $HOME/.xmodmaprc

這一行。

例如,你想要將這三個鍵各對映到 F13、F14 和 F15。這讓你能 在你的程式或是 window manager 內將其對應到便利的功能上,等一下 我們會示範。

把這些放進 ~/.xmodmaprc 裡:

    keycode 115 = F13
    keycode 116 = F14
    keycode 117 = F15

假如你用 fvwm2 的話,你可以作這樣的對映, 讓 F13 能夠讓游標所在的視窗縮成小圖示 (或是反過來)。F14 讓游標 所在的視窗變成最上層的視窗,或是退到下層去 (如果它已經是最上層 了的話)。F15 則將 Workplace (application) 選單叫出來,即使游標 不在桌面上。當你沒有可見的桌面區域時,這個功能就相當地方便 (而且 按鍵上的圖案和這個功能相吻合)。

以下的 ~/.fvwmrc 設定可作出前述的功能。

    Key F13        FTIWS    A        Iconify
    Key F14        FTIWS    A        RaiseLower
    Key F15        A        A        Menu Workplace Nop

11.18. 我要怎麼樣才能得到 OpenGL 的 3D 硬體加速功能?

3D 加速功能的有無,視你所使用的 XFree86 版本與顯示晶片 的型號而定。如果你的是 NVIDIA 晶片的話,請去 FreeBSD NVIDIA Driver Initiative 網頁看看,那裡有在 XFree86-4 上使用 NVIDIA 晶片的 3D 加速功能的討論。XFree86-4 上的其它顯示卡廠牌 硬體加速功能的資訊, 包括 Matrox G200/G400, ATI Rage 128/Radeon, 3dfx Voodoo 3, 4, 5, 以及 Banshee,可在 XFree86-4 Direct Rendering on FreeBSD 網頁上找到。XFree 3.3 的 使用者可以使用 Utah-GLX port,它可以在 graphics/utah-glx 找到。 使用它可以在 Matrox Gx00, ATI Rage Pro, SiS 6326, i810, Savage, 以及舊的 NVIDIA 上得到有限的 OpenGL 加速。