Xorg/指南
Xorg是X Window server ,它允许用户通过他们的指尖创造一个图形环境。本指南解释了什么是Xorg,如何安装它,以及各种配置选项。
X Window server 是什么?
图形VS命令行
一般来说,大多数用户可能都有点害怕在命令行界面 (CLI) 敲命令。它为什么不能够按照自己的方式,比如用鼠标指向并点击?这难道不是Gentoo(和大多数的Linux发行版)提供的自由吗?嗯,当然可以。
Gentoo 提供了多种华丽的图形界面,例如窗口管理器和桌面环境,它们可以安装在现有安装之上。
刚接触 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 USE=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:
/etc/portage/make.conf
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
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 |
elogind
|
Use elogind to get control over framebuffer when running as regular user |
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) |
udev
|
Enable virtual/udev integration (device discovery, power and storage device support, etc) |
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
设置好所有必需的变量后,我们可以安装Xorg了:
root #
emerge --ask x11-base/xorg-server
可以安装软件包组x11-base/xorg-x11,而不是轻量化的x11-base/xorg-server。在功能上x11-base/xorg-x11 和 x11-base/xorg-server 它们是一样的。然而,x11-base/xorg-x11附带更多的包,涵盖大多数系统可能非必须的功能。他的附加软件包,包括各式各样的语言字体包,它们不是X11工作框架所必需的。
当安装完成后,在继续之前重新初始化一些环境变量。更新profile配置文件命令:
root #
env-update
root #
source /etc/profile
配置
X server 被设计为开箱即用,即无需手动编辑Xorg配置文件。它“应该”能检测和配置例如显示器,键盘和鼠标这些设备。
试试using startx而非直接编辑配置文件。如果Xorg无法启动,那么可能有其他问题,此时,你将需要再去手动编辑Xorg配置。这在下面的部分进行说明。
To run Xorg with a non root user, see Non root Xorg.
如果改变了内核配置,不要忘记在重启系统 之前执行 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
。
/etc/X11/xorg.conf.d/40-monitor.conf
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的显示器在右侧屏幕:
/etc/X11/xorg.conf.d/40-monitor.conf
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
配置键盘
设置X使用国际键盘需要在创建适当的配置文件: /etc/X11/xorg.conf.d/。在这个例子我们使用一个捷克键盘布局:
/etc/X11/xorg.conf.d/30-keyboard.conf
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
有关切换键盘布局,看Keyboard layout switching .
"终止"命令 (terminate:ctrl_alt_bksp
) 允许用户通过使用Ctrl+Alt+Backspace 组合键来结束X会话。不过,这样退出不怎么好 -- 用户应该尽量避免这样做。但它在程序完全卡死或配置和调整 Xorg环境时很有用。请谨慎使用,通过该组合键结束桌面 — — 大多数程序真的不喜欢以这种方式结束。一些文件,比如尚未写入磁盘(比如存储在“已打开的文档”中的信息)中的数据,将丢失。
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) ,
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.