FreeBSD 5.X、6.X 常見問答集
前一頁 |  | 下一頁

# 章 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 ，我該怎麼做？

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

然後看看 xorgconfig(1) 的文件，這個程式可以 幫您設定 Xorg 相關設定，使它能夠正確運用您的顯示卡、滑鼠等週邊。此外，還可以用 xorgcfg(1) 的圖形介面來做相關設定。

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

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

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

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

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

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

如果您用的是 syscons (內定的 console 驅動程式) 的話，您可以 經由設定 FreeBSD 來讓它支援在每個 virtual console 使用滑鼠。為了 避免和 X 產生衝突，syscons 使用了一個叫做 `/dev/sysmouse` 的虛擬裝置。所有滑鼠產生的 event 都會利用 moused 來寫到 sysmouse 這個裝置。如果您希望在一個 或以上的 virtual console 上使用滑鼠，並且 能夠使用 X 的話，請參考 問： 4.4.4. 並且設定好 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 client 端程式。 請參考 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” 區塊：

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

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

      範例 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

      範例 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` 裡使用以下的設定。

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

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

      範例 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

      範例 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. 設定 Emacs 與 Imwheel 協同工作 (選擇性)

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

   範例 11-7. Imwheel 的 Emacs 設定

       ;;; 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` 檔裡加上這一段：

   範例 11-8. Imwheel 的 Xemacs 設定

       ;;; 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” 這個註解後面加入 `ttyv4` 到 `ttyvc` 的欄位：

    # 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`。

> 重要: 如果您想要執行 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+F`n` 以切回至 virtual console。 Ctrl+Alt+F1 可以切回至第一個 virtual console。

當你切回至文字 console 後，你就可以使用一般 Alt+F`n` 按鍵組合，在各 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` 啟動 `xdm`，`xdm` 與 getty(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 然後 再切回來就可以使它們重新做同步的動作。如果這個問題常常發生的話， 您可以在您的 kernel 設定檔中加入下面這個選項然後重新編譯：

    options PSM_CHECKSYNC

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

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

該注意的是這個選項並不是對每一個系統都有效，它可能會讓接在 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 然後重建您的核心。如果您沒有建立 kernel 的經驗， 請看 自訂核心 這節。

    @@ -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(FreeBSD 5.2 之前版本則是 `/stand/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 加速。

前一頁 | 內容 | 下一頁
系統管理 |  | Networking

本文及其他文件，可由此下載：ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/。

若有 FreeBSD 方面疑問，請先閱讀 FreeBSD 相關文件，如不能解決的話，再洽詢 <questions@FreeBSD.org>。
關於本文件的問題，請洽詢 <doc@FreeBSD.org>。