---
title: 章 5. X Window 系統
part: 部 I. 入門
prev: books/handbook/ports
next: books/handbook/partii
showBookMenu: true
weight: 7
params:
  path: "/books/handbook/x11/"
---

[[x11]]
= X Window 系統
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 5
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/handbook/x11/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[x11-synopsis]]
== 概述

使用 bsdinstall 安裝 FreeBSD 並不會自動安裝圖型化使用者介面。本章將說明如何安裝並設定 Xorg，該應用程式提供開放源碼的 X Window 系統來提供圖型化環境。接著會說明如何找到並安裝桌面環境或視窗管理程式。

[NOTE]
====
偏好安裝時會自動設定 Xorg 並且在安裝過程提供視窗管理程式選項的使用者請參考 http://www.trueos.org/[] 網站。
====

更多有關 Xorg 支援影像硬體資訊，請參考 http://www.x.org/[x.org] 網站。

讀完這章，您將了解：

* 組成 X Window 系統的各種元件以及它們是如何相互運作。
* 如何安裝並設定 Xorg。
* 如何安裝並設定各種視窗管理程式與桌面環境。
* 如何在 Xorg 上使用 TrueType(TM) 字型。
* 如何設定系統以使用圖形化登入 (XDM)。

在開始閱讀這章之前，您需要：

* 了解如何依照 crossref:ports[ports,安裝應用程式：套件與 Port] 說明安裝其他第三方軟體。

[[x-understanding]]
== 術語

雖然 X 各元件的所有細節及運作方式，並不是必須要知道的。 但對它們有些基本概念會更容易上手。

X 伺服器 (X Server)::
X 最初設計是以網路為中心，採用 "client-server" 架構。在此架構下 "X 伺服器" 在有鍵盤、螢幕、滑鼠的電腦上運作。該伺服器負責的工作包含管理顯示、處理來自鍵盤、滑鼠的輸入及來自其他設備 (如平板或或影像投影機) 的輸入或輸出。這點可能會讓人感到困惑，因為 X 使用的術語與一般的認知剛好相反。 一般認知會以為 "X 伺服器" 是要在最強悍的主機上執行，而 "X 客戶端" 才是在桌機上面執行，實際上卻是相反。

X 客戶端 (X Client)::
每個 X 應用程式，如 XTerm、Firefox 都是 "客戶端"。 客戶端會傳訊息到伺服器，例如："請在這些座標畫一個視窗"，接著伺服器會傳回訊息，如："使用者剛點選了確定按鈕"。
+
在家庭或小型辦公室環境，通常 X 伺服器跟 X 客戶端都是在同一台電腦上執行。也可以在比較慢的電腦上執行 X 伺服器， 並在比較強、比較貴的系統上執行 X 應用程式。 在這種情景，X 客戶端與伺服器之間的溝通就需透過網路來進行。

視窗管理程式 (Window Manager)::
X 並不規定螢幕上的視窗該長什麼樣、要如何移動滑鼠指標、 要用什麼鍵來在視窗切換、每個視窗的標題列長相，及是否該有關閉按鈕，等等。事實上，X 把這部分交給所謂的視窗管理程式來管理。可用的link:http://www.xwinman.org/[視窗管理程式有很多種]，每一種視窗管理程式都提供不同的使用介面風格：有些支援虛擬桌面，有些允許自訂組合鍵來管理桌面，有些有 "開始" 鈕，有些則是可更換佈景主題，可自行安裝新的佈景主題以更換外觀。 視窗管理程式可在 Port 套件集的 [.filename]#x11-wm# 分類找到。
+
每個視窗管理程式也各有其不同的設定機制，有些需要手動修改設定檔， 而有的則可透過圖型化工具來完成大部分的設定工作。

桌面環境 (Desktop Environment)::
KDE 與 GNOME 會被稱作桌面環境是因為包含了完整常用桌面作業的應用程式，這些應用程式可能包含文書軟體、網頁瀏覽器及遊戲。

聚焦政策 (Focus Policy)::
視窗管理程式負責滑鼠指標的聚焦政策。 聚焦政策指的是如何決定使用中及接收鍵盤輸入的視窗。
+
通常較為人熟悉的聚焦政策叫做 "click-to-focus"，這個模式中，滑鼠點選到的視窗便會處於作用中 (Active) 的狀態。在 "focus-follows-mouse" 模式滑鼠指標所在的視窗便是作用中的視窗，只要把滑鼠移到其他視窗就可以改變作用中的視窗，若滑鼠移到根視窗 (Root Window)，則會聚焦在根視窗。在 "sloppy-focus" 模式，既使滑鼠移到根視窗，仍然會聚焦在最後聚焦的視窗上，此模式只有當滑鼠進入新的視窗時才會聚焦於該視窗，而非離開目前視窗時。"click-to-focus" 模式用滑鼠點擊來決定作用中的視窗，且該視窗會被置頂到所有其他視窗之前，即使滑鼠移到其他視窗，所有的鍵盤輸入仍會由該視窗所接收。
+
不同的視窗管理程式支援不同的聚焦模式，全部都支援 click-to-focus 且其中大部份支援其他模式，請查看視窗管理程式的說明文件來了解可用的聚焦模式。

視窗元件 (Widget)::
視窗元件指的是在所有在使用者介面上可被點選或操作的項目，這包括按鈕、核選方塊、單選按鈕、圖示及清單。 視窗元件工具包 (Widget toolkit) 是指用來建立圖型化應用程式的一系列的視窗元件。目前有數個有名的視窗元件工具包，包含 KDE 所使用的 Qt、GNOME 所使用的 GTK+。 因此應用程式會依其開發時所選用的視窗元件工具包而有不同的外觀。

[[x-install]]
== 安裝 Xorg

在 FreeBSD，Xorg 可透過套件或 Port 來安裝。

使用 Binary 套件的安裝速度較快，但可用的自訂選項較少：

[source,shell]
....
# pkg install xorg
....

要從 Port 套件集編譯與安裝：

[source,shell]
....
# cd /usr/ports/x11/xorg
# make install clean
....

兩種安裝方式皆可完整安裝 Xorg 系統，對大多數使用者較建議使用 Binary 套件安裝。

較精簡版本的 X 系統適合給有經驗的使用者使用，可至 package:x11/xorg-minimal[] 取得。這個版本就不會安裝大多數的文件、函數庫以及應用程式，而部份應用程式會需要這些額外的元件才能運作。

[[x-config]]
== Xorg 設定

[[x-config-quick-start]]
=== 快速開始

Xorg 支援大多數常見的顯示卡、鍵盤以及指標裝置。

[TIP]
====

顯示卡、顯示器以及輸入裝置會自動偵測，無須任何手動設置。除非自動設置失敗，否則請勿建立 [.filename]#xorg.conf# 或執行 `-configure` 步驟。
====

[.procedure]
====

. 若 Xorg 曾經在電腦使用過，可先將現有的設定檔重新命名或移除：
+
[source,shell]
....
# mv /etc/X11/xorg.conf ~/xorg.conf.etc
# mv /usr/local/etc/X11/xorg.conf ~/xorg.conf.localetc
....
+
. 加入要執行 Xorg 的使用者到 `video` 或 `wheel` 群組，以便在可用時能開啟 3D 加速。要加入使用者 _jru_ 到任一個可用的群組：
+
[source,shell]
....
# pw groupmod video -m jru || pw groupmod wheel -m jru
....
+
. 預設內含 TWM 視窗管理程式，啟動 Xorg 時便會啟動該視窗管理程式：
+
[source,shell]
....
% startx
....
+
. 在部份較舊版的 FreeBSD，在切換回文字 Console 前系統 Console 必須設為 man:vt[4] 才可正常運作，請參考 <<x-config-kms>>。
====

