章 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. 設定 EmacsImwheel 協同工作 (選擇性)

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

    範例 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 檔裡加上這一段:

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

重要: 如果您想要執行 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 然後 再切回來就可以使它們重新做同步的動作。如果這個問題常常發生的話, 您可以在您的 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 加速。

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

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