Xorg/指南
Xorg是X Window server ,它允许用户通过他们的指尖创造一个图形环境。本指南解释了什么是Xorg,如何安装它,以及各种配置选项。
X Window server 是什么?
图形VS命令行
一般来说,大多数用户可能都有点害怕在命令行界面 (CLI) 敲命令。它为什么不能够按照自己的方式,比如用鼠标指向并点击?这难道不是Gentoo(和大多数的Linux发行版)提供的自由吗?嗯,当然可以。
刚接触 Linux 的用户最大的惊喜之一是:图形用户界面只不过是在系统运行的应用程序(或在某些情况下是一组应用程序)。它不是 Linux 内核的一部分或任何其他的内部系统组件。也就是说,GUI 是解锁工作站图形功能的强大工具。
标准是重要的,一个标准的显示在屏幕上的绘图和移动窗口,需要通过鼠标,键盘,和其他基本的东西来实现。但重要的方面已经被创建并命名为 X 窗口系统,通常简称为 X11 或只是 X。它被世界各地的 Unix,Linux,和类 Unix 操作系统广泛使用。
这个程序为Linux用户提供运行图形界面的能力,Xorg-X11使用X11的接口和标准,是XFree86项目的一个分支。 XFree86使用的许可证,可能无法与GPL许可兼容;因我们此建议使用Xorg。XFree86 软件包不再通过 Gentoo 存储库提供。
X.org 项目
X.org 项目旨在创建和维护一个自由、可再发行的并且开源的 X11。它是一个开放源码,基于X11桌面所需要的基本软件。
Xorg在一个你想运行的硬件和图形软件之间提供了一个接口。除此之外,Xorg也是一个完全的Network-aware,这意味着你可以一个系统上运行一个应用程序,并且还能同时查看其他不同的系统。
安装
在安装 Xorg 之前,需要为系统做一些准备。首先设置内核,使其支持输入设备和显卡。然后准备配置 /etc/portage/make.conf,使驱动程序和 Xorg 包正确编译并安装。
输入驱动程序支持
您将需要通过对您的内核配置更改,来激活对事件接口(CONFIG_INPUT_EVDEV) 的支持。如果你不知道如何配置你的内核,请看内核配置指南。
Device Drivers --->
Input device support --->
<*> Event interface
内核模块设置
现代开源的显卡驱动程序依赖于内核模块(KMS)的设置。 KMS提供了改进的图形化引导,更快的用户切换,内置framebuffer终端,便于从控制台Xorg的无缝切换和其他功能。
Verify legacy framebuffer drivers have been disabled
KMS与传统的帧缓冲驱动程序冲突,必须在你的内核配置中保持disable。
首先,准备为你的内核配置好KMS。你必须要做这一步,无论你正在使用哪个Xorg显卡驱动程序。
Device Drivers --->
Graphics support --->
Frame Buffer Devices --->
<*> Support for frame buffer devices --->
## (禁用包括 VGA、 英特尔、 NVIDIA、 ATI所有的驱动程序。如果你正在使用 UEFI的话,不要禁用基于 EFI 的Framebuffer支持。)
## (再往下翻,启用基本的控制台支持。 KMS需要这个。)
Console display driver support --->
<*> Framebuffer Console Support
接下来,配置内核以使用正确的KMS驱动。Intel,NVIDIA和AMD / ATI是最常见的显卡,所以接下来请按照您自己的显卡来操作。
英特尔(Intel)
对于Intel显卡请看kernel section of the Intel article.
英伟达(NVIDIA)
对于 NVidia 显卡:
In addition to the kernel driver, certain cards require closed source firmware to be built-in to the Linux kernel. Depending on the selected driver, readers should visit each respective article to check to see if firmware (from the sys-kernel/linux-firmware is necessary for their specific card.
Device Drivers --->
Graphics support --->
<M/*> Nouveau (NVIDIA) cards
超微半导体(AMD/ATI)
对于较新的AMD/ATI显卡(RadeonHD 2000及以上),安装sys-kernel/linux-firmware(包中包括radeon和amdgpu;单独的包x11-drivers/radeon-ucode已经不存在了)。一旦其中的某个包被安装,将Radeon驱动设置为内核中的一个模块,或者,设成可选的。配置内核的详细信息见Radeon文章中的固件部分,或者对于较新的AMD显卡(GCN1.1+),文章AMDGPU中的固件部分:
比较旧的显卡:
## (设置内核使用 radeon-ucode 固件)
Device Drivers --->
Generic Driver Options --->
[*] Include in-kernel firmware blobs in kernel binary
## # ATI卡有关详细信息,包括固件,请参阅Radeon页面
(radeon/<CARD-MODEL>.bin ...)
## # 指定的根目录
(/lib/firmware/) External firmware blobs to build into the kernel binary
## (开启 Radeon KMS 支持)
Device Drivers --->
Graphics support --->
<M/*> ATI Radeon
[*] Enable modesetting on radeon by default
[ ] Enable userspace modesetting on radeon (DEPRECATED)
比较新的显卡:
## (设置内核使用 amdgpu 固件,如果是“AMD GPU”,下面带有“M”的是可选项)
Device Drivers --->
Generic Driver Options --->
[*] Include in-kernel firmware blobs in kernel binary
## # AMD card specific, (see AMDGPU page for details which firmware files to include)
(amdgpu/<CARD-MODEL>.bin ...)
## # Specify the root directory
(/lib/firmware/) External firmware blobs to build into the kernel binary
## (启用 Radeon KMS 支持)
Device Drivers --->
Graphics support --->
<M/*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) --->
<M/*> AMD GPU
[ /*] Enable amdgpu support for SI parts
[ /*] Enable amdgpu support for CIK parts
[*] Enable AMD powerplay component
ACP (Audio CoProcessor) Configuration --->
[*] Enable AMD Audio CoProcessor IP support (CONFIG_DRM_AMD_ACP)
Display Engine Configuration --->
[*] AMD DC - Enable new display engine
[ /*] DC support for Polaris and older ASICs
[ /*] AMD FBC - Enable Frame Buffer Compression
[ /*] DCN 1.0 Raven family
<M/*> HSA kernel driver for AMD GPU devices
老的 Radeon 显卡 (X1900 series 甚至更老) 不需要安装其他固件或进行其他任何配置。 只需启用直接渲染管理(DRM)和ATI Radeon模块即可。
Linux kernel >= 3.9 没有 Enable modesetting on radeon by default 这个选项,因为它默认已经开启了。如果您发现该选项在新内核丢失,请不要惊慌。
Linux内核 >= 4.15确实包括AMDGPU工作所需的Display Core (DC)。这个较新的驱动程序是为GCN5.0 Vega和DCN1.0 Raven Ridge(APU)编写的,但也为GCN1.1 Southern Islands及更新版本开始的旧Radeon显卡增加了额外的功能。计划将旧Radeon卡的这种额外支持作为标准,因此如果您在较新的内核中发现此选项丢失,请不要惊慌。
退出内核配置 重建内核,并重新启动.
现在KMS已经被设置,继续准备下一节,修改 /etc/portage/make.conf 。
现在内核已经配置好了,但是两个重要的变量必须在你安装Xorg之前,在/etc/portage/make.conf中进行配置。
Make.conf
Portage knows the X USE flag for enabling support for X in other packages (default in all desktop profiles). Make sure this USE flag is added to the USE flag list to ensure X compatibility system wide:
USE="X"
第一个变量是VIDEO_CARDS。这是用于设置你打算使用的显卡驱动程序,它通常是根据你的显卡来选择。对于NVIDIA显卡最常用的配置是:nouveau
;对于ATI(AMD)显卡常用的配置是:radeon
。在支持开源驱动程序方面,NVIDIA和AIT都有积极的发展。如果您有更新的AMD视频卡(Southern Islands及更高版本),您也可以尝试使用新的开源amdgpu
驱动程序。有关更多详细信息,请参阅AMDGPU文章。
你也可以试试NVidia 或AMD/ATI各自的闭源驱动: NVIDIA:
nvidia
;AMD:fglrx
。 然而,如何设置闭源驱动不在本指南的范围之内,请阅读Gentoo Linux nVidia Guide 和Gentoo Linux ATI FAQ。如果你不知道该挑选哪个闭源驱动,请仔细阅读这些指南以获得更多信息。intel
驱动程序可用于台式机或笔记本电脑常见的英特尔集成显卡芯片组。
VIDEO_CARDS 这个变量可以含有多个值,只要用空格隔开它们即可。
第二个变量设置是: INPUT_DEVICES ,它用于确认构建哪些输入设备驱动程序。
make.defaults 将 Libinput 作为默认输入设备驱动程序。
要检查当前设置的内容,请运行:
user $
portageq envvar INPUT_DEVICES
如果需要替代输入设备,例如用于笔记本电脑的Synaptics触摸板,请务必将它们添加到 /etc/portage/make.conf文件的INPUT_DEVICES中:
## (对于鼠标、键盘和Synaptics touchpad的支持)
INPUT_DEVICES="libinput synaptics"
## (对于英伟达(NVIDIA)显卡)
VIDEO_CARDS="nouveau"
## (对于超微半导体(AMD/ATI)显卡)
VIDEO_CARDS="radeon"
如果推荐设置不起作用,安装x11-base/xorg-drivers(请参阅下面的步骤)。检查所有可用的选项,并选择适用于该系统的那些选项。这个例子是用于使用键盘,鼠标,Synaptics触摸板,以及Radeon显卡的系统配置。
root #
emerge --pretend --verbose x11-base/xorg-drivers
These are the packages that would be merged, in order: Calculating dependencies... done! [ebuild R ] x11-base/xorg-drivers-1.9 INPUT_DEVICES="evdev synaptics -acecad -aiptek -elographics% -fpit% -joystick -keyboard -mouse -penmount -tslib -virtualbox -vmmouse -void -wacom" VIDEO_CARDS="radeon -apm -ark -ast -chips -cirrus -dummy -epson -fbdev -fglrx (-geode) -glint -i128 (-i740) (-impact) -intel -mach64 -mga -neomagic (-newport) -nouveau -nv -nvidia -r128 -rendition -s3 -s3virge -savage -siliconmotion -sis -sisusb (-sunbw2) (-suncg14) (-suncg3) (-suncg6) (-sunffb) (-sunleo) (-suntcx) -tdfx -tga -trident -tseng -v4l -vesa -via -virtualbox -vmware (-voodoo) (-xgi)" 0 kB
The USE flags have the following meaning:
USE flags for x11-base/xorg-server X.Org X servers
+elogind
|
Use elogind to get control over framebuffer when running as regular user |
+udev
|
Enable virtual/udev integration (device discovery, power and storage device support, etc) |
debug
|
Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces |
minimal
|
Install a very minimal build (disables, for example, plugins, fonts, most drivers, non-critical features) |
selinux
|
!!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur |
suid
|
Enable setuid root program(s) |
systemd
|
Enable use of systemd-specific libraries and features like socket activation or session tracking |
test
|
Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently) |
unwind
|
Enable libunwind usage for backtraces |
xcsecurity
|
Build Security extension |
xephyr
|
Build the Xephyr server |
xnest
|
Build the Xnest server |
xorg
|
Build the Xorg X server (HIGHLY RECOMMENDED) |
xvfb
|
Build the Xvfb server |
By default the suid USE flag is disabled, which is fine when, as per recommendation, X runs under a logind provider like elogind, or systemd. The suid USE flag should however be enabled in /etc/portage/package.use/xorg-server in case no logind provider is used and X is run under a normal user account, e.g. started with startx. Please see also this repository news article. Setting suid would then prevent permission errors on /dev/tty0, or on virtual console 7.
Emerge
设置好所有必需的变量和 USE 标志后,我们可以安装Xorg了:
root #
emerge --ask x11-base/xorg-server
当安装完成后,在继续之前重新初始化一些环境变量。更新profile配置文件命令:
root #
env-update
root #
source /etc/profile
配置
X server 被设计为开箱即用,即无需手动编辑Xorg配置文件。它“应该”能检测和配置例如显示器,键盘和鼠标这些设备。
试试using startx而非直接编辑配置文件。如果Xorg无法启动,那么可能有其他问题,此时,你将需要再去手动编辑Xorg配置。这在下面的部分进行说明。
To run Xorg with non-root users, as root, either enable a logind provider (see Non root Xorg) or set the suid USE flag (see above note).
如果改变了内核配置,不要忘记在重启系统 之前执行 startx 来使用新构建的内核。 如果内核被更新到新版本,这一般需要更新引导启动程序的配置文件。
xorg.conf.d 目录
在 xorg.conf.d的配置文件,应该被视为最后的设置选项。如果可能的话,直接运行没有任何其他特殊设置的Xorg。
大部分Xorg的配置文件存储在 /etc/X11/xorg.conf.d/。 每个文件的名字都是独一无二的并且以.conf为扩展名。 Xorg配置目录中的文件名会按字母顺序读取。例如,10-evdev.conf会在20-synaptics.conf之前被读取; a-evdev.conf 会在b-synaptics.conf之前被读取…… 此目录中的文件不需要编号,但是如果编号,那么会帮助他们有组织化。组织化有助于调试错误的配置文件。
Xorg提供了示例配置:/usr/share/doc/xorg-server-${version}/xorg.conf.example.bz2。这些可以用来自定义配置文件/etc/X11/xorg.conf.d/。 man xorg.conf 这些例子有详细的注释,但如果需要有关具体详细的操作说明, 始终可用。其他的例子可以在本指南最后的其他资源看到。
使用 startx
试试startx来运行 X server。 startx即执行一个'X会话'脚本;这个脚本x11-apps/xinit生成. 也就是说,它启动了X服务器并在它上面的一些图形应用程序。它使用下面的方式来判断该运行哪些应用程序:
- 如果一个叫做.xinitrc的文件存在于主目录(home)中,它会执行里面列出的命令。
- 否则,它会从/etc/env.d/90xsession读取 XSESSION 这个变量的值,并且将执行一个与之相对应的会话。XSESSION的值可以在/etc/X11/Sessions/文件中进行配置。例如,设置系统默认会话,以root身份运行:
root #
echo XSESSION="Xfce4" > /etc/env.d/90xsession
- 这将创建文件:90xsession,然后设置默认X会话Xfce。 记得在90xsession修过后,执行命令env-update。
user $
startx
如果你没有安装窗口管理器,那么将会出现一个纯黑色的屏幕,此后这也可以说明,哪些东西发生了错误。x11-wm/twm和x11-terms/xterm 包可以用来测试X是否正常配置。
程序安装后,再次执行 startx。 一些 xterm 窗口将会出现,因此很容易验证X server是否正常工作。如果一切正常卸载 x11-wm/twm 和x11-terms/xterm,如果按上面的步骤,那么你要删除测试软件包。因为我们要安装一个合适的桌面环境,而接下来并不需要它们。
会话(程序启动)也被指定为参数startx:
user $
startx /usr/bin/startfluxbox
此外,要传递 X11 服务器选项,可以在它们前面加一个双破折号:
user $
startx -- vt7
调整 X 设置
设置屏幕分辨率
如果屏幕分辨率看起来不正确,你需要检查你的xorg.conf.d 配置的两个部分。首先, 'Screen' 部分会列出你的 X server 所有可用分辨率选项。这一节可能不会列出所有的分辨率信息,甚至一个都没有。如果是这种情况,Xorg将根据第二部分中的信息:“Monitor”估算分辨率。
现在让我们来更改分辨率。在下一个示例中的 /etc/X11/xorg.conf.d/40-monitor.conf, 我们添加进去 PreferredMode
这一行,以便我们 X server,在分辨率 1440 x 900 的默认情况下启动。Device
部分中的 Option
必须与您的显示器 (DVI-0
)的名字一致,可以通过运行 xrandr 的名称相匹配。安装xrandr. Install xrandr (emerge xrandr)只是使有足够长的时间来获取此信息。(在 Device
部分中) 的显示器名称后面的参数必须匹配Monitor
节的 Identifier
。
Section "Device"
Identifier "RadeonHD 4550"
Option "Monitor-DVI-0" "DVI screen"
EndSection
Section "Monitor"
Identifier "DVI screen"
Option "PreferredMode" "1440x900"
EndSection
运行 X (startx)来看看它所使用的分辨率。
多显示器
可以在/etc/X11/xorg.conf.d/中配置多个显示器。给每个显示器,写出它的唯一标识符,然后列出它的物理位置,如另一台显示器是"RightOf"或"Above"。下面的例子展示了如何配置,一个DVI和VGA显示器,另外附带一个VGA的显示器在右侧屏幕:
Section "Device"
Identifier "RadeonHD 4550"
Option "Monitor-DVI-0" "DVI screen"
Option "Monitor-VGA-0" "VGA screen"
EndSection
Section "Monitor"
Identifier "DVI screen"
EndSection
Section "Monitor"
Identifier "VGA screen"
Option "RightOf" "DVI screen"
EndSection
配置键盘
有关切换键盘布局,看Keyboard layout switching .
The rest of this section may not be needed if following the Keyboard layout switching article.
设置X使用国际键盘需要在创建适当的配置文件: /etc/X11/xorg.conf.d/。在这个例子我们使用一个捷克键盘布局:
Section "InputClass"
Identifier "keyboard-all"
Driver "evdev"
Option "XkbLayout" "us,cz"
Option "XkbModel" "logitech_g15"
Option "XkbRules" "xorg"
Option "XkbOptions" "grp:alt_shift_toggle,grp:switch,grp_led:scroll,compose:rwin,terminate:ctrl_alt_bksp"
Option "XkbVariant" ",qwerty"
MatchIsKeyboard "on"
EndSection
"终止"命令 (terminate:ctrl_alt_bksp
) 允许用户通过使用Ctrl+Alt+Backspace 组合键来结束X会话。不过,这样退出不怎么好 -- 用户应该尽量避免这样做。但它在程序完全卡死或配置和调整 Xorg环境时很有用。请谨慎使用,通过该组合键结束桌面 — — 大多数程序真的不喜欢以这种方式结束。一些文件,比如尚未写入磁盘(比如存储在“已打开的文档”中的信息)中的数据,将丢失。
Because the "evdev" driver can handle multiple devices (even non-keyboards), limiting the section to only some devices might be needed for proper working of all the devices. Use the MatchProduct
directive to specify the device name, consult man xorg.conf for more info.
For more information about XkbModel
and XkbOptions
, consult /usr/share/X11/xkb/rules/base.lst and man xkeyboard-config.
即将完成
运行startx,如果您对结果感到高兴。恭喜你,你现在 (希望如此) 拥有一个正常 Xorg!下一步是安装可用的窗口管理器或桌面环境,例如GNOME、KDE或Xfce。在 wiki 上,你可以找到有关安装这些桌面环境的更多信息。
参考
外部资源
创建和编辑配置文件
man xorg.conf和man evdev提供了快速而又完整的参考,关于这些配置文件所使用的具体使用的语法。当你编辑 Xorg 配置文件的时候,一定要在终端上打开他们!
Example configurations can be found at /usr/share/doc/xorg-server-*/xorg.conf.example.bz2.
在编辑配置文件中的也有许多在线资源:/etc/X11/。只有少数列出在这里;可以选择你最喜爱的搜索引擎来找到更多指导。
其他资源
关于安装和配置的各种图形桌面环境和应用程序更多信息,可以在我们的文档部分中找到: .
当升级到xorg-server 1.9或更高版本,务必阅读migration guide。
除了我们这些文档,在他们自己的网站上,X.org还提供许多FAQs
This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Sven Vermeulen (SwifT) , Joshua Saddler(nightmorph)
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.