[[x-config-user-group]]
=== 可加速影像處理的使用者群組

要存取 [.filename]#/dev/dri# 需要允許顯示卡的 3D 加速功能，這通常只需要將要執行 X 的使用者加入 `video` 或 `wheel` 群組。此處使用 man:pw[8] 來將使用者 _slurms_ 加入 `video` 群組，若沒有 `video` 則會加入 `wheel` 群組：

[source,shell]
....
# pw groupmod video -m slurms || pw groupmod wheel -m slurms
....

[[x-config-kms]]
=== 核心模式設定 (Kernel Mode Setting, KMS)

當電腦顯示從 Console 切換到高螢幕解析度供 X 使用時，必須設定影像輸出__模式__。最近版本的 Xorg 使用了核心內部的系統來讓切換模式更有效率。較舊版的 FreeBSD 使用的 man:sc[4] 並不知到 KMS 系統的存在，這會導致關閉 X 之後即始仍在運作但系統 Console 卻呈現空白。較新版的 man:vt[4] Console 可避免這個問題。

加入此行到 [.filename]#/boot/loader.conf# 來開啟 man:vt[4]：

[.programlisting]
....
kern.vty=vt
....

[[x-config-files]]
=== 設定檔

通常不需要做手動設置，除非自動設置無法運作，否則請不要手動建立設定檔。

[[x-config-files-directory]]
==== 目錄

Xorg 會查看數個目錄來尋找設定檔，在 FreeBSD 較建議使用 [.filename]#/usr/local/etc/X11/# 來存放這些設定檔，使用這個目錄可以幫助將應用程式檔案與作業系統檔案分離。

儲存設定檔在傳統的 [.filename]#/etc/X11/# 仍可運作，但並不建議將應用程式檔案與基礎 FreeBSD 檔案混合在一起存放。

[[x-config-files-single-or-multi]]
==== 單檔或多檔

使用多檔，每一個檔案只設定一個指定項目會較傳統使用單一 [.filename]#xorg.conf# 設定來的簡單。這些檔案會存放在主設定檔目錄下的 [.filename]#xorg.conf.d/# 子目錄，完整路徑通常為 [.filename]#/usr/local/etc/X11/xorg.conf.d/#。

於本節稍後會有這些檔案的範例。

傳統單一 [.filename]#xorg.conf# 的方式仍可運作，但比起在 [.filename]#xorg.conf.d/# 子目錄中的多檔設定方式較不明瞭且沒有彈性。

[[x-config-video-cards]]
=== 顯示卡

由於最近 FreeBSD 版本所做的變更，現在可以使用由 Port 或套件所提供的繪圖驅動程式，所以使用者可以使用下列來自 package:graphics/drm-kmod[] 的驅動程式。

[[x-config-video-cards-ports]]
Intel KMS 驅動程式::
大多數使用 Intel KMS 驅動程式的 Intel 顯示卡支援 2D 與 3D 加速。
+
驅動程式名稱：`i915kms`
+
大多數使用 Radeon KMS 驅動程式的舊 AMD 顯示卡支援 2D 與 3D 加速。
+
驅動程式名稱：`radeonkms`
+
大多數使用 AMD KMS 驅動程式的新 AMD 顯示卡支援 2D 與 3D 加速。
+
驅動程式名稱：`amdgpu`
+
參考文獻請至 https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units[] 或至 https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units[] 取得支援的 GPU 清單。

[[x-config-video-cards-intel]]
Intel(TM)::
3D 加速在大多數 Intel(TM) 顯示晶片都有支援，最新到 Ivy Bridge (HD Graphics 2500, 4000, 及 P4000) 包含 Iron Lake (HD Graphics) 與 Sandy Bridge (HD Graphics 2000)。
+
驅動程式名稱：`intel`
+
參考文獻請至 https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units[]。

[[x-config-video-cards-radeon]]
AMD(TM) Radeon::
Radeon 顯示卡支援 2D 及 3D 加速，最新到 HD6000 系列。
+
驅動程式名稱：`radeon`
+
參考文獻請至 https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units[]。

[[x-config-video-cards-nvidia]]
NVIDIA::
有數個 NVIDIA 驅動程式可於 Port 套件集中的 [.filename]#x11# 分類取得，請安裝其中與顯示卡相符的驅動程式。
+
參考文獻請至 https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units[]。

[[x-config-video-cards-hybrid]]
混合組合繪圖晶片::
部份筆記型電腦加入了額外繪圖處理單元到那些內建晶片組或處理。_Optimus_ 結合了 Intel(TM) 及 NVIDIA 的硬體，_Switchable Graphics_ 或 _Hybrid Graphics_ 則是結合了 Intel(TM) 或 AMD(TM) 處理器與 AMD(TM) Radeon GPU。
+
這些混合繪圖系統的實作方式均不同，FreeBSD 的 Xorg 尚無法驅動所有的混合繪圖系統版本。
+
部份電腦提供了 BIOS 的選項可以關閉其中一個繪圖介面卡或選擇 _discrete_ 模式，可用使用其中一種標準顯示卡驅動程式來驅動。例如，有時關閉 Optimus 系統中的 NVIDIA GPU 是可能讓 Intel(TM) 顯示晶片可用 Intel(TM) 驅動程式驅動。
+
BIOS 設定會依電腦的型號有所不同，在某些情況下，可以同時開啟兩個 GPU，而在建立的設定檔中的 `Device` 節只使用主要的 GPU 便能讓系統運作。

[[x-config-video-cards-other]]
其他顯示卡::
較不常見的顯示卡驅動程式可在 Port 套件集的 [.filename]#x11-drivers# 目錄找到。
+
若沒有特定的驅動程式可以支援顯示卡，仍可能可用 package:x11-drivers/xf86-video-vesa[] 驅動程式來驅動。該驅動程式可使用 package:x11/xorg[] 安裝，也可使用 package:x11-drivers/xf86-video-vesa[] 手動安裝。當沒有指定驅動程式時 Xorg 會嘗試使用這個驅動程式來驅動顯示卡。
+
package:x11-drivers/xf86-video-scfb[] 也是不特定顯示卡的驅動程式，可在許多 UEFI 及 ARM(TM) 的電腦上運作。

[[x-config-video-cards-file]]
在檔案中設定影像驅動程式::
要在設定檔設定使用 Intel(TM) 驅動程式：
+
[[x-config-video-cards-file-intel]]
.在單檔中選擇 Intel(TM) 影像驅動程式
[example]
====
[.filename]#/usr/local/etc/X11/xorg.conf.d/driver-intel.conf#

[.programlisting]
....
Section "Device"
	Identifier "Card0"
	Driver     "intel"
	# BusID    "PCI:1:0:0"
EndSection
....

若有多張顯示卡，可取消註解 `BusID` identifier 然後設定為想要的顯示卡，顯示卡的 Bus ID 清單可以使用 `pciconf -lv | grep -B3 display` 取得。
====
+
要在設定檔設定使用 Radeon 驅動程式：
+
[[x-config-video-cards-file-radeon]]
.在單檔中選擇 Radeon 影像驅動程式
[example]
====
[.filename]#/usr/local/etc/X11/xorg.conf.d/driver-radeon.conf#

[.programlisting]
....
Section "Device"
	Identifier "Card0"
	Driver     "radeon"
EndSection
....

