最簡單的方法就是在安裝系統的時候一併安裝。
然後看看 xf86config 的文件,這個程式可以 幫您設定 XFree86(tm) 使它能夠使用您的顯示卡/滑鼠等週邊。
您或許也想試試看 Xaccel server。詳情請看 Xi Graphics 或是 Metro Link 這一段。
你的系統一定提高了 securelevel,對不對?在一個提高了 securelevel 的系統上,是絕對無法起動 X 的。想知道為什麼, 請參考 init(8) 說明文件。
所以這個問題變成:你還能怎麼辦。基本上你有兩種選擇: 將你的 securelevel 設回零 (通常在 /etc/rc.conf 裡面設定),或是在啟動時執行 xdm(1) (在 securelevel 被昇高前)。
請參考 Q: 11.8. 以取得更多有關啟動時 執行 xdm(1) 的資訊。
如果您用的是 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
可以。不過你需要設定 X 用戶端程式。 請參考 Colas Nahaboo 的網頁 (http://www.inria.fr/koala/colas/mouse-wheel-scroll/) .
如果你要使用 imwheel 程式, 只要跟著下列步驟作即可。
轉換滾輪 event Translate the Wheel Events
imwheel 程式的運作原理, 是將滑鼠的第四鍵與第五鍵轉換成按鍵 event。因為如此,所以 你必須讓滑鼠驅動程式將滑輪事件轉換成第四鍵與第五鍵 event。 有兩種方法可以達到目的,一是讓 moused(8) 作轉換,二是 讓 X 本身去作 event 轉換。
使用 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
利用你的 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
安裝 imwheel
接下來,從 Ports 裡安裝 imwheel 。在 x11 類別裡可以找到它,它可以將 滾輪 event 對映到鍵盤 event。舉個例子,它可以在你 將滾輪往前推時,送出一個 Page Up 到你的應用程式去。Imwheel 利用一個設定檔,以便對應滾輪 event 至鍵盤 event,這樣 它就可以在不同的應用程式中,送出不同的鍵盤按鍵。預設的 imwheel 設定檔是在 /usr/X11R6/etc/imwheelrc,如果你想 編輯自訂的設定檔的話,可以將它複製到 ~/.imwheelrc,然後依你的需要修改它。 設定檔的格式在 imwheel(1) 裡面有詳細的說明。
設定 Emacs 與 Imwheel 協同工作 (選擇性)
如果你使用 emacs 或是 Xemacs 的話,那你需要在你的 ~/.emacs 檔案裡加上一小段設定。 emacs 請加上這一段:
Example 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 檔裡加上這一段:
Example 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
執行 Imwheel
安裝之後,你可以直接在 xterm 裡鍵入 imwheel 命令以起動它。它會以背景執行,並且馬上發揮效用。 如果你確定要直接使用 imwheel, 只要把它加進你自己的 .xinitrc 或 .xsession 內檔案即可。你可以不管 imwheel 所送出來有關 PID 檔案 警告。那些警告只對 Linux 版的 imwheel 有效而已。
把 Num Lock 關掉試試。
如果您的 Num Lock 在開機時的預設值是開著的話,您必須把下列 這行放到 XF86Config 設定檔中的 Keyboard 部份。
# Let the server do the NumLock processing. This should only be # required when using pre-R6 clients ServerNumLock
簡單來說,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。
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 命令後出現當掉或 鎖死的情況。
請用 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 中。
有兩種方法可以啟動 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 的。
如果你是用 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。
所有的 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 中找到它。
您的滑鼠和您的滑鼠驅動程式可能存在有不同步的現象。
在 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
有一些報告指出某些廠牌的 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
前一節有提到另一個可能導致滑鼠問題的原因。
Imake.tmpl 是 Imake 套件的一部份,Imake 是標準的建立 X 程式的工具。 Imake.tmpl 和其他數個 header file 一樣是建立 X 程式的必要檔案,您可以在 X prog distribution 中找到它們。您可以用 sysinstall 來安裝或是 直接從 X distribution 中手動安裝。
要告訴 port 在編譯程式時,使用 XFree86 4.x 函式庫,你可以 在 /etc/make.conf 裡 (如果你沒有這個檔, 請建立它) 加上下面這一行:
XFREE86_VERSION= 4
就在發行 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/ 找到各種樣品。
可以。你所要作的,就是利用 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
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 加速。