====
+
要在設定檔設定使用 VESA 驅動程式：
+
[[x-config-video-cards-file-vesa]]
.在單檔中選擇 VESA 影像驅動程式
[example]
====
[.filename]#/usr/local/etc/X11/xorg.conf.d/driver-vesa.conf#

[.programlisting]
....
Section "Device"
	Identifier "Card0"
	Driver     "vesa"
EndSection
....

====
+
要設定 UEFI 或 ARM(TM) 電腦使用 `scfb` 驅動程式：
+
[[x-config-video-cards-file-scfb]]
.在單檔中選擇 `scfb` 影像驅動程式
[example]
====
[.filename]#/usr/local/etc/X11/xorg.conf.d/driver-scfb.conf#

[.programlisting]
....
Section "Device"
	Identifier "Card0"
	Driver     "scfb"
EndSection
....

====

[[x-config-monitors]]
=== 顯示器

幾乎所有顯示器都支援延伸顯示辨識資料標準 (Extended Display Identification Data, EDID)，Xorg 會使用 EDID 與顯示器通訊並偵測支援的解析度與更新頻率，然後選擇最適合的設定組合使用該顯示器。

其他顯示器支援的解析度可透過在設定檔中設定想要的解析度來選擇，或者在 X 伺服器啟動之後使用 man:xrandr[1]。

[[x-config-monitors-xrandr]]
使用 man:xrandr[1]::
執行 man:xrandr[1] 不加任何參數可檢查影像輸出及已偵測到的顯示器模式清單：
+
[source,shell]
....
% xrandr
Screen 0: minimum 320 x 200, current 3000 x 1920, maximum 8192 x 8192
DVI-0 connected primary 1920x1200+1080+0 (normal left inverted right x axis y axis) 495mm x 310mm
   1920x1200     59.95*+
   1600x1200     60.00
   1280x1024     85.02    75.02    60.02
   1280x960      60.00
   1152x864      75.00
   1024x768      85.00    75.08    70.07    60.00
   832x624       74.55
   800x600       75.00    60.32
   640x480       75.00    60.00
   720x400       70.08
DisplayPort-0 disconnected (normal left inverted right x axis y axis)
HDMI-0 disconnected (normal left inverted right x axis y axis)
....
+
這個結果顯示 `DVI-0` 輸出被用來顯示解析度為 1920x1200 像素於更新頻率約 60 Hz 的畫面，未有顯示器連接到 `DisplayPort-0` 與 `HDMI-0` 接頭。
+
可使用 man:xrandr[1] 來選擇任何其他的顯示模式。例如要切換為 1280x1024 於 60 Hz：
+
[source,shell]
....
% xrandr --mode 1280x1024 --rate 60
....
+
在筆記型電腦使用外部顯示輸出到投影機是常見的作業。
+
不同裝置間輸出接頭的類型與數量也不同，給每個輸出的名稱在不同驅動程式間也不同。在某些驅動程式稱為 `HDMI-1` 的輸出在其他驅動程式則可能稱為 `HDMI1`。因此第一個步驟是執行 man:xrandr[1] 列出所有可用的輸出：
+
[source,shell]
....
% xrandr
Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
LVDS1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 193mm
   1366x768      60.04*+
   1024x768      60.00
   800x600       60.32    56.25
   640x480       59.94
VGA1 connected (normal left inverted right x axis y axis)
   1280x1024     60.02 +  75.02
   1280x960      60.00
   1152x864      75.00
   1024x768      75.08    70.07    60.00
   832x624       74.55
   800x600       72.19    75.00    60.32    56.25
   640x480       75.00    72.81    66.67    60.00
   720x400       70.08
HDMI1 disconnected (normal left inverted right x axis y axis)
DP1 disconnected (normal left inverted right x axis y axis)
....
+
已找到四個輸出：內建面板的 `LVDS1`，外接的 `VGA1`, `HDMI1` 以及 `DP1` 接頭。
+
投影機已連接至 `VGA1` 輸出，現在使用 man:xrandr[1] 來設定該輸出到投影機 (原始解析度) 並加入額外的空間到桌面的右側：
+
[source,shell]
....
% xrandr --output VGA1 --auto --right-of LVDS1
....
+
`--auto` 會選擇使用 EDID 偵測到的解析度與更新頻率。若未正確偵測解析度，可替換 `--auto` 為 `--mode` 然後給予固定值。例如大部份的投影機可使用 1024x768 解析度為，則可設定 `--mode 1024x768`。
+
man:xrandr[1] 通常會在 [.filename]#.xinitrc# 執行以在 X 啟動時設定適合的模式。

[[x-config-monitors-files]]
在檔案中設定螢幕解析度::
在設定檔設定螢幕解析度為 1024x768：
+
.在單檔中設定螢幕解析度
[example]
====
[.filename]#/usr/local/etc/X11/xorg.conf.d/screen-resolution.conf#

[.programlisting]
....
Section "Screen"
	Identifier "Screen0"
	Device     "Card0"
	SubSection "Display"
	Modes      "1024x768"
	EndSubSection
EndSection
....

====
+
少數顯示器沒有 EDID，可設定 `HorizSync` 及 `VertRefresh` 為顯示器支援的頻率範圍。
+
.手動設定顯示器頻率
[example]
====
[.filename]#/usr/local/etc/X11/xorg.conf.d/monitor0-freq.conf#

[.programlisting]
....
Section "Monitor"
	Identifier   "Monitor0"
	HorizSync    30-83   # kHz
	VertRefresh  50-76   # Hz
EndSection
....

====

[[x-config-input]]
=== 輸入裝置

[[x-config-input-keyboard]]
==== 鍵盤

[[x-config-input-keyboard-layout]]
鍵盤配置::
鍵盤上標準按鍵的位置稱做 _配置 (Layout)_。配置與其他可調整的參數列於 man:xkeyboard-config[7]。
+
預設為 United States 配置，要選擇其他的配置可在 `InputClass` 設定 `XkbLayout` 與 `XkbVariant` 選項。這會套用所有符合該類別的輸入裝置。
+
這個例子選擇 French 鍵盤配置使用 `oss` 變體。
+
.設定鍵盤配置
[example]
====
[.filename]#/usr/local/etc/X11/xorg.conf.d/keyboard-fr-oss.conf#

[.programlisting]
....
Section	"InputClass"
	Identifier	"KeyboardDefaults"
	Driver		"keyboard"
	MatchIsKeyboard	"on"
	Option		"XkbLayout" "fr"
	Option		"XkbVariant" "oss"
EndSection
....

====
+
.設定多個鍵盤配置
[example]
====
設定 United States, Spanish 與 Ukrainian 鍵盤配置，並可按 kbd:[Alt+Shift] 來切換這些配置。可使用 package:x11/xxkb[] 或 package:x11/sbxkb[] 來加強配置切換控制與目前配置的指示。

[.filename]#/usr/local/etc/X11/xorg.conf.d/kbd-layout-multi.conf#

[.programlisting]
....
Section	"InputClass"
	Identifier	"All Keyboards"
	MatchIsKeyboard	"yes"
	Option		"XkbLayout" "us, es, ua"
EndSection
....

====
+
[[x-config-input-keyboard-zap]]
從鍵盤關閉 Xorg::
X 可以使用組合鍵來關閉，預設並未設定組合鍵，因為該組合鍵與部份應用程式的鍵盤指令衝突。要開啟這個選項需要更改鍵盤 `InputDevice` 節：
+
.開啟鍵盤離開 X 功能
[example]
====
[.filename]#/usr/local/etc/X11/xorg.conf.d/keyboard-zap.conf#

[.programlisting]
....
Section	"InputClass"
	Identifier	"KeyboardDefaults"
	Driver		"keyboard"
	MatchIsKeyboard	"on"
	Option		"XkbOptions" "terminate:ctrl_alt_bksp"
EndSection
....

====

[[x11-input-mice]]
==== 滑鼠與指標裝置

有許多滑鼠參數可使用設定選項來調整，請參考 man:mousedrv[4] 來取得完整清單。

[[x11-input-mice-buttons]]
滑鼠按鍵::
滑鼠的按鍵數可在 [.filename]#xorg.conf# 的滑鼠 `InputDevice` 節設定，例如要設定按鍵數為 7：
+
.設定滑鼠按鍵數
[example]
====
[.filename]#/usr/local/etc/X11/xorg.conf.d/mouse0-buttons.conf#

[.programlisting]
....
Section "InputDevice"
	Identifier  "Mouse0"
	Option      "Buttons" "7"
EndSection
....

====

[[x-config-manual-configuration]]
=== 手動設定

在某些情況 Xorg 的自動設定無法在特定硬體上運作，或需要使用不同的設定。針對這些情況會建立自訂的設定檔。

[WARNING]
====

非必要請勿手動建立設定檔，非必要的手動設置會造成運作不正常。
====

設定檔可由 Xorg 根據偵測到的硬體產生，這個檔案對一開始自訂設定很有幫助。

產生 [.filename]#xorg.conf#：

[source,shell]
....
# Xorg -configure
....

設定檔會儲存至 [.filename]#/root/xorg.conf.new#，做任何需要的更改，然後使用以下指令測試該檔案：

[source,shell]
....
# Xorg -config /root/xorg.conf.new
....

在新設定檔調整與測試過後，便可分開成較小的檔案放置到正常的位置 [.filename]#/usr/local/etc/X11/xorg.conf.d/#。

[[x-fonts]]
== 在 Xorg 使用字型

[[type1]]
=== Type1 字型

由於 Xorg 內建的預設字型用在典型的桌面出版應用程式並不是很理想，大字型會呈現鋸齒狀邊緣，看起來很不專業，小字型幾乎完全看不清楚。不過，這裡有幾個免費高品質的 Type1 (PostScript(TM)) 字型可用，且能容易的在 Xorg 使用。例如，URW 字型集 (Times Roman(TM), Helvetica(TM), Palatino(TM) 及其他)。 Freefont 字型集 (package:x11-fonts/freefonts[]) 包含了更多的字型，但其中大部分是給圖形軟體如 GIMP 所使用的字型，並不能完全作為螢幕字型使用。此外，Xorg 可以簡單的設定使用 TrueType(TM) 字型。更多有關本主題的詳細資訊，請參考 man:X[7] 操作手冊或 <<truetype>>。

要由 Binary 套件安裝上述的 Type1 字型集可執行以下指令：

[source,shell]
....
# pkg install urwfonts
....

或由 Port 套件集編譯，可執行以下指令：

[source,shell]
....
# cd /usr/ports/x11-fonts/urwfonts
# make install clean
....

同樣的安裝方式也適用 Freefont 或其他字型集。要讓 X 伺服器偵測到這些新安裝的字型，可加入適當的設定到 X 伺服器設定檔 ([.filename]#/etc/X11/xorg.conf#)，內容為：

[.programlisting]
....
FontPath "/usr/local/shared/fonts/urwfonts/"
....

或者在 X session 的指令列執行：

[source,shell]
....
% xset fp+ /usr/local/shared/fonts/urwfonts
% xset fp rehash
....

這樣便可，但在 X session 關閉時將會失效，除非將該設定加入啟動檔 (一般的 `startx` session 可在 [.filename]#~/.xinitrc# 設定，若透過圖型化登入管理程式如 XDM 登入時則在 [.filename]#~/.xsession# 設定)。第三種方式是使用新 [.filename]#/usr/local/etc/fonts/local.conf#，如 <<antialias>> 的示範。

[[truetype]]
=== TrueType(TM) 字型

Xorg 內建支援繪製 TrueType(TM) 字型，目前有兩個模組可以支援這項功能。在本例中使用 freetype 模組，由於此模組與其他字型繪製後端較為一致。要開啟 freetype 模組只需要將下行加入到 [.filename]#/etc/X11/xorg.conf# 中的 `"Module"` section。

[.programlisting]
....
Load  "freetype"
....

現在要建立一個儲存 TrueType(TM) 字型的目錄 (例如，[.filename]#/usr/local/shared/fonts/TrueType#) 然後複製所有 TrueType(TM) 字型到這個目錄。要注意 TrueType(TM) 字型並無法直接取自 Apple(TM)Mac(TM)，Xorg 使用的字型必須為 UNIX(TM)/MS-DOS(TM)/Windows(TM) 的格式。檔案複製到讓目錄之後，使用 mkfontscale 來建立 [.filename]#fonts.dir# 來讓 X 字型繪製程式知道安裝了新的檔案。`mkfontscale` 可用套件的方式安裝：

[source,shell]
....
# pkg install mkfontscale
....

然後在目錄中建立 X 字型檔的索引：

[source,shell]
....
# cd /usr/local/shared/fonts/TrueType
# mkfontscale
....

接著加入 TrueType(TM) 目錄到字型路徑。這個動作與 <<type1>> 中所介紹的方式相同：

[source,shell]
....
% xset fp+ /usr/local/shared/fonts/TrueType
% xset fp rehash
....

或直接加入 `FontPath` 一行到 [.filename]#xorg.conf#。

現在 Gimp, Apache OpenOffice 以及其他 X 應用程式應可以辨識到已安裝的 TrueType(TM) 字型。極小的字型 (以高解析度在網頁中顯示的文字) 與極大的字型 (在 StarOffice(TM) 中) 現在會看起來比較像樣了。

[[antialias]]
=== 反鋸齒字型

所有可在 [.filename]#/usr/local/shared/fonts/# 及 [.filename]#~/.fonts/# 找到的 Xorg 字型均可在 Xft-aware 的應用程式使用反鋸齒的效果。大多最近的應用程式均為 Xft-aware 的，包括 KDE, GNOME 以及 Firefox。

要控制那一些字型要做反鋸齒或設定反鋸齒的屬性，需建立 [.filename]#/usr/local/etc/fonts/local.conf# 檔案 (若檔案存在則編輯)。在這個檔案中可以調整 Xft 字型系統的數項進階功能，本章節僅介紹部份簡單的項目，要取得進一步資訊，請參考 man:fonts-conf[5]。

這個檔案必須使用 XML 格式，小心文字大小寫，且要確定所有標籤均有正常結尾。檔案的開頭使用常見的 XML 檔首，接著為 DOCTYPE 定義，然後是 `<fontconfig>` 標籤：

[.programlisting]
....
<?xml version="1.0"?>
      <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
      <fontconfig>
....

如同前面所提到的，所有在 [.filename]#/usr/local/shared/fonts/# 與 [.filename]#~/.fonts/# 的字型均可在 Xft-aware 的應用程式做反鋸齒效果，若您想要加入除了上兩者以外的目錄，可加入如下行設定到 [.filename]#/usr/local/etc/fonts/local.conf#：

[.programlisting]
....
<dir>/path/to/my/fonts</dir>
....

加入新字型及額外的新字型目錄之後，需重新建立字型快取：

[source,shell]
....
# fc-cache -f
....

反鋸齒效果會讓文字的邊緣變模糊，這會讓非常小的文字更能閱讀且去除大型文字的 "鋸齒"，但套用在一般的文字可能會造成眼睛的疲勞。要排除小於 14 點的字型大小使用反鋸齒效果，可加入這些行：

[.programlisting]
....
        <match target="font">
	    <test name="size" compare="less">
		<double>14</double>
	    </test>
	    <edit name="antialias" mode="assign">
		<bool>false</bool>
	    </edit>
	</match>
	<match target="font">
	    <test name="pixelsize" compare="less" qual="any">
		<double>14</double>
	    </test>
	    <edit mode="assign" name="antialias">
		<bool>false</bool>
	    </edit>
	</match>
....

反鋸齒所產生的間距對於部份等寬字型並不合適，尤其是在使用 KDE 時會成為一個問題。可能的修正方式是強制這類字型的間距為 100，可加入以下行：

[.programlisting]
....
	<match target="pattern" name="family">
	   <test qual="any" name="family">
	       <string>fixed</string>
	   </test>
	   <edit name="family" mode="assign">
	       <string>mono</string>
	   </edit>
	</match>
	<match target="pattern" name="family">
	    <test qual="any" name="family">
		<string>console</string>
	    </test>
	    <edit name="family" mode="assign">
		<string>mono</string>
	    </edit>
	</match>
....

(這會設定等寬字型的其他常用名稱為 `"mono"`)，然後加入：

[.programlisting]
....
         <match target="pattern" name="family">
	     <test qual="any" name="family">
		 <string>mono</string>
	     </test>
	     <edit name="spacing" mode="assign">
		 <int>100</int>
	     </edit>
	 </match>
....

部份字型，如 Helvetica，在使用反鋸齒時可能會發生問題，通常會呈現像垂直切成兩半的字型，最差還可能會導致應用程式當掉。要避免這個問題，可考慮加入以下設定到 [.filename]#local.conf#：

[.programlisting]
....
         <match target="pattern" name="family">
	     <test qual="any" name="family">
		 <string>Helvetica</string>
	     </test>
	     <edit name="family" mode="assign">
		 <string>sans-serif</string>
	     </edit>
	 </match>
....

編輯 [.filename]#local.conf# 完之後，請確認有使用 `</fontconfig>` 標籤結尾，若沒有使用會讓所做的更改被忽略。

使用者可透過建立自己的 [.filename]#~/.config/fontconfig/fonts.conf# 來加入個人化的設定，此檔案使用與上述說明相同的 XML 格式。

最後一點：若有使用 LCD 螢幕，可能會想要使用子像素取樣 (Sub-pixel sampling)，這基本上會分開處理 (水平分隔) 紅、綠、藍色彩組成來提高垂直解析度，結果可能是無法預料的。要開啟這個功能，加入下行到 [.filename]#local.conf# 的任一處：

[.programlisting]
....
	 <match target="font">
	     <test qual="all" name="rgba">
		 <const>unknown</const>
	     </test>
	     <edit name="rgba" mode="assign">
		 <const>rgb</const>
	     </edit>
	 </match>
....

[NOTE]
====
依據不同的顯示器類型可能會需要將 `rgb` 更改為 `bgr`, `vrgb` 或 `vbgr`：可實驗看看然後看那一個效果最好。
====

[[x-xdm]]
== X 顯示管理程式

Xorg 提供了 X 顯示管理程式 (X Display Manager, XDM)，可用來做登入階段的管理。XDM 提供了一個圖型化的介面來選擇要連結的顯示伺服器以及輸入認証資訊 (登入與密碼)。

本節將示範如何設定 FreeBSD 的 X 顯示管理程式。部份桌面環境會提供自己的圖型化登入管理程式，請參考 <<x11-wm-gnome>> 取得如何設定 GNOME 顯示管理程式 (GNOME Display Manager) 的操作方式以及 <<x11-wm-kde>> 取得如何設定 KDE 顯示管理程式 (KDE Display Manager) 的操作方式。

=== 設定 XDM

要安裝 XDM 可使用 package:x11/xdm[] 套件或 Port。安裝完成之後，可設定 XDM 在開機時執行，只需編輯 [.filename]#/etc/ttys# 中的此項目：

[source,shell]
....
ttyv8   "/usr/local/bin/xdm -nodaemon"  xterm   off secure
....

更改關 (`off`) 為開 (`on`) 然後儲存編輯。在此項目中的 `ttyv8` 代表 XDM 會在第 9 個虛擬終端機執行。

XDM 的設定目錄位於 [.filename]#/usr/local/etc/X11/xdm#。此目錄中包含數個可用來更改 XDM 行為與外觀的檔案以及在 XDM 執行時用來設定桌面的一些 Script 及程式，<<xdm-config-files>> 摘要了每個檔案的功能。這些檔案正確的語法與用法在 man:xdm[1] 有說明。

[[xdm-config-files]]
.XDM 設定檔
[cols="1,1", frame="none", options="header"]
|===
| 檔案
| 說明

|[.filename]#Xaccess#
|連線到 XDM 所需的通訊協定稱做 X 顯示管理程式連線通訊協定 (X Display Manager Connection Protocol, XDMCP)，此檔案為客戶端認証規則，用來控制來自遠端機器的 XDMCP 連線。預設此檔案並不允許任何遠端的客戶端連線。

|[.filename]#Xresources#
|此檔案控制 XDM 顯示選擇器及登入畫面的外觀。預設的設定簡單的矩形登入視窗，上方用較大的字型顯示機器的主機名稱，並在下方顯示 "Login:" 與 "Password:" 提示。此檔案的格式與 Xorg 說明文件中說明的 app-defaults 檔相同。

|[.filename]#Xservers#
|登入選擇時在選擇器上要提供的本地及遠端顯示清單。

|[.filename]#Xsession#
|預設的登入階段 Script，使用者登入之後由 XDM 執行。這會指向使用者自訂的登入階段 Script 於 [.filename]#~/.xsession#。

|[.filename]#Xsetup_#*
|用來在顯示選擇器與登入介面之前自動執行應用程式的 Script。每一個顯示各有一個 Script，名稱為 [.filename]#Xsetup_*#，其中 `*` 為本地顯示編號。正常情況這些 Script 會在背景執行一兩個程式，例如 `xconsole`。

|[.filename]#xdm-config#
|用來設定所有在此機器上執行的顯示的全域設定檔。

|[.filename]#xdm-errors#
|內含由伺服器程式產生的錯誤訊息，若 XDM 嘗試啟動的顯示沒有回應，可查看此檔案來取得錯誤訊息。以登入階段為基礎，這些訊息也同樣會寫入至使用者的 [.filename]#~/.xsession-errors#。

|[.filename]#xdm-pid#
|XDM 的執行程序 ID。
|===

=== 設定遠端存取

預設只有同系統的使用者可以使用 XDM 登入。要開啟讓其他系統的使用者可連線到顯示伺服器，需編輯存取控制規則及開啟連線傾聽程式。

要設定 XDM 傾聽任何遠端的連線，在 [.filename]#/usr/local/etc/X11/xdm/xdm-config# 中的 `DisplayManager.requestPort` 行前加上 `!` 來註解該行：

[source,shell]
....
! SECURITY: do not listen for XDMCP or Chooser requests
! Comment out this line if you want to manage X terminals with xdm
DisplayManager.requestPort:     0
....

儲存編輯並重新啟動 XDM，要限制遠端存取，請看 [.filename]#/usr/local/etc/X11/xdm/Xaccess# 中的範例項目，並參考 man:xdm[1] 取得進一步資訊。

[[x11-wm]]
== 桌面環境

本節將介紹如何在 FreeBSD 系統安裝三種熱門的桌面環境。一套桌面環境的範圍可從簡單的視窗管理程式到完整的桌面應用程式集。有上百套的桌面環境可在 Port 套件集的 [.filename]#x11-wm# 分類取得。

[[x11-wm-gnome]]
=== GNOME

GNOME 是一個擁有友善使用者介面的的桌面環境，它包括用於啟動應用程式和顯示狀態的面板、一系列工具與應用程序及一套可讓應用程式更容易進行合作、相互一致的協定。更多有關 FreeBSD GNOME 的訊息可在 https://www.FreeBSD.org/gnome[https://www.FreeBSD.org/gnome] 取得，該網站包含了有關在 FreeBSD 安裝、設定和管理 GNOME 的額外文件。

這套桌面環境可以從套件安裝：

[source,shell]
....
# pkg install gnome3
....

也可使用以下指令從 Port 編譯 GNOME，GNOME 是一套大型的應用程式，即使在速度較快的電腦上，也會需要花費一些時間編譯。

[source,shell]
....
# cd /usr/ports/x11/gnome3
# make install clean
....

GNOME 需要掛載 [.filename]#/proc#。加入下行到 [.filename]#/etc/fstab# 讓系統啟動時會自動掛載這個檔案系統：

[.programlisting]
....
proc           /proc       procfs  rw  0   0
....

GNOME 使用了 D-Bus 以及 HAL 的 Message bus 與 Hardware abstraction。這兩個應用程式會隨著 GNOME 的相依一併自動安裝，但需要在 [.filename]#/etc/rc.conf# 開啟，這樣在系統開機時才會啟動：

[.programlisting]
....
dbus_enable="YES"
hald_enable="YES"
....

安裝完之後，需設定讓 Xorg 啟動 GNOME。最簡單的方法是開啟 GNOME Display Manager, GDM，該程式已做為 GNOME 套件或 Port 的一部份安裝了，可加入下行到 [.filename]#/etc/rc.conf# 來開啟：

[.programlisting]
....
gdm_enable="YES"
....

通常也會需要啟動所有的 GNOME 服務，可加入下行到 [.filename]#/etc/rc.conf#：

[.programlisting]
....
gnome_enable="YES"
....

GDM 則會在系統開機時自動啟動。

第二種啟動 GNOME 的方法是在設定完 [.filename]#~/.xinitrc# 後在指令列輸入 `startx`。若這個檔案已經存在，替換啟動目前視窗管理程式的那一行，改為啟動 [.filename]#/usr/local/bin/gnome-session#。若檔案不存在，則使用以下指令建立一個：

[source,shell]
....
% echo "exec /usr/local/bin/gnome-session" > ~/.xinitrc
....

第三種方法是使用 XDM 做為顯示管理程式，在這個方法需要建立一個可執行的 [.filename]#~/.xsession#：

[source,shell]
....
% echo "exec /usr/local/bin/gnome-session" > ~/.xsession
....

[[x11-wm-kde]]
=== KDE

KDE 是另一套易於使用的桌面環境。這個桌面環境提供了一致外觀的應用程式、標準化的選單和工具列、組合鍵、配色方案、國際化與集中、對話框導向的桌面設定。更多有關 KDE 可在 http://www.kde.org/[http://www.kde.org/] 取得。要取得 FreeBSD 特定的資訊，則可參考 http://freebsd.kde.org/[http://freebsd.kde.org]。

要安裝 KDE 套件，請輸入：

[source,shell]
....
# pkg install x11/kde5
....

或者要使用 KDE Port 編譯，可使用以下指令，採用 Port 方式安裝會有選單可以選擇要安裝的元件。KDE 是一個大型的應用程式，即使在較快的電腦上仍需要花費一段時間來編譯。

[source,shell]
....
# cd /usr/ports/x11/kde5
# make install clean
....

KDE 需要掛載 [.filename]#/proc#。加入下行到 [.filename]#/etc/fstab# 讓系統啟動時會自動掛載這個檔案系統：

[.programlisting]
....
proc           /proc       procfs  rw  0   0
....

KDE 使用了 D-Bus 以及 HAL 的 Message bus 與 Hardware abstraction。這兩個應用程式會隨著 KDE 的相依一併自動安裝，但需要在 [.filename]#/etc/rc.conf# 開啟，這樣在系統開機時才會啟動：

[.programlisting]
....
dbus_enable="YES"
hald_enable="YES"
....

自 KDE Plasma 5 開始，KDE Display Manager, KDM 便停止開發，可能的替代方案為 SDDM，要安裝該套件可輸入：

[source,shell]
....
# pkg install x11/sddm
....

加入下行到 [.filename]#/etc/rc.conf#：

[.programlisting]
....
sddm_enable="YES"
....

第二種執行 KDE 的方法是在在指令列輸入 `startx`。要採用這個方式，需要加入下行到 [.filename]#~/.xinitrc#：

[.programlisting]
....
exec ck-launch-session startkde
....

第三種啟動 KDE 的方式是透過 XDM，要使用這個方法需要建立一個可執行的 [.filename]#~/.xsession# 如下：

[source,shell]
....
% echo "exec ck-launch-session startkde" > ~/.xsession
....

啟動 KDE 之後，請參考內建的說明系統來取得更多有關如何使用各種選單及應用程式的資訊。

[[x11-wm-xfce]]
=== Xfce

Xfce 是以 GNOME 使用的 GTK +工具包做為基礎所開發的桌面環境，但是它更輕巧且提供了一種簡單、高效、易於使用的桌面。它可完全自訂設定、附有選單、Applet 及應用程式啟動器的主面板、提供檔案管理程式和音效管理程式並且可設定主題。由於它是快速、輕巧、高效的桌面環境，因此它非常適合有記憶體限制的較舊或較慢機器。更多有關 Xfce 的資訊可至 http://www.xfce.org/[http://www.xfce.org] 取得。

要安裝 Xfce 套件：

[source,shell]
....
# pkg install xfce
....

或者使用 Port 編譯：

[source,shell]
....
# cd /usr/ports/x11-wm/xfce4
# make install clean
....

Xfce 使用了 D-Bus 作為 Message bus，由於是 Xfce 的相依，因此會自動安裝，但仍要在 [.filename]#/etc/rc.conf# 中開啟該程式才會在系統開機時啟動：

[.programlisting]
....
dbus_enable="YES"
....

不像 GNOME 或 KDE，Xfce 並沒有自己的登入管理程式，要能用 `startx` 指令列啟動 Xfce 之前需先加入其項目到 [.filename]#~/.xinitrc#：

[source,shell]
....
% echo ". /usr/local/etc/xdg/xfce4/xinitrc" > ~/.xinitrc
....

另一種方式是使用 XDM，要設定這個方式需建立一個可執行的 [.filename]#~/.xsession#：

[source,shell]
....
% echo ". /usr/local/etc/xdg/xfce4/xinitrc" > ~/.xsession
....

[[x-compiz-fusion]]
== 安裝 Compiz Fusion

要令使用桌面電腦更令人愉快的方法是用炫麗的 3D 效果。

安裝 Compiz Fusion 套件非常簡單，但設定該套件需要一些未在 Port 說明文件中說明的步驟。

[[x-compiz-video-card]]
=== 設定 FreeBSD nVidia 驅動程式

桌面特效需要使用相當程度的顯示卡，對於以 nVidia 為基礎的顯示卡，需要使用專用的驅動程序來取得較佳的性能。其他顯示卡的使用可以跳過這一節，並繼續 [.filename]#xorg.conf# 設定。

要知道需要那一種 nVidia 驅動程式可以查看 extref:{faq}[FAQ 中與此主題相關的問題, idp59950544]。

知道您的顯示卡要使用那種驅動程式才是正確的之後，接下來的安裝程序跟安裝其他套件一樣簡單。

例如，要安裝最新的驅動程式：

[source,shell]
....
# pkg install x11/nvidia-driver
....

驅動程式會建立一個需要在系統啟動時載入的核心模組，加入下行到 [.filename]#/boot/loader.conf#：

[.programlisting]
....
nvidia_load="YES"
....

[NOTE]
====
要立即載入核心模組到執行中的核心可以下 `kldload nvidia` 指令，但是需要注意，若不是在開機時載入，某些 Xorg 版本會無法正常運作。因此編輯完 [.filename]#/boot/loader.conf# 之後建議要重新開機。
====

核心模組載入之後，您只需要更改 [.filename]#xorg.conf# 的其中一行來開啟專用的驅動程式：

找到 [.filename]#/etc/X11/xorg.conf# 中的下行：

[.programlisting]
....
Driver      "nv"
....

然後更改該行為：

[.programlisting]
....
Driver      "nvidia"
....

如往常般啟動 GUI，您應該會看到 nVidia 的啟動畫面，其他東西應如往常般運作。

[[xorg-configuration]]
=== 設定 xorg.conf 來啟動桌面特效

要開啟 Compiz Fusion 需要修改 [.filename]#/etc/X11/xorg.conf#：

加入以下 Section 來開啟合成特效：

[.programlisting]
....
Section "Extensions"
    Option         "Composite" "Enable"
EndSection
....

找到 "Screen" section，長的應該如下所示：

[.programlisting]
....
Section "Screen"
    Identifier     "Screen0"
    Device         "Card0"
    Monitor        "Monitor0"
    ...
....

然後加入以下兩行 (在"Monitor" 之後)：

[.programlisting]
....
DefaultDepth    24
Option         "AddARGBGLXVisuals" "True"
....

找到您欲使用的螢幕解析度所在的 "Subsection"，例如，您想要使用 1280x1024，則找到如下所示的 Section。若想要使用的解析度不在任何 Subsection 之中，您可以手動加入對應的項目：

[.programlisting]
....
SubSection     "Display"
    Viewport    0 0
    Modes      "1280x1024"
EndSubSection
....

桌面合成需要 24 bit 的色彩深度，更改上述 Subsection 為：

[.programlisting]
....
SubSection     "Display"
    Viewport    0 0
    Depth       24
    Modes      "1280x1024"
EndSubSection
....

最後確認在 "Module" section 中已經載入 "glx" 與 "extmod" 模組：

[.programlisting]
....
Section "Module"
    Load           "extmod"
    Load           "glx"
    ...
....

前面所述的動作可以執行 package:x11/nvidia-xconfig[] 來自動完成 (使用 root)：

[source,shell]
....
# nvidia-xconfig --add-argb-glx-visuals
# nvidia-xconfig --composite
# nvidia-xconfig --depth=24
....

[[compiz-fusion]]
=== 安裝與設定 Compiz Fusion

安裝 Compiz Fusion 如同安裝其他套件一樣簡單：

[source,shell]
....
# pkg install x11-wm/compiz-fusion
....

安裝完成之後，開啟您的圖型化桌面，然後在終端機的畫面輸入以下指令 (使用一般使用者)：

[source,shell]
....
% compiz --replace --sm-disable --ignore-desktop-hints ccp &
% emerald --replace &
....

由於您的視窗管理程式 (例如：Metacity，若您使用 GNOME) 會被替換成 Compiz Fusion，您的螢幕會閃爍幾秒。而 Emerald 會處理視窗的裝飾 (例如：關閉、最小化、最大化按鈕、標題列及其他相關)。

您或許可以將這些指令改寫成較小的 Script 然後在啟動時自動執行 (加到 GNOME 桌面的 "Sessions" 中)：

[.programlisting]
....
#! /bin/sh
compiz --replace --sm-disable --ignore-desktop-hints ccp &
emerald --replace &
....

儲存這個 Script 到您的家目錄所在位置，例如 [.filename]#start-compiz#，然後讓該檔案可以執行：

[source,shell]
....
% chmod +x ~/start-compiz
....

接著使用 GUI 將該檔案加入啟動程式 [.guimenuitem]#Startup Programs# (位於 GNOME 桌面的系統 [.guimenuitem]#System#, 偏好設定 [.guimenuitem]#Preferences#, 工作階段 [.guimenuitem]#Sessions#)。

要選擇所想使用的特效與相關設定，可執行 (一樣使用一般使用者) Compiz Config 設定管理程式 Compiz Config Settings Manager：

[source,shell]
....
% ccsm
....

[NOTE]
====
在 GNOME 中，也可在系統 [.guimenuitem]#System#, 偏好設定 [.guimenuitem]#Preferences# 選單中找到。
====

若您在編譯時選擇了 "gconf support"，您便可使用 `gconf-editor` 在 `apps/compiz` 下查看設定。

[[x11-understanding]]
== 疑難排解

若滑鼠無法使用，您將需要做第一次設定方可繼續。在最近的 Xorg 版本，使用自動偵測裝置會忽略在 [.filename]#xorg.conf# 中的 `InputDevice` section。要採用舊的方式，需在此檔案加入下行到 `ServerLayout` 或 `ServerFlags` section：

[.programlisting]
....
Option "AutoAddDevices" "false"
....

輸入裝置便可如先前版本一樣設定，連同其他所需的選項 (如：切換鍵盤配置)。

[NOTE]
====
如同前面有說明過，hald Daemon 預設會自動偵測您的鍵盤，因此您的鍵盤配置或型號可能不正確，桌面環境如 GNOME, KDE 或 Xfce 會提供設定鍵盤的工具。即使如此，還是有可能透過 man:setxkbmap[1] 工具或 hald 的設定規則的協助來直接設定鍵盤屬性。

舉例來說，若有人想要使用 PC 102 鍵的鍵盤，採用法語 (French) 配置，我們便需要建立一個給 hald 的鍵盤設定檔，名稱為 [.filename]#x11-input.fdi#，然後儲存到 [.filename]#/usr/local/etc/hal/fdi/policy# 目錄。這個檔案中應要有以下幾行：

[.programlisting]
....
<?xml version="1.0" encoding="utf-8"?>
<deviceinfo version="0.2">
  <device>
    <match key="info.capabilities" contains="input.keyboard">
	  <merge key="input.x11_options.XkbModel" type="string">pc102</merge>
	  <merge key="input.x11_options.XkbLayout" type="string">fr</merge>
    </match>
  </device>
</deviceinfo>
....

若這個檔案已經存在，只需要複製並貼上您的檔案中有關鍵盤設定的那幾行。

您會需要重新啟動您的機器來讓 hald 讀取這個檔案。

也是可以從 X 終端機或 Script 下指令來做同樣的設定：

[source,shell]
....
% setxkbmap -model pc102 -layout fr
....

[.filename]#/usr/local/shared/X11/xkb/rules/base.lst# 中列出了各種可用的鍵盤、配置與設定。
====

現在可以開始調整 [.filename]#xorg.conf.new# 設定檔，在文字編輯器如 man:emacs[1] 或 man:ee[1] 開啟該設定檔。若顯示器是不支援自動偵測同步頻率 (Sync frequency) 的舊或特殊的型號，同步頻率的設定可以手動加到 [.filename]#xorg.conf.new# 的 `"Monitor"` section：

[.programlisting]
....
Section "Monitor"
	Identifier   "Monitor0"
	VendorName   "Monitor Vendor"
	ModelName    "Monitor Model"
	HorizSync    30-107
	VertRefresh  48-120
EndSection
....

多數顯示器都支援自動偵測同步頻率，並不需要手動設定這些數值。對於那些不支援自動偵測的顯示器，請輸入由製造商提供的數值來避免損壞顯示器。

X 允許在支援的顯示器使用 DPMS (Energy Star) 功能，man:xset[1] 程式可以控制逾時並可強制待機 (Standby)、暫停 (Suspend) 或關閉 (Off) 模式。若您想要為您的顯示器開啟 DPMS 功能，您需要加入下行到顯示器 (Monitor) 的 Section：

[.programlisting]
....
Option       "DPMS"
....

在編輯器還未關閉 [.filename]#xorg.conf.new# 設定檔前，選擇想要使用的預設解析度及色彩深度。這些項目可在 `"Screen"` section 定義：

[.programlisting]
....
Section "Screen"
	Identifier "Screen0"
	Device     "Card0"
	Monitor    "Monitor0"
	DefaultDepth 24
	SubSection "Display"
		Viewport  0 0
		Depth     24
		Modes     "1024x768"
	EndSubSection
EndSection
....

`DefaultDepth` 關鍵字代表預設執行要使用的色彩深度，這個設定可以被 man:Xorg[1] 的指令列參數 `-depth` 覆蓋。`Modes` 關鍵字代表執行要使用的解析度，注意，只有 VESA 標準模式才支援目標系統的繪圖硬體來定義解析度。在上述的例子中，預設使用的色彩深度為每像素 24 bit，這個色彩深度可用的解析度為 1024 x 768 像素。

最後，儲存設定檔並使用測試模式來測試上述的設定。

[NOTE]
====
有一個工具可以協助您診斷問題，那就是 Xorg 日誌檔。該日誌檔中記錄了 Xorg 連接的每個裝置的資訊。Xorg 記錄檔名稱的格式為 [.filename]#/var/log/Xorg.0.log#，確切的記錄檔名會可能從 [.filename]#Xorg.0.log# 到 [.filename]#Xorg.8.log# 以此類推。
====

若一且運作正常，設定檔需要安裝到 man:Xorg[1] 會尋找的常用設定檔位置，通常是 [.filename]#/etc/X11/xorg.conf# 或 [.filename]#/usr/local/etc/X11/xorg.conf#。

[source,shell]
....
# cp xorg.conf.new /etc/X11/xorg.conf
....

現在已經完成了 Xorg 的設定程序。Xorg 現在可以使用 man:startx[1] 工具啟動。Xorg 伺服器也可以使用 man:xdm[1] 來啟動。

=== 設定 Intel(TM)`i810` 繪圖晶片組

要設定 Intel(TM) i810 整合晶片組需要使用 [.filename]#agpgart# AGP 程式介面來控制 Xorg 驅動該顯示卡。請參考 man:agp[4] 驅動程式操作手冊來取得更多詳細資訊。

這也可讓您可以設定任何其他繪圖卡的硬體。注意，在未編譯 man:agp[4] 到核心的系統，並無法使用 man:kldload[8] 來載入該模組，因此驅動程式必須在開機時便在核心啟動，所以需要透過編譯或使用 [.filename]#/boot/loader.conf# 來載入。

=== 加入寬螢幕平板顯示器到設定檔

此章節會需要有一些進階的設定知識，若嘗試使用上述的標準設定工具仍無法產生可運作的設定，在日誌檔中應有足夠的資訊可運用來讓顯示卡運作。在此會需要使用文字編輯器。

目前使用寬螢幕 (WSXGA, WSXGA+, WUXGA, WXGA, WXGA+, et.al.) 格式支援的 16:10 及 10:9 格式或其他的寬高比可會有問題。例如一些 16:10 寬高比常見的螢幕解析度：

* 2560x1600
* 1920x1200
* 1680x1050
* 1440x900
* 1280x800

在某些時候，可以簡單的將這些要使用的解析度以 `Mode` 加入到 Section "Screen"：

[.programlisting]
....
Section "Screen"
Identifier "Screen0"
Device     "Card0"
Monitor    "Monitor0"
DefaultDepth 24
SubSection "Display"
	Viewport  0 0
	Depth     24
	Modes     "1680x1050"
EndSubSection
EndSection
....

Xorg 能夠從寬螢幕設定取得解析度資訊 (透過 I2C/DDC)，因此能夠知道螢幕能處理的頻率及解析度。

若驅動程式中不存在那些螢幕能處理的 `ModeLines`，則需要給 Xorg 一點提示。透過 [.filename]#/var/log/Xorg.0.log# 可以取得足夠的資訊來手動建立可運作的 `ModeLine`。只需要在日誌檔中找到類似以下的訊息：

[.programlisting]
....
(II) MGA(0): Supported additional Video Mode:
(II) MGA(0): clock: 146.2 MHz   Image Size:  433 x 271 mm
(II) MGA(0): h_active: 1680  h_sync: 1784  h_sync_end 1960 h_blank_end 2240 h_border: 0
(II) MGA(0): v_active: 1050  v_sync: 1053  v_sync_end 1059 v_blanking: 1089 v_border: 0
(II) MGA(0): Ranges: V min: 48  V max: 85 Hz, H min: 30  H max: 94 kHz, PixClock max 170 MHz
....

這些資訊稱作 EDID 資訊，使用 EDIT 資訊建立 `ModeLine` 只需要將數據使用正確的順序放入：

[.programlisting]
....
ModeLine <name> <clock> <4 horiz. timings> <4 vert. timings>
....

將資訊放入之後，本例中 `Section "Monitor"` 中的 `ModeLine` 會看起來像這樣：

[.programlisting]
....
Section "Monitor"
Identifier      "Monitor1"
VendorName      "Bigname"
ModelName       "BestModel"
ModeLine        "1680x1050" 146.2 1680 1784 1960 2240 1050 1053 1059 1089
Option          "DPMS"
EndSection
....

便完成編輯的步驟，接著需要在您的寬螢幕顯示器啟動 X。

[[compiz-troubleshooting]]
=== Compiz Fusion 疑難排解

==== 我已經安裝了 Compiz Fusion，但在執行了您所提到的指令後，我的視窗的標題列與按鈕便消失了。是那裡有問題?

您可能忘記在 [.filename]#/etc/X11/xorg.conf# 中的設定。請重新檢查這個檔案，特別是 `DefaultDepth` 及 `AddARGBGLXVisuals` 指令項。

==== 當我執行指令來啟動 Compiz Fusion，X 伺服器便當掉了，然後我又返回 Console。是那裡有問題?

若您檢查 [.filename]#/var/log/Xorg.0.log#，您可能可以找到當 X 啟動時所發生的錯誤訊息。最常發生的錯誤會是：

[source,shell]
....
(EE) NVIDIA(0):     Failed to initialize the GLX module; please check in your X
(EE) NVIDIA(0):     log file that the GLX module has been loaded in your X
(EE) NVIDIA(0):     server, and that the module is the NVIDIA GLX module.  If
(EE) NVIDIA(0):     you continue to encounter problems, Please try
(EE) NVIDIA(0):     reinstalling the NVIDIA driver.
....

會發生這個情形通常是因為您升級了 Xorg，您需要重新安裝 package:x11/nvidia-driver[] 套件來重新編譯 glx。
