Skip to the content.

上一页      主目录      下一页

24. Graphical Environments


本章包含构建和配置图形用户环境的说明。

很长一段时间以来,GNU/Linux唯一可用的图形环境是X Window系统。它使用客户/服务器模型,允许编写完全独立于图形硬件的应用程序。这有一个缺点,即很难访问现代硬件加速,因此开发了其他方法。有两种新系统可用:Wayland和Vulkan。前者是X的更简单的替代品,使用OpenGL框架更容易开发和维护。主要的桌面环境GNOME和KDE已经移植到它。后者允许通过一个可移植的接口直接访问图形硬件。它是较新的,尚未包含在BLFS中。

本章将介绍X窗口系统和Wayland的基本组成部分。对于X,选择的实现是Xorg,这是一个模块化的实现,需要安装100多个包。Xorg的发行版本是由开发者指定的,在本例中是Xorg-7。单个包可以根据需要更新,而无需更改此编号。

24.1 Introduction to Xorg-7


Xorg是一个自由可重新发布的、开源的X Window系统的实现。该系统提供了显示硬件(鼠标、键盘和视频显示器)和桌面环境之间的客户机/服务器接口,同时还提供了窗口基础设施和标准化的应用程序接口(API)。

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/Xorg7

Xorg下载和安装说明

Xorg-7.0引入了一个完全自动化的、模块化的构建系统。使用新的模块化构建系统,不再可能将整个包下载到单个文件中。事实上,有超过100个包需要从下载位置获取。为了协助完成这么大的任务,强烈建议安装Wget-1.21.3来下载所需的文件。对于包含多个包的每个页面,都提供了完整的wget文件列表。

考虑到可用软件包的数量,刚开始确定您需要为特定的设置安装哪些软件包可能有点难。看看this pagethis thread,了解你将需要什么。如果您不确定,则应该安装所有软件包,但需要额外的磁盘空间。

注意

即使你只想下载必要的包,也应该下载wget文件列表。文件列表按依赖关系排序,文件中列出的包版本可以很好地相互配合。此外,wget文件列表中还包含一些注释,针对那些已弃用或不建议安装的包。新的软件包可能会用于Xorg的下一个版本,并且已经证明与BLFS中安装的当前软件版本不兼容。通过只安装需要和使用的包,Xorg的安装大小可以大大减少,然而,BLFS书不能为每个Xorg包考虑所有的依赖项和构建选项。这些指令假设所有的包都已经构建完成。一个包含依赖信息的wiki页面正在开发中。如果您发现可能对有选择地安装单个包的其他用户有帮助的额外信息,则鼓励您添加到这些页面。

此外,由于有大量重复的命令,建议您将构建部分自动化。使用Sudo-1.9.13p1包的说明已经给出。建议你为将要构建xorg包的用户使用:NOPASSWD配置选项。

设置Xorg构建环境

注意

下面的说明假设shell启动文件已经按照The Bash Shell Startup Files中的描述设置好了。

与以前的X Window系统版本一样,可能需要将Xorg安装到替代前缀中。在Linux发行版中,这种做法不再常见。在Linux上,Xorg的常见安装前缀是/usr。没有标准的替代前缀,X Window系统第7版的文件系统层次标准的当前修订版中也没有例外。Sun公司的Alan Coopersmith曾经说过:“在Sun公司,我们使用的是/usr/X11,并计划继续使用它。”只有/opt/*前缀和/usr前缀符合当前的FHS指南。

BLFS编辑推荐使用/usr前缀。

选择你的安装前缀,并使用以下命令设置XORG_PREFIX变量:

export XORG_PREFIX="<PREFIX>"

在整个说明中,您将为所有包使用以下configure开关。创建XORG_CONFIG变量用于此参数替换:

export XORG_CONFIG="--prefix=$XORG_PREFIX --sysconfdir=/etc \
    --localstatedir=/var --disable-static"

root用户创建一个包含以下变量的/etc/profile.d/xorg.sh配置文件:

cat > /etc/profile.d/xorg.sh << EOF
XORG_PREFIX="$XORG_PREFIX"
XORG_CONFIG="--prefix=\$XORG_PREFIX --sysconfdir=/etc --localstatedir=/var --disable-static"
export XORG_PREFIX XORG_CONFIG
EOF
chmod 644 /etc/profile.d/xorg.sh

注意

上面的’here’文档有些混乱。美元符号前面的反斜杠是正确的。Bash将在创建/etc/profile.d/xorg.sh时删除它。但是,如果用编辑器创建文件,复制粘贴操作不会删除反斜杠。然后必须手动删除它。

如果你已经安装了Sudo-1.9.13p1,请确保在sudo环境中XORG_PREFIXXORG_CONFIG是可用的。以root用户运行以下命令:

cat > /etc/sudoers.d/xorg << EOF
Defaults env_keep += XORG_PREFIX
Defaults env_keep += XORG_CONFIG
EOF

如果你没有使用标准的Xorg前缀…

警告

如果你决定使用标准的/usr前缀,则必须省略本页面的其余部分,继续阅读util-macros-1.20.0

如果你决定不使用标准前缀,请确保将$XORG_PREFIX/bin添加到PATH环境变量中,并将$XORG_PREFIX/lib/pkgconfig$XORG_PREFIX/share/pkgconfig添加到PKG_CONFIG_PATH变量中。为gcc指定额外的搜索路径和为aclocal程序指定一个include目录也是很有帮助的。以root用户身份执行以下命令:

cat >> /etc/profile.d/xorg.sh << "EOF"

pathappend $XORG_PREFIX/bin             PATH
pathappend $XORG_PREFIX/lib/pkgconfig   PKG_CONFIG_PATH
pathappend $XORG_PREFIX/share/pkgconfig PKG_CONFIG_PATH

pathappend $XORG_PREFIX/lib             LIBRARY_PATH
pathappend $XORG_PREFIX/include         C_INCLUDE_PATH
pathappend $XORG_PREFIX/include         CPLUS_INCLUDE_PATH

ACLOCAL="aclocal -I $XORG_PREFIX/share/aclocal"

export PATH PKG_CONFIG_PATH ACLOCAL LIBRARY_PATH C_INCLUDE_PATH CPLUS_INCLUDE_PATH
EOF

上面的脚本需要被激活。正常情况下,它会在登录时自动启动,但现在以普通用户身份激活它,运行:

source /etc/profile.d/xorg.sh

你还应该将$XORG_PREFIX/lib添加到/etc/ld.so.conf文件中。同样,以root用户的身份,执行以下命令:

echo "$XORG_PREFIX/lib" >> /etc/ld.so.conf

你还应该修改/etc/man_db.conf,按照/usr/X11R6的例子添加适当的MANDATORY_MANPATH, MANPATH_MAP, 和 MANDB_MAP条目。以root用户身份执行以下命令:

sed -e "s@X11R6/man@X11R6/share/man@g" \
    -e "s@/usr/X11R6@$XORG_PREFIX@g"   \
    -i /etc/man_db.conf

有些应用程序在/usr/share/X11中查找共享文件。以root用户的身份创建一个指向正确位置的符号链接:

ln -svf $XORG_PREFIX/share/X11 /usr/share/X11

如果构建KDE,一些cmake文件在$XORG_PREFIX以外的地方寻找Xorg。允许cmake找到Xorg:

ln -svf $XORG_PREFIX /usr/X11R6

24.2 util-macros-1.20.0


简介util-macros

util-macros包包含所有Xorg包使用的m4宏。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

util-macros依赖

必要

Xorg build environment (应该设置为以下说明的工作)

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/util-macros

安装util-macros

运行以下命令安装util-macros:

./configure $XORG_CONFIG

这个包没有附带测试套件。

现在,作为root用户:

make install

内容

安装程序: None

安装库: None

安装目录: $XORG_PREFIX/share/pkgconfig 和 $XORG_PREFIX/share/util-macros

24.3 xorgproto-2022.2


简介xorgproto

xorgproto包提供了构建X窗口系统所需的头文件,并允许其他应用程序根据已安装的X窗口系统进行构建。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

xorgproto依赖

必要

util-macros-1.20.0

可选

fop-2.8, libxslt-1.1.37, xmlto-0.0.28asciidoc-10.2.0 (构建额外的文档)

注意

fop-2.8存在相互依赖关系。如果你想构建文档,你需要在安装完成并且安装了fop-2.8之后重新安装协议头。

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/Xorg7ProtocolHeaders

安装xorgproto

运行以下命令安装xorgproto:

mkdir build &&
cd    build &&

meson --prefix=$XORG_PREFIX -Dlegacy=true .. &&
ninja

这个包没有附带测试套件。

现在,作为root用户:

ninja install &&
mv -v $XORG_PREFIX/share/doc/xorgproto{,-2022.2}

命令解释

-Dlegacy=true: 安装旧程序所需的遗留头文件 (比如 LessTif).

内容

安装程序: None

安装库: None

安装目录: $XORG_PREFIX/include/GL, $XORG_PREFIX/include/X11, 和 $XORG_PREFIX/share/doc/xorgproto-2022.2

24.4 libXau-1.0.11


简介libXau

libXau包包含一个实现X11授权协议的库。这对于限制客户端访问显示非常有用。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

libXau依赖

必要

xorgproto-2022.2

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/libXau

安装libXau

运行以下命令安装libXau:

./configure $XORG_CONFIG &&
make

要测试结果,请执行以下命令: make check.

现在,作为root用户:

make install

内容

安装程序: None

安装库: libXau.so

安装目录: None

简短描述

libXau.so   是X authority数据库例程的库。

24.5 libXdmcp-1.1.4


简介libXdmcp

libXdmcp包包含了一个实现X显示管理器控制协议的库。这对于允许客户端与X显示管理器交互非常有用。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

libXdmcp依赖

必要

xorgproto-2022.2

可选

xmlto-0.0.28, fop-2.8, libxslt-1.1.37, 和 Xorg-SGML-doctools (用于文档)

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/libXdmcp

安装libXdmcp

运行以下命令安装libXdmcp:

./configure $XORG_CONFIG --docdir=/usr/share/doc/libXdmcp-1.1.4 &&
make

要测试结果,请执行以下命令: make check.

现在,作为root用户:

make install

内容

安装程序: None

安装库: libXdmcp.so

安装目录: $XORG_PREFIX/share/doc/libXdmcp-1.1.4

简短描述

libXdmcp.so   是X显示管理器控制协议库。

24.6 xcb-proto-1.15.2


简介xcb-proto

xcb-proto包提供了XML-XCB协议描述,libxcb使用它来生成大部分代码和API。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

xcb-proto依赖

推荐

Xorg build environment (需要下面的说明)

可选

libxml2-2.10.3 (需要运行测试)

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xcb-proto

安装xcb-proto

运行以下命令安装xcb-proto:

PYTHON=python3 ./configure $XORG_CONFIG

要测试结果,请执行以下命令: make check.

现在,作为root用户:

make install

如果您从版本1.15.1或更低版本升级,则需要删除旧的pkgconfig文件。问题,作为root用户:

rm -f $XORG_PREFIX/lib/pkgconfig/xcb-proto.pc

内容

安装程序: None

安装库: None

安装目录: $XORG_PREFIX/share/xcb 和 $XORG_PREFIX/lib/python3.11/site-packages/xcbgen

24.7 libxcb-1.15


简介libxcb

libxcb包提供了一个X Window系统协议的接口,它取代了当前的Xlib接口。Xlib还可以使用XCB作为传输层,允许软件使用这两种方式发送请求和接收响应。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

libxcb依赖

必要

libXau-1.0.11xcb-proto-1.15.2

推荐

libXdmcp-1.1.4

可选

Doxygen-1.9.6 (生成API文档) 和 libxslt-1.1.37

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/libxcb

安装libxcb

运行以下命令安装libxcb:

PYTHON=python3                \
./configure $XORG_CONFIG      \
            --without-doxygen \
            --docdir='${datadir}'/doc/libxcb-1.15 &&
make

要测试结果,请执行以下命令: make check.

现在,作为root用户:

make install

命令解释

PYTHON=python3: 这个变量强制配置使用python3而不是python2。如果这个包的configure脚本存在,它会自动默认使用python2。

--without-doxygen: 不要使用doxygen生成API文档(默认:auto)。如果没有它,如果安装了Doxygen-1.9.6,则会生成并安装API文档。

内容

安装程序: None

安装库: libxcb.so, libxcb-composite.so, libxcb-damage.so, libxcb-dpms.so, libxcb-dri2.so, libxcb-dri3.so, libxcb-glx.so, libxcb-present.so, libxcb-randr.so, libxcb-record.so, libxcb-render.so, libxcb-res.so, libxcb-screensaver.so, libxcb-shape.so, libxcb-shm.so, libxcb-sync.so, libxcb-xf86dri.so, libxcb-xfixes.so, libxcb-xinerama.so, libxcb-xinput.so, libxcb-xkb.so, libxcb-xtest.so, libxcb-xvmc.so, 和 libxcb-xv.so

安装目录: $XORG_PREFIX/include/xcb 和 $XORG_PREFIX/share/doc/libxcb-1.15

简短描述

libxcb.so   是X窗口系统协议的接口。

24.8 Xorg Libraries


简介Xorg Libraries

Xorg库提供了在所有X窗口应用程序中使用的库例程。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

Xorg Libraries依赖

必要

Fontconfig-2.14.2libxcb-1.15

可选

asciidoc-10.2.0, xmlto-0.0.28 使用下列一个或多个: fop-2.8, Links-2.28, Lynx-2.8.9rel.1, ncompress (用于一些测试), 和 W3m (为libXfont包生成额外的PDF或文本文档).

推荐在运行时

dbus-1.14.6

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/Xorg7Libraries

下载Xorg Libraries

首先,创建一个要下载的文件列表。当下载完成时,此文件还将用于验证下载的完整性:

cat > lib-7.md5 << "EOF"
ce2fb8100c6647ee81451ebe388b17ad  xtrans-1.4.0.tar.bz2
e932752126240f0846b35eef6b1f2c3d  libX11-1.8.4.tar.xz
964942427fcc5a9fa0539661421857c8  libXext-1.3.5.tar.xz
742863a552ecd53cdb957b7b276213cc  libFS-1.0.9.tar.xz
b444a0e4c2163d1bbc7b046c3653eb8d  libICE-1.1.1.tar.xz
ffa434ed96ccae45533b3d653300730e  libSM-1.2.4.tar.xz
e613751d38e13aa0d0fd8e0149cec057  libXScrnSaver-1.2.4.tar.xz
b122ff9a7ec70c94dbbfd814899fffa5  libXt-1.2.1.tar.bz2
ed52d396115fbc4d05300762aab79685  libXmu-1.1.4.tar.xz
b3c58c94e284fd6940d3615e660a0007  libXpm-3.5.15.tar.xz
c1ce21c296bbf3da3e30cf651649563e  libXaw-1.0.14.tar.bz2
86f182f487f4f54684ef6b142096bb0f  libXfixes-6.0.0.tar.bz2
af0a5f0abb5b55f8411cd738cf0e5259  libXcomposite-0.4.6.tar.xz
ebf7fb3241ec03e8a3b2af72f03b4631  libXrender-0.9.11.tar.xz
4cdd1886fe5cce6f68554296edb46db8  libXcursor-1.2.1.tar.xz
ca55d29fa0a8b5c4a89f609a7952ebf8  libXdamage-1.1.6.tar.xz
6d3f1b15bb5b0bb71ae9f0a5103c1fc4  libfontenc-1.1.7.tar.xz
c179daa707f5f432f1bc13977e5bb329  libXfont2-2.0.6.tar.xz
69dc24ba444a0f6bd99423dbf8fd0260  libXft-2.3.7.tar.xz
74055672a111a98ce2841d2ec4057b05  libXi-1.8.tar.bz2
228c877558c265d2f63c56a03f7d3f21  libXinerama-1.1.5.tar.xz
850cbc7c921c9d5d0135734b114ff6ac  libXrandr-1.5.3.tar.xz
66c9e9e01b0b53052bb1d02ebf8d7040  libXres-1.2.2.tar.xz
02f128fbf809aa9c50d6e54c8e57cb2e  libXtst-1.2.4.tar.xz
70bfdd14ca1a563c218794413f0c1f42  libXv-1.0.12.tar.xz
11a358e7229fa28dc9801c1e64fe2e18  libXvMC-1.0.13.tar.xz
74d1acf93b83abeb0954824da0ec400b  libXxf86dga-1.1.6.tar.xz
5b913dac587f2de17a02e17f9a44a75f  libXxf86vm-1.1.5.tar.xz
d2f1f0ec68ac3932dd7f1d9aa0a7a11c  libdmx-1.1.4.tar.bz2
1466cf950c914ad2db1dbb76c9a724db  libpciaccess-0.17.tar.xz
8af2275955d40166bb647b14e4896ab1  libxkbfile-1.1.2.tar.xz
faa74f7483074ce7d4349e6bdc237497  libxshmfence-1.3.2.tar.xz
EOF

要使用wget下载所需的文件,使用以下命令:

mkdir lib &&
cd lib &&
grep -v '^#' ../lib-7.md5 | awk '{print $2}' | wget -i- -c \
    -B https://www.x.org/pub/individual/lib/ &&
md5sum -c ../lib-7.md5

安装Xorg Libraries

注意

在一个脚本中安装多个包时,需要以root用户身份进行安装。有3个通用选项可用于完成此操作。

  1. 以root用户身份运行整个脚本(不推荐)。

  2. 使用Sudo-1.9.13p1包中的sudo命令。

  3. 使用su -c “command arguments”(需要引号),它将在每次循环迭代时询问根密码。

处理这种情况的一种方法是创建一个简短的bash函数,它可以自动选择适当的方法。一旦在环境中设置了命令,就不需要再次设置了。

as_root()
{
  if   [ $EUID = 0 ];        then $*
  elif [ -x /usr/bin/sudo ]; then sudo $*
  else                            su -c \\"$*\\"
  fi
}

export -f as_root

有些库带有测试套件。如果你想执行它们,可以注释掉rm -rf …,这样,在所有库安装完成后,你可以回到相应的目录并运行make check,或者进行单独构建,为每个使用工作测试套件分发的测试运行测试。或者,你可以取消这行注释#make check …,最后用下面的代码检查测试结果:

grep -A9 summary *make_check.log

BLFS开发人员已经确认libX11, libXt, libXmu, libXpm, 和 libxshmfence已经发布了可用的测试套件。

首先,启动一个子shell,它会在发生错误时退出:

bash -e

通过运行命令安装所有包:

for package in $(grep -v '^#' ../lib-7.md5 | awk '{print $2}')
do
  packagedir=${package%.tar.?z*}
  tar -xf $package
  pushd $packagedir
  docdir="--docdir=$XORG_PREFIX/share/doc/$packagedir"
  case $packagedir in
    libXfont2-[0-9]* )
      ./configure $XORG_CONFIG $docdir --disable-devel-docs
    ;;

    libXt-[0-9]* )
      ./configure $XORG_CONFIG $docdir \
                  --with-appdefaultdir=/etc/X11/app-defaults
    ;;

    libXpm-[0-9]* )
      sed -i '/TestAll.*TRUE/s|^|//|' test/TestAllFiles.h
      ./configure $XORG_CONFIG $docdir --disable-open-zfile
    ;;
    
    * )
      ./configure $XORG_CONFIG $docdir
    ;;
  esac

  make
  #make check 2>&1 | tee ../$packagedir-make_check.log
  as_root make install
  popd
  rm -rf $packagedir
  as_root /sbin/ldconfig
done

最后,退出之前启动的shell:

exit

命令解释

sed … test/TestAllFiles.h: 修复一个测试文件,使其在没有可选的compress程序的情况下也能正常工作。

--disable-open-zfile: 允许libXpm在不使用compress命令的情况下进行编译。

--disable-devel-docs: 如果安装了xmlto-0.0.28而没有文本浏览器,则禁止在libXfont2包中生成文本文档。如果安装了文本浏览器,则忽略此参数(或整个case语句)。

--with-fop: 使用fop-2.8生成PDF文档(仅针对libXfont包)。

配置Xorg Libraries

如果你选择将Xorg安装到/usr,那么不需要进一步配置,可以跳过本节的其余部分。如果您选择了替代前缀,则应该创建两个符号链接以满足多个包的预期环境。以root用户执行如下命令:

ln -sv $XORG_PREFIX/lib/X11 /usr/lib/X11 &&
ln -sv $XORG_PREFIX/include/X11 /usr/include/X11

内容

安装程序: cxpm 和 sxpm

安装库: libdmx.so, libfontenc.so, libFS.so, libICE.so, libpciaccess.so, libSM.so, libX11.so, libX11-xcb, libXaw6.so, libXaw7.so, libXaw.so, libXcomposite.so, libXcursor.so, libXdamage.so, libXext.so, libXfixes.so, libXfont2.so, libXft.so, libXinerama.so, libXi.so, libxkbfile.so, libXmu.so, libXmuu.so, libXpm.so, libXrandr.so, libXrender.so, libXRes.so, libxshmfence.so, libXss.so, libXt.so, libXtst.so, libXvMC.so, libXvMCW.so, libXv.so, libXxf86dga.so 和 libXxf86vm.so

安装目录: $XORG_PREFIX/include/X11/fonts, $XORG_PREFIX/include/X11/ICE, $XORG_PREFIX/include/X11/SM, $XORG_PREFIX/include/X11/Xmu, $XORG_PREFIX/include/X11/Xtrans, $XORG_PREFIX/share/doc/libFS, $XORG_PREFIX/share/doc/libICE-1.1.1, $XORG_PREFIX/share/doc/libSM-1.2.4, $XORG_PREFIX/share/doc/libX11-1.8.4, $XORG_PREFIX/share/doc/libXaw, $XORG_PREFIX/share/doc/libXext, $XORG_PREFIX/share/doc/libXi, $XORG_PREFIX/share/doc/libXmu-1.1.4, $XORG_PREFIX/share/doc/libXrender, $XORG_PREFIX/share/doc/libXt, $XORG_PREFIX/share/doc/libXtst, $XORG_PREFIX/share/doc/libXvMC, $XORG_PREFIX/share/doc/xtrans 和 $XORG_PREFIX/share/X11/locale

简短描述

cxpm   检查XPM文件的格式。

sxpm   显示一个XPM文件和/或转换为XPM 1或2文件到XPM 3。

libdmx.so   是X窗口系统DMX (Distributed Multihead X)扩展库。

libfontenc.so   是X11字体编码库。

libFS.so   是X字体服务器的库接口。

libICE.so   是X客户端间交换库。

libpciaccess.so   是X的通用PCI访问库。

libSM.so   是X会话管理库。

libX11.so   是Xlib库。

libXaw6.so   是X Athena Widgets库,版本6。

libXaw7.so   是X Athena Widgets库,版本7。

libXaw.so   是指向当前版本X Athena Widgets库的符号链接。

libXcomposite.so   是X组合库。

libXcursor.so   是X Cursor管理库。

libXdamage.so   是X Damage库。

libXext.so   是Misc X扩展库。

libXfixes.so   提供核心协议请求的增强版本。

libXfont2.so   是X字库。

libXft.so   是X FreeType接口库。

libXinerama.so   是Xinerama库。

libXi.so   是X输入扩展库。

libxkbfile.so   是xkbfile库。

libXmu.so   是用于杂项实用程序的X接口库,不是Xlib标准的一部分。

libXmuu.so   是迷你Xmu库。

libXpm.so   是X Pixmap库。

libXrandr.so   是X大小调整,旋转和反射扩展库。

libXrender.so   是X渲染库。

libXRes.so   是X-Resource扩展客户端库。

libxshmfence.so   在Linux futexes上公开事件API。

libXss.so   是X11屏幕保护程序扩展客户端库。

libXt.so   是X工具包库。

libXtst.so   是Xtst库。

libXvMC.so   是X-Video运动补偿库。

libXvMCW.so   是XvMC包装器,包括非标准的VLD扩展。

libXv.so   是X窗口系统视频扩展库。

libXxf86dga.so   是XFree86-DGA扩展的客户端库。

libXxf86vm.so   是XFree86-VidMode X扩展的客户端库。

24.9 libxcvt-0.1.2


简介libxcvt

libxcvt是一个库,提供了VESA CVT标准定时modelines生成器的X服务器实现的独立版本。它是Xorg服务器之前提供的版本的直接替代品。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

libxcvt依赖

必要

Xorg build environment (应该设置为以下说明的工作)

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/libxcvt

安装libxcvt

运行以下命令安装libxcvt:

mkdir build &&
cd    build &&

meson --prefix=$XORG_PREFIX --buildtype=release .. &&
ninja

这个包没有附带测试套件。

现在,作为root用户:

ninja install

命令解释

--buildtype=release: 指定一个适合于稳定版本的构建类型,因为默认情况下可能会生成未优化的二进制文件。

内容

安装程序: cvt

安装库: libxcvt.so

安装目录: $XORG_PREFIX/include/libxcvt

简短描述

cvt   计算与X一起使用的VESA协调视频定时(CVT)模型线。

libxcvt.so   包含计算VESA CVT的函数。

24.10 xcb-util-0.4.1


简介xcb-util

xcb-util包为XCB库提供了额外的扩展,其中许多扩展之前在Xlib中已经存在,但不属于core X协议。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

xcb-util依赖

必要

libxcb-1.15

可选

Doxygen-1.9.6 (用于文档)

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xcb-util

安装xcb-util

运行以下命令安装xcb-util:

./configure $XORG_CONFIG &&
make

这个包没有附带测试套件。

现在,作为root用户:

make install

内容

安装程序: None

安装库: libxcb-util.so

安装目录: None

简短描述

libxcb-util.so   为其他XCB实用程序提供实用程序功能。

24.11 xcb-util-image-0.4.1


简介xcb-util-image

xcb-util-image包为XCB库提供了额外的扩展。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

xcb-util-image依赖

必要

xcb-util-0.4.1

可选

Doxygen-1.9.6 (用于文档)

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xcb-util-image

安装xcb-util-image

运行以下命令安装xcb-util-image:

./configure $XORG_CONFIG &&
make

要测试结果,请执行以下命令: LD_LIBRARY_PATH=$XORG_PREFIX/lib make check.

现在,作为root用户:

make install

内容

安装程序: None

安装库: libxcb-image.so

安装目录: None

简短描述

libxcb-image.so   是Xlib库的XImage和XShmImage函数的端口。

24.12 xcb-util-keysyms-0.4.1


简介xcb-util-keysyms

xcb-util-keysyms包包含一个库,用于处理标准的X键常量和键码之间的转换。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

xcb-util-keysyms依赖

必要

libxcb-1.15

可选

Doxygen-1.9.6 (生成文档)

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xcb-util-keysyms

安装xcb-util-keysyms

运行以下命令安装xcb-util-keysyms:

./configure $XORG_CONFIG &&
make

这个包没有附带测试套件。

现在,作为root用户:

make install

内容

安装程序: None

安装库: libxcb-keysyms.so

安装目录: None

简短描述

libxcb-keysyms.so   提供标准的X键常量和用于键码之间转换的API函数。

24.13 xcb-util-renderutil-0.3.10


简介xcb-util-renderutil

xcb-util-renderutil包为XCB库提供了额外的扩展。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

xcb-util-renderutil依赖

必要

libxcb-1.15

可选

Doxygen-1.9.6 (用于文档)

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xcb-util-renderutil

安装xcb-util-renderutil

运行以下命令安装xcb-util-renderutil:

./configure $XORG_CONFIG &&
make

这个包没有附带测试套件。

现在,作为root用户:

make install

内容

安装程序: None

安装库: libxcb-render-util.so

安装目录: None

简短描述

libxcb-render-util.so   为Render扩展提供方便的函数。

24.14 xcb-util-wm-0.4.2


简介xcb-util-wm

xcb-util-wm包包含为EWMH 和 ICCCM提供客户端和窗口管理器助手的库。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

xcb-util-wm依赖

必要

libxcb-1.15

可选

Doxygen-1.9.6 (用于文档)

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xcb-util-wm

安装xcb-util-wm

运行以下命令安装xcb-util-wm:

./configure $XORG_CONFIG &&
make

这个包没有附带测试套件。

现在,作为root用户:

make install

内容

安装程序: None

安装库: libxcb-ewmh.so 和 libxcb-icccm.so

安装目录: None

简短描述

libxcb-ewmh.so   为EWMH提供客户端和窗口管理器助手。

libxcb-icccm.so   为ICCCM提供客户端和窗口管理器助手。

24.15 xcb-util-cursor-0.1.4


简介xcb-util-cursor

xcb-util-cursor包提供了一个实现XCB游标库的模块。它是libXcursor的XCB替代品。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

xcb-util-cursor依赖

必要

xcb-util-image-0.4.1xcb-util-renderutil-0.3.10

可选

Doxygen-1.9.6 (用于文档)

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xcb-util-cursor

安装xcb-util-cursor

运行以下命令安装xcb-util-cursor:

./configure $XORG_CONFIG &&
make

这个包没有附带测试套件。

现在,作为root用户:

make install

内容

安装程序: None

安装库: libxcb-cursor.so

安装目录: None

简短描述

libxcb-cursor.so   是Xlib的libXcursor函数的一个端口。

24.16 Mesa-22.3.5


简介Mesa

Mesa是一个与OpenGL兼容的三维图形库。

注意

Mesa的更新相对频繁。你可能想要使用最新的22.3.x mesa版本。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

额外下载

Mesa依赖

必要

Xorg Libraries, libdrm-2.4.115, 和 Mako-1.2.4

推荐

libva-2.17.0 (要为某些镓驱动提供VA-API支持,请注意这里有一个循环依赖。您必须首先在没有EGL和GLX支持的情况下构建libva,安装此包并重新构建libva), libvdpau-1.5 (构建VDPAU驱动), LLVM-15.0.7 (对于Gallium3D, nouveau和radeonsi驱动程序和swrast,软件光栅化有时被称为llvmpipe。查看 https://docs.mesa3d.org/systems.html 获取更多信息), 和 wayland-protocols-1.31 (需要Plasma-5.26.5, GNOME, 推荐使用GTK+-3.24.36)

可选

libgcrypt-1.10.1, libunwind-1.6.2, lm-sensors-3-6-0 , Nettle-3.8.1, Valgrind-3.20.0, mesa-demos (提供300多个额外的演示来测试Mesa;这包括上面补丁添加的相同程序), Bellagio OpenMAX Integration Layer (用于移动平台), glslang (用于vulkan驱动), libtizonia, 和 libvulkan

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/mesalib

安装Mesa

如果您已经下载了xdemos补丁(如果测试Xorg的安装是否符合BLFS说明,则需要下载),通过运行以下命令应用它:

patch -Np1 -i ../mesa-22.3.5-add_xdemos-1.patch

运行以下命令安装Mesa:

mkdir build &&
cd    build &&

meson setup                   \
      --prefix=$XORG_PREFIX   \
      --buildtype=release     \
      -Dplatforms=x11,wayland \
      -Dgallium-drivers=auto  \
      -Dvulkan-drivers=""     \
      -Dvalgrind=disabled     \
      -Dlibunwind=disabled    \
      ..                      &&

ninja

要测试结果,请执行以下命令: meson configure -Dbuild-tests=true && ninja test.

现在,作为root用户:

ninja install

如果需要,以root用户运行以下命令来安装可选的文档:

install -v -dm755 /usr/share/doc/mesa-22.3.5 &&
cp -rfv ../docs/* /usr/share/doc/mesa-22.3.5

命令解释

--buildtype=release: 这个开关确保了完全优化的构建,并且禁用了调试断言,这将在某些用例中严重降低库的速度。如果没有这个开关,构建大小可以扩展到2GB范围。

-Dgallium-drivers="...": 该参数控制应该构建哪些Gallium3D驱动程序。

-Dplatforms="...": 此参数控制将支持哪些窗口系统。可用的linux平台有x11和wayland。

-Dvulkan-drivers="": 这个开关允许选择构建哪些Vulkan驱动程序。默认是auto,但这需要可选依赖glslang。因此,最好传递一个空列表,以消除对该依赖的需求。反正BLFS也不会用Vulkan。

-Dvalgrind=disabled: 此参数在构建过程中禁用Valgrind的使用。如果您安装了Valgrind,并希望检查内存泄漏,请删除此参数。

-Dlibunwind=disabled: 此参数禁用libunwind的使用。

meson configure -Dbuild-tests=true: 此命令将重新配置构建以设置-Dbuild-tests=true,但保持meson setup命令中指定的其他选项不变。它允许ninja test构建和运行单元测试。

-Degl-native-platform="...": 该参数控制将建立的嵌入式图形库支持。可用的linux选项有auto(默认)、x11、wayland、surfaceless和drm。

内容

安装程序: glxgears 和 glxinfo

安装库: libEGL.so, libGL.so, libGLESv1_CM.so, libGLESv2.so, libgbm.so, libglapi.so, 和 libxatracker.so

安装驱动: crocus_dri.so, i915_dri.so, iris_dri.so, kms_swrast_dri.so, nouveau_dri.so, nouveau_drv_video.so, r300_dri.so, r600_dri.so, r600_drv_video.so, radeonsi_dri.so, radeonsi_drv_video.so, swrast_dri.so, virtio_gpu_dri.so, virtio_gpu_drv_video.so, vmwgfx_dri.so, libvdpau_nouveau.so, libvdpau_r300.so libvdpau_r600.so, 和 libvdpau_radeonsi.so libvdpau_virtio_gpu.so (其中许多驱动是硬链接的).

安装目录: $XORG_PREFIX/{include/{EGL,GLES,GLES2,GLES3,KHR}, $XORG_PREFIX/lib/{dri,vdpau}}, $XORG_PREFIX/share/drirc.d (包含各种应用程序的解决方案,特别是浏览器和游戏), 和 /usr/share/doc/mesa-22.3.5

简短描述

glxgears   是一个用于解决图形问题的GL演示程序。

glxinfo   是一个诊断程序,显示有关图形硬件和已安装的GL库的信息。

libEGL.so   提供EGL-1.4规范定义的本地平台图形界面。

libgbm.so   是Mesa图形缓冲管理器库。

libGLESv1_CM.so   是Mesa OpenGL ES 1.1库。

libGLES2.so   是Mesa OpenGL ES 2.0库。

libGL.so   是主要的Mesa OpenGL库。

24.17 xbitmaps-1.1.2


简介xbitmaps

xbitmaps包包含了在Xorg章节构建的多个应用程序使用的位图图像。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

xbitmaps依赖

必要

util-macros-1.20.0

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xbitmaps

安装xbitmaps

运行以下命令安装xbitmaps:

./configure $XORG_CONFIG

这个包没有附带测试套件。

现在,作为root用户:

make install

内容

安装程序: None

安装库: None

安装目录: $XORG_PREFIX/include/X11/bitmaps

24.18 Xorg Applications


简介Xorg Applications

Xorg应用程序提供了在以前的X窗口实现中可用的预期应用程序。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

Xorg Applications依赖

必要

libpng-1.6.39, Mesa-22.3.5, xbitmaps-1.1.2, 和 xcb-util-0.4.1

可选

Linux-PAM-1.5.2cairo-5cNickle (只有当你想尝试运行没有文档的xkeyhost脚本时才可以).

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/Xorg7Applications

下载Xorg Applications

首先,创建一个要下载的文件列表。当下载完成时,此文件还将用于验证下载的完整性:

cat > app-7.md5 << "EOF"
5d3feaa898875484b6b340b3888d49d8  iceauth-1.0.9.tar.xz
c4a3664e08e5a47c120ff9263ee2f20c  luit-1.1.1.tar.bz2
fd2e6e5a297ac2bf3d7d54799bf69de0  mkfontscale-1.2.2.tar.xz
05423bb42a006a6eb2c36ba10393de23  sessreg-1.1.3.tar.xz
2f72c7170cdbadc8ef786b2f9cfd4a69  setxkbmap-1.3.3.tar.xz
9f7a4305f0e79d5a46c3c7d02df9437d  smproxy-1.0.7.tar.xz
e96b56756990c56c24d2d02c2964456b  x11perf-1.6.1.tar.bz2
dbcf944eb59343b84799b2cc70aace16  xauth-1.1.2.tar.xz
5b6405973db69c0443be2fba8e1a8ab7  xbacklight-1.2.3.tar.bz2
82a90e2feaeab5c5e7610420930cc0f4  xcmsdb-1.0.6.tar.xz
89e81a1c31e4a1fbd0e431425cd733d7  xcursorgen-1.0.8.tar.xz
f67116760888f2e06486ee3d179875d2  xdpyinfo-1.3.3.tar.xz
34aff1f93fa54d6a64cbe4fee079e077  xdriinfo-1.0.7.tar.xz
61219e492511b3d78375da76defbdc97  xev-1.2.5.tar.xz
41afaa5a68cdd0de7e7ece4805a37f11  xgamma-1.0.7.tar.xz
48ac13856838d34f2e7fca8cdc1f1699  xhost-1.0.9.tar.xz
ac6b7432726008b2f50eba82b0e2dbe4  xinput-1.6.3.tar.bz2
a11d4d6eeda762f13818684c0670f89f  xkbcomp-1.4.6.tar.xz
05ce1abd8533a400572784b1186a44d0  xkbevd-1.1.5.tar.xz
cf65ca1aaf4c28772ca7993cfd122563  xkbutils-1.0.5.tar.xz
f62b99839249ce9a7a8bb71a5bab6f9d  xkill-1.0.6.tar.xz
da5b7a39702841281e1d86b7349a03ba  xlsatoms-1.1.4.tar.xz
ab4b3c47e848ba8c3e47c021230ab23a  xlsclients-1.1.5.tar.xz
f33841b022db1648c891fdc094014aee  xmessage-1.0.6.tar.xz
0d66e07595ea083871048c4b805d8b13  xmodmap-1.0.11.tar.xz
9cf272cba661f7acc35015f2be8077db  xpr-1.1.0.tar.xz
33c090d8632a300e63efbf36edd6a333  xprop-1.2.6.tar.xz
f822a8d5f233e609d27cc22d42a177cb  xrandr-1.5.2.tar.xz
85f04a810e2fb6b41ab872b421dce1b1  xrdb-1.2.1.tar.bz2
33b04489e417d73c90295bd2a0781cbb  xrefresh-1.0.7.tar.xz
18ff5cdff59015722431d568a5c0bad2  xset-1.2.5.tar.xz
fa9a24fe5b1725c52a4566a62dd0a50d  xsetroot-1.1.3.tar.xz
d698862e9cad153c5fefca6eee964685  xvinfo-1.1.5.tar.xz
f783a209f2e3fa13253cedb65eaf9cdb  xwd-1.0.8.tar.bz2
26d46f7ef0588d3392da3ad5802be420  xwininfo-1.1.5.tar.bz2
5ff5dc120e8e927dc3c331c7fee33fc3  xwud-1.0.6.tar.xz
EOF

要使用wget下载所需的文件,使用以下命令:

mkdir app &&
cd app &&
grep -v '^#' ../app-7.md5 | awk '{print $2}' | wget -i- -c \
    -B https://www.x.org/pub/individual/app/ &&
md5sum -c ../app-7.md5

安装Xorg Applications

注意

在一个脚本中安装多个包时,需要以root用户身份进行安装。有3个通用选项可用于完成此操作。

  1. 以root用户身份运行整个脚本(不推荐)。

  2. 使用Sudo-1.9.13p1包中的sudo命令。

  3. 使用su -c “command arguments”(需要引号),它将在每次循环迭代时询问根密码。

处理这种情况的一种方法是创建一个简短的bash函数,它可以自动选择适当的方法。一旦在环境中设置了命令,就不需要再次设置了。

as_root()
{
  if   [ $EUID = 0 ];        then $*
  elif [ -x /usr/bin/sudo ]; then sudo $*
  else                            su -c \\"$*\\"
  fi
}

export -f as_root

首先,启动一个子shell,它会在发生错误时退出:

bash -e

运行以下命令安装所有包:

for package in $(grep -v '^#' ../app-7.md5 | awk '{print $2}')
do
  packagedir=${package%.tar.?z*}
  tar -xf $package
  pushd $packagedir
     case $packagedir in
       luit-[0-9]* )
         sed -i -e "/D_XOPEN/s/5/6/" configure
       ;;
     esac

     ./configure $XORG_CONFIG
     make
     as_root make install
  popd
  rm -rf $packagedir
done

最后,退出之前启动的shell:

exit

除非你安装了可选依赖项,否则请删除被报告为已被破坏的未归档脚本(xkeystone由xrandr包提供)。

as_root rm -f $XORG_PREFIX/bin/xkeystone

内容

安装程序: iceauth, luit, mkfontdir, mkfontscale, sessreg, setxkbmap, smproxy, x11perf, x11perfcomp, xauth, xbacklight, xcmsdb, xcursorgen, xdpr, xdpyinfo, xdriinfo, xev, xgamma, xhost, xinput, xkbbell, xkbcomp, xkbevd, xkbvleds, xkbwatch, xkill, xlsatoms, xlsclients, xmessage, xmodmap, xpr, xprop, xrandr, xrdb, xrefresh, xset, xsetroot, xvinfo, xwd, xwininfo, 和 xwud

安装库: None

安装目录: None

简短描述

iceauth   是ICE权威文件实用程序。

luit   为Unicode终端提供区域设置和ISO 2022支持。

mkfontdir   在目录中创建X字体文件的索引。

mkfontscale   为X创建可扩展字体文件的索引。

sessreg   为non-init客户端管理utmp/wtmp条目。

setxkbmap   使用X键盘扩展设置键盘。

smproxy   是会话管理器代理。

x11perf   是一个X11服务器性能测试程序。

x11perfcomp   是一个X11服务器性能比较程序。

xauth   是X权威文件实用程序。

xbacklight   使用RandR扩展调整背光亮度。

xcmsdb   是用于X色彩管理系统的设备色彩表征实用程序。

xcursorgen   从PNG图像集合中创建X光标文件。

xdpr   将X窗口直接转储到打印机。

xdpyinfo   是X的显示信息实用程序。

xdriinfo   查询DRI驱动配置信息。

xev   打印X个事件的内容。

xgamma   通过X服务器改变显示器的伽马校正。

xhost   是一个针对X的服务器访问控制程序。

xinput   是一个配置和测试X输入设备的实用程序。

xkbbell   是一个XKB实用程序,它会触发一个bell事件。

xkbcomp   编译一个XKB的键盘描述。

xkbevd   是XKB事件守护进程。

xkbvleds   显示键盘led的XKB状态。

xkbwatch   显示器修改键和led。

xkill   通过客户端的X资源杀死客户端。

xlsatoms   列出在服务器上定义的interned atoms。

xlsclients   列出在显示器上运行的客户端应用程序。

xmessage   在窗口中显示消息或查询。

xmodmap   是一个用于修改X中的键映射和指针按钮映射的实用程序。

xpr   打印X窗口转储。

xprop   是X的属性显示器。

xrandr   是RandR扩展的原始命令行接口。

xrdb   是X服务器资源数据库实用程序。

xrefresh   刷新X屏幕的全部或部分。

xset   是X的用户偏好实用程序。

xsetroot   是X的根窗口参数设置实用程序。

xvinfo   打印出X-Video扩展适配器信息。

xwd   转储X窗口的图像。

xwininfo   是X的窗口信息实用程序。

xwud   是X的图像显示器。

24.19 xcursor-themes-1.0.6


简介xcursor-themes

xcursor-themes包包含redglass 和 whiteglass动画光标主题。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

xcursor-themes依赖

必要

Xorg Applications

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xcursor-themes

安装xcursor-themes

注意

我们显式地将光标主题安装在/usr中,而不是$XORG_PREFIX,这样非xorg的桌面环境就可以找到它们。

运行以下命令安装xcursor-themes:

./configure --prefix=/usr &&
make

这个包没有附带测试套件。

现在,作为root用户:

make install

内容

安装程序: None

安装库: None

安装目录: /usr/share/icons/handhelds, /usr/share/icons/redglass, 和 /usr/share/icons/whiteglass

24.20 Xorg Fonts


简介Xorg Fonts

Xorg字体包为Xorg应用程序提供了一些可扩展字体和支持包。除了这些字体之外,许多人还希望安装其他TTF或OTF字体。有些在the section called “TTF and OTF fonts”中列出。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

Xorg Fonts依赖

必要

xcursor-themes-1.0.6

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/Xorg7Fonts

下载Xorg Fonts

首先,创建一个要下载的文件列表。当下载完成时,此文件还将用于验证下载的完整性:

cat > font-7.md5 << "EOF"
ec6cea7a46c96ed6be431dfbbb78f366  font-util-1.4.0.tar.xz
c2bcfdc52b8b6462228342cedae2fed9  encodings-1.0.6.tar.xz
0497de0176a0dfa5fac2b0552a4cf380  font-alias-1.0.4.tar.bz2
fcf24554c348df3c689b91596d7f9971  font-adobe-utopia-type1-1.0.4.tar.bz2
e8ca58ea0d3726b94fe9f2c17344be60  font-bh-ttf-1.0.3.tar.bz2
53ed9a42388b7ebb689bdfc374f96a22  font-bh-type1-1.0.3.tar.bz2
bfb2593d2102585f45daa960f43cb3c4  font-ibm-type1-1.0.3.tar.bz2
4ee18ab6c1edf636b8e75b73e6037371  font-misc-ethiopic-1.0.4.tar.bz2
3eeb3fb44690b477d510bbd8f86cf5aa  font-xfree86-type1-1.0.4.tar.bz2
EOF

要使用wget下载所需的文件,使用以下命令:

mkdir font &&
cd font &&
grep -v '^#' ../font-7.md5 | awk '{print $2}' | wget -i- -c \
    -B https://www.x.org/pub/individual/font/ &&
md5sum -c ../font-7.md5

安装Xorg Fonts

注意

在一个脚本中安装多个包时,需要以root用户身份进行安装。有3个通用选项可用于完成此操作。

  1. 以root用户身份运行整个脚本(不推荐)。

  2. 使用Sudo-1.9.13p1包中的sudo命令。

  3. 使用su -c “command arguments”(需要引号),它将在每次循环迭代时询问根密码。

处理这种情况的一种方法是创建一个简短的bash函数,它可以自动选择适当的方法。一旦在环境中设置了命令,就不需要再次设置了。

as_root()
{
  if   [ $EUID = 0 ];        then $*
  elif [ -x /usr/bin/sudo ]; then sudo $*
  else                            su -c \\"$*\\"
  fi
}

export -f as_root

首先,启动一个子shell,它会在发生错误时退出:

bash -e

运行以下命令安装所有包:

for package in $(grep -v '^#' ../font-7.md5 | awk '{print $2}')
do
  packagedir=${package%.tar.?z*}
  tar -xf $package
  pushd $packagedir
    ./configure $XORG_CONFIG
    make
    as_root make install
  popd
  as_root rm -rf $packagedir
done

最后,退出之前启动的shell:

exit

当所有字体都安装好后,必须对系统进行配置,以便Fontconfig可以找到TrueType字体。if XORG_PREFIX is not /usr,以root用户的身份运行以下命令,创建指向/usr/share/fonts下的Xorg TrueType字体目录的符号链接:

install -v -d -m755 /usr/share/fonts                               &&
ln -svfn $XORG_PREFIX/share/fonts/X11/OTF /usr/share/fonts/X11-OTF &&
ln -svfn $XORG_PREFIX/share/fonts/X11/TTF /usr/share/fonts/X11-TTF

内容

安装程序: bdftruncate 和 ucs2any

安装库: None

安装目录: $XORG_PREFIX/share/fonts

简短描述

bdftruncate   从ISO 10646-1编码的BDF字体生成截断的BDF字体。

ucs2any   从ISO 10646-1编码的BDF字体生成任何编码的BDF字体。

24.21 XKeyboardConfig-2.38


简介XKeyboardConfig

XKeyboardConfig包包含X Window系统的键盘配置数据库。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

XKeyboardConfig依赖

必要

Xorg Libraries

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xkeyboard-config

安装XKeyboardConfig

运行以下命令安装XKeyboardConfig:

mkdir build &&
cd    build &&

meson --prefix=$XORG_PREFIX --buildtype=release .. &&
ninja

这个包没有附带测试套件。

现在,作为root用户:

ninja install

命令解释

--buildtype=release: 指定一个适合于稳定版本的构建类型,因为默认情况下可能会生成未优化的二进制文件。

内容

安装程序: None

安装库: None

安装目录: $XORG_PREFIX/share/X11/xkb

24.22 Xwayland-22.1.8


简介Xwayland

Xwayland包是一个运行在wayland服务器之上的Xorg服务器。它已经从主要的Xorg服务器包中分离出来。它允许在一个wayland会话中运行X个客户端。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

Xwayland依赖

必要

libxcvt-0.1.2, Pixman-0.42.2, wayland-protocols-1.31, 和 Xorg Fonts (仅font-util)

推荐

libepoxy-1.5.10, libtirpc-1.3.3, 和 Mesa-22.3.5

可选

git-2.39.2 (下载测试所需的包), libgcrypt-1.10.1, Nettle-3.8.1, xmlto-0.0.28, Xorg Legacy Fonts (只有bdftopcf,用于构建测试所需的字体), rendercheck (用于测试), 和 weston (用于测试)

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xwayland

安装Xwayland

运行以下命令安装xwayland:

sed -i '/install_man/,$d' meson.build &&

mkdir build &&
cd    build &&

meson --prefix=$XORG_PREFIX         \
      --buildtype=release           \
      -Dxkb_output_dir=/var/lib/xkb \
      ..                            &&
ninja

构建测试框架需要一些工作。首先,weston引入了几个依赖项,但可以通过禁用不需要的功能来减少依赖项的数量。weston精简构建的meson命令见Upstream continuous integration build

除了上述的可选依赖,运行测试还需要下载另外两个框架:

mkdir tools &&
pushd tools &&

git clone https://gitlab.freedesktop.org/mesa/piglit.git --depth 1 &&
cat > piglit/piglit.conf << EOF                                    &&
[xts]
path=$(pwd)/xts
EOF

git clone https://gitlab.freedesktop.org/xorg/test/xts --depth 1   &&

export DISPLAY=:22           &&
../hw/vfb/Xvfb $DISPLAY &
VFB_PID=$!                   &&
cd xts                       &&
CFLAGS=-fcommon ./autogen.sh &&
make                         &&
kill $VFB_PID                &&
unset DISPLAY VFB_PID        &&
popd

然后可以使用以下命令运行测试:

XTEST_DIR=$(pwd)/tools/xts PIGLIT_DIR=$(pwd)/tools/piglit ninja test

现在,作为root用户:

ninja install

如果没有安装Xorg-Server-21.1.7,并且你不打算以后安装它,你可以从这个包安装Xvfb。作为root用户:

install -vm755 hw/vfb/Xvfb /usr/bin

命令解释

sed -i ‘/install_man/,$d’ meson.build: 阻止安装Xserver的手册页,该手册也由Xorg-Server-21.1.7提供。如果没有安装Xorg-Server-21.1.7,并且您不打算以后安装它,请删除此命令。

--buildtype=release: 指定一个适合于稳定版本的构建类型,因为默认情况下可能会生成未优化的二进制文件。

内容

安装程序: Xwayland

安装库: None

安装目录: None

简短描述

Xwayland   允许X个客户端在wayland下运行。

24.23 Xorg-Server-21.1.7


简介Xorg Server

Xorg服务器是X Window系统的核心。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

Xorg Server依赖

必要

libxcvt-0.1.2, Pixman-0.42.2, Xorg Fonts (仅font-util), 在运行时: xkeyboard-config-2.38

推荐

libepoxy-1.5.10 (需要glamor), libtirpc-1.3.3, Systemd-252, 和 Xorg Libinput-1.2.1 (运行时)

可选

acpid-2.0.34 (运行时), Doxygen-1.9.6 (构建API文档), fop-2.8 (构建文档), libunwind-1.6.2, Nettle-3.8.1, libgcrypt-1.10.1, xcb-util-keysyms-0.4.1, xcb-util-image-0.4.1, xcb-util-renderutil-0.3.10, xcb-util-wm-0.4.2 (四个都用来构建Xephyr), xmlto-0.0.28 (构建文档), xkeyboard-config-2.38 (用于测试), rendercheck (用于测试), 和 xorg-sgml-doctools (构建文档)

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/Xorg7Server

安装Xorg Server

运行以下命令安装xorg server:

mkdir build &&
cd    build &&

meson --prefix=$XORG_PREFIX \
      --localstatedir=/var  \
      -Dsuid_wrapper=true   \
      -Dxkb_output_dir=/var/lib/xkb &&
ninja

要测试结果,请执行以下命令: ninja test.你需要首先以root用户的身份运行ldconfig,否则某些测试可能会失败。

现在作为root用户:

ninja install &&
mkdir -pv /etc/X11/xorg.conf.d

命令解释

-Dsuid_wrapper=true: 为无根xserver系统上的遗留驱动程序支持构建suid-root包装器。

-Dsystemd_logind=false: 此开关禁用systemd-logind集成,允许Xorg服务器在没有配置systemd PAM模块的情况下工作。

-Dxephyr=true: 这个选项允许在满足Xephyr依赖项的情况下构建Xephyr。

内容

安装程序: gtf, X, Xnest, Xorg, Xvfb, 和可选 Xephyr

安装库: 几个在$XORG_PREFIX/lib/xorg/modules/下包括modesetting_drv.so驱动程序

安装目录: /etc/X11/xorg.conf.d, $XORG_PREFIX/include/xorg, $XORG_PREFIX/lib/xorg, 和 $XORG_PREFIX/share/X11/xorg.conf.d

简短描述

gtf   计算VESA GTF模式线。

X   是指向Xorg的符号链接。

Xephyr   是一个嵌套的X服务器,支持现代X扩展。

Xnest   是嵌套的X服务器。

Xorg   为X11R7服务器。

Xvfb   是X版本11的虚拟framebuffer X服务器。

modesetting_drv.so   为使用内核模式设置(KMS)的机器提供一个视频驱动程序。这将使用glamor,如果启用,硬件提供加速。

24.24 Xorg Drivers


简介Xorg Drivers

Xorg驱动程序页面包含构建Xorg驱动程序的说明,这些驱动程序是Xorg服务器利用其运行的硬件所必需的。Xorg服务器启动至少需要一个输入和一个视频驱动程序。

在使用KMS的机器上,模式设置驱动程序由xorg-server提供,可以代替特定硬件的视频驱动程序,但性能会降低。它也可以用于在qemu下运行的虚拟机中(不需要硬件加速)。

注意

如果您不确定您拥有的视频硬件,您可以使用pciutils-3.9.0中的lspci来确定您拥有的视频硬件,然后查看软件包的描述,以确定您需要的驱动程序。

注意

除了下面列出的驱动程序之外,还有几个用于非常老的硬件的其他驱动程序可能仍然是相关的。这些驱动程序的最新版本可以从https://www.x.org/archive/individual/driver下载。构建这些间歇性维护的驱动程序的说明可以在BLFS的先前版本中找到:https://www.linuxfromscratch.org/blfs/view/7.6/x/x7driver.html

libevdev 1.13.0

简介libevdev

libevdev包包含用于Xorg输入驱动程序的常用函数。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

libevdev依赖

可选

Doxygen-1.9.6Valgrind-3.20.0 (optional用于测试)

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/libevdev

内核配置

在内核配置中启用下列选项,必要时重新编译内核。

Device Drivers  --->
    Input device support --->
        <*> Generic input layer (needed for keyboard, mouse, ...) [CONFIG_INPUT]
        <*>   Event interface                       [CONFIG_INPUT_EVDEV]
        [*]   Miscellaneous devices  --->           [CONFIG_INPUT_MISC]
            <*/m>    User level driver support      [CONFIG_INPUT_UINPUT]

最后一项对libevdev来说不是严格要求的。如果编译为模块,则不会自动加载。它需要完整的测试覆盖。

安装libevdev

运行以下命令安装libevdev:

mkdir build &&
cd    build &&

meson --prefix=$XORG_PREFIX    \
      --buildtype=release      \
      -Ddocumentation=disabled &&
ninja

回归测试可以以root用户的身份使用ninja test在图形会话中运行。您需要在内核中启用CONFIG_INPUT_UINPUT设置,以获得完整的测试覆盖率。如果它作为一个模块被启用,该模块被命名为uinput,并且需要在运行测试之前加载。注意,在某些系统上,测试可能会导致硬锁并需要重新启动。在笔记本电脑上,系统将进入睡眠状态,需要被唤醒以完成测试套件。

现在,作为root用户:

ninja install

内容

安装Xorg程序: libevdev-tweak-device, mouse-dpi-tool, 和 touchpad-edge-detector

安装Xorg库: libevdev.so

安装Xorg目录: $XORG_PREFIX/include/libevdev-1.0

简短描述

libevdev-tweak-device   是一个更改内核设备属性的工具。

mouse-dpi-tool   是一个估计鼠标分辨率的工具。

touchpad-edge-detector   touchpad-edge-detector是一个工具,它从内核读取touchpad事件,并分别计算x和y坐标的最小值和最大值。

libevdev.so   是一个Xorg驱动程序输入函数库。

Xorg Evdev Driver-2.10.6

简介Xorg Evdev Driver

Xorg Evdev Driver包包含了Xorg X服务器的通用Linux输入驱动程序。它可以处理键盘、鼠标、触摸板和wacom设备,但对于touchpad和wacom高级处理,需要额外的驱动程序。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

Xorg Evdev Driver依赖

必要

libevdev-1.13.0, mtdev-1.1.6, 和 Xorg-Server-21.1.7

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xorg-evdev-driver

安装Xorg Evdev Driver

运行以下命令安装Xorg Evdev Driver:

./configure $XORG_CONFIG &&
make

这个包没有附带测试套件。

现在,作为root用户:

make install

内容

安装Xorg驱动: evdev_drv.so

简短描述

evdev_drv.so   是Linux通用事件设备的Xorg输入驱动程序。

libinput-1.22.1

简介Libinput

Libinput是一个库,它为显示服务器和其他需要直接处理输入设备的应用程序处理输入设备。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

libinput依赖

必要

libevdev-1.13.0mtdev-1.1.6

可选

Valgrind-3.20.0 (运行测试), GTK+-3.24.36 (来构建GUI事件查看器), libunwind-1.6.2 (required用于测试), libwacom-2.6.0, sphinx-6.1.3 (需要构建文档), 和 pyparsing-3.0.9 (对于一个non-root测试)

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/libinput

运行Libinput测试套件的内核配置

尽管libinput使用与libevdev-1.13.0相同的内核配置,但其广泛的测试套件需要存在/dev/uinput(以及Valgrind-3.20.0libunwind-1.6.2)。

如果要运行完整的测试,请在内核配置中启用以下选项,并在必要时重新编译内核:

Device Drivers --->
    Input device support --->
        Miscellaneous Devices --->
        <*/M>   User level driver support        [CONFIG_INPUT_UINPUT]

如果将其构建为模块,则需要在测试套件运行之前插入。

在Xorg系统上,您还需要防止测试套件期间产生的事件干扰您的桌面。将文件test/50-litest.conf复制到${XORG_PREFIX}/share/X11/xorg.conf.d中。更多信息请参见libinput test suite

安装Libinput

运行以下命令安装libinput:

mkdir build &&
cd    build &&

meson setup --prefix=$XORG_PREFIX    \
            --buildtype=release      \
            -Ddebug-gui=false        \
            -Dtests=false            \
            -Dlibwacom=false         \
            -Dudev-dir=/usr/lib/udev \
            ..                      &&
ninja

注意

如果你想运行完整的测试,请从上面的meson命令中删除-Dtests。请阅读“运行libinput测试套件的内核配置”(如上)。

如果你已经启用了全部测试,你可以通过执行ninja test以root用户身份运行主测试。将运行大量的测试。wayland有一项测试失败了。

现在,作为root用户:

ninja install

如果你将-Ddocumentation=true传递给meson,你可以以root用户的身份运行以下命令来安装生成的文档:

install -v -dm755      /usr/share/doc/libinput-1.22.1/html &&
cp -rv Documentation/* /usr/share/doc/libinput-1.22.1/html

命令解释

--buildtype=release: 指定一个适合于稳定版本的构建类型,因为默认情况下可能会生成未优化的二进制文件。

-Ddebug-gui=false: 此开关禁止为libinput创建可视化调试助手。如果你想删除它,那么你已经安装了GTK+-3.24.36

-Dtests=false: 此开关禁用主测试的编译。即使将测试定义为false,您仍然可以以普通用户身份运行前四个次要测试,但如果没有安装pyparsing-3.0.9,则将跳过一个测试。

-Dlibwacom=false: 如果你已经安装了libwacom-2.6.0,或者正在安装GNOME,请删除此选项。

-Dudev-dir=/usr/lib/udev: 如果XORG_PREFIX的值没有设置为/usr,这个选项会阻止包将Udev规则和辅助程序安装到未被Udev守护进程搜索的$XORG_PREFIX/lib/udev中。对于XORG_PREFIX设置为/usr的系统,这个选项是不需要的,但没有坏处。

-Ddocumentation=true: 这个开关可以生成文档。如果想生成文档,请添加它。你必须安装Doxygen-1.9.6Graphviz-7.1.0

内容

安装程序: libinput

安装库: libinput.so

安装目录: /etc/libinput, $XORG_PREFIX/libexec/libinput, $XORG_PREFIX/usr/share/libinput, 和 (可选的) $XORG_PREFIX/share/doc/libinput-1.22.1

简短描述

libinput   是一组与libinput库接口的工具。

libinput.so   包含用于处理输入设备的API函数。

Xorg Libinput Driver-1.2.1

简介Xorg Libinput Driver

X.Org Libinput驱动程序是Libinput的一个薄包装,允许Libinput用于x中的输入设备。该驱动程序可以用作evdev和synaptics的直接替代。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

Xorg Libinput Driver依赖

必要

libinput-1.22.1Xorg-Server-21.1.7

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xorg-libinput-driver

安装Xorg Libinput Driver

运行以下命令安装Xorg Libinput Driver:

./configure $XORG_CONFIG &&
make

要测试结果,请执行 make check.

现在,作为root用户:

make install

内容

安装Xorg驱动: libinput_drv.so

简短描述

libinput_drv.so   是一个Xorg输入驱动程序,用于鼠标、键盘、触摸板、触摸屏和平板电脑设备。

Xorg Synaptics Driver-1.9.2

简介Xorg Synaptics Driver

Xorg Synaptics驱动包包含X.Org输入驱动、支持程序和Synaptics touchpad的SDK。尽管evdev驱动程序可以很好地处理触摸板,但如果你想使用高级功能,如多次点击,触摸板滚动,在打字时关闭触摸板等,则需要此驱动程序。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

Xorg Synaptics Driver依赖

必要

libevdev-1.13.0Xorg-Server-21.1.7

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xorg-synaptics-driver

安装Xorg Synaptics Driver

运行以下命令安装Xorg Synaptics Driver:

./configure $XORG_CONFIG &&
make

这个包没有附带测试套件。

现在,作为root用户:

make install

内容

安装程序: synclient 和 syndaemon

安装Xorg驱动: synaptics_drv.so

简短描述

synclient   是一个命令行实用程序,用于查询和修改Synaptics驱动程序选项。

syndaemon   是一个监控键盘活动并在使用键盘时禁用触摸板的程序。

synaptics_drv.so   是一个用于touchpad的Xorg输入驱动程序。

Xorg Wacom Driver-1.1.0

简介Xorg Wacom Driver

Xorg Wacom驱动程序包包含X.Org X11驱动程序和用于Wacom和类似Wacom的平板电脑的SDK。它不需要使用Wacom平板电脑,xf86-input-evdev驱动程序可以毫无问题地处理这些设备。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

Xorg Wacom Drivers依赖

必要

Xorg-Server-21.1.7

可选

Doxygen-1.9.6Graphviz-7.1.0

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xorg-wacom-driver

内核配置

要使用带有USB接口的Wacom平板电脑,请在内核配置中启用以下选项并重新编译。请注意,对于具有串行或蓝牙接口的平板电脑,可能需要其他配置选项:

Device Drivers  --->
    HID support  --->
        -*- HID bus support                                      [CONFIG_HID]
            Special HID drivers --->
                <*/M> Wacom Intuos/Graphire tablet support (USB) [CONFIG_HID_WACOM]

安装Xorg Wacom Driver

运行以下命令安装Xorg Wacom Driver:

./configure $XORG_CONFIG &&
make

要测试结果,请执行以下命令: make check.

现在,作为root用户:

make install

内容

安装程序: isdv4-serial-debugger, isdv4-serial-inputattach, 和 xsetwacom

安装Xorg驱动: wacom_drv.so

简短描述

xsetwacom   是一个命令行实用程序,用于查询和修改wacom驱动程序设置。

wacom_drv.so   是一个用于Wacom设备的Xorg输入驱动程序。

Xorg AMDGPU Driver-23.0.0

简介Xorg AMDGPU Driver

Xorg AMDGPU驱动程序包包含用于较新的AMD Radeon视频卡和较新的集成图形处理器(Apu)的X.Org视频驱动程序。这包括从Volcanic Islands开始的视频卡。如果内核启用了实验性支持,它也可以用于Southern 和 Sea Islands。

该软件包在LFS 11.3平台上可以正常构建和工作。

注意

为了直接渲染工作,您需要在Mesa-22.3.5构建时启用radeonsi镓驱动程序。此外,所有卡和更新的apu都要求在加载内核驱动程序时固件可用。如果您没有遵循About Firmware的视频卡固件部分中的说明,该说明为模块化构建提供了/lib/firmware中的固件,固件可以从https://anduin.linuxfromscratch.org/BLFS/linux-firmware/获得——请参阅下面的the section called “Kernel Configuration for additional firmware”以获取附加固件。

包信息

Xorg AMDGPU驱动依赖

必要

Xorg-Server-21.1.7 (必须启用glamor)

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xorg-amdgpu-driver

内核配置

在内核配置中启用下列选项,必要时重新编译内核。

Device Drivers  --->
    Graphics support --->
        <*> Direct Rendering Manager (XFree86 ... support) --->     [CONFIG_DRM]
        <*/M> AMD GPU                                               [CONFIG_DRM_AMDGPU]
            < /*> Enable amdgpu support for SI parts                [CONFIG_DRM_AMDGPU_SI]
            < /*> Enable amdgpu support for CIK parts               [CONFIG_DRM_AMDGPU_CIK]

最后两个选项启用了对Southern和Sea Islands的AMD gpu的实验性支持,因此它们可以与此驱动程序一起使用。注意,该支持被标记为experimental,默认情况下是禁用的。Xorg ATI Driver-19.1.0应该用于这些GPU。

额外固件的内核配置

如果您需要添加固件,请安装这些文件,然后在内核配置中指向它们,并在必要时重新编译内核。要找出您需要的固件,请咨询Decoder ring for engineering vs marketing names。下载任何名为<ENGINEERING_NAME>_rlc.bin的固件。下面是一个Radeon R7 M340 GPU的例子,它的代码是Iceland/Topaz,还有一个网卡,也需要固件:

CONFIG_EXTRA_FIRMWARE="amdgpu/topaz_ce.bin amdgpu/topaz_k_smc.bin amdgpu/topaz_mc.bin
                       amdgpu/topaz_me.bin amdgpu/topaz_mec2.bin amdgpu/topaz_mec.bin
                       amdgpu/topaz_pfp.bin amdgpu/topaz_rlc.bin amdgpu/topaz_sdma1.bin
                       amdgpu/topaz_sdma.bin amdgpu/topaz_smc.bin rtl_nic/rtl8168e-3.fw"
CONFIG_EXTRA_FIRMWARE_DIR="/lib/firmware"

注意

CONFIG_EXTRA_FIRMWARE应该在同一行。上面显示为多行,仅供展示。

提示

您可以在启动后检查dmesg输出以查看缺少哪些固件。

或者,如果您将linux内核中的CONFIG_DRM_AMDGPU更改为’=m’,则固件可以在安装模块时自动从/lib/firmware/amdgpu/加载。这节省了很小的空间,但也意味着屏幕将在framebuffer出现之前保持较长时间的空白。发行版采用这种方法,因为指定所有可能的固件是不现实的,而且内核会过大。

安装Xorg AMDGPU驱动

运行以下命令安装Xorg AMDGPU驱动:

./configure $XORG_CONFIG &&
make

这个包没有附带测试套件。

现在,作为root用户:

make install

内容

安装Xorg驱动: amdgpu_drv.so

简短描述

amdgpu_drv.so   是一个Xorg视频驱动最新的AMD Radeon视频卡。

Xorg ATI Driver-19.1.0

简介Xorg ATI驱动

Xorg ATI驱动程序包包含了X.Org视频驱动程序的ATI Radeon视频卡包括从R100到”Volcanic Islands”芯片组的所有芯片组。

该软件包在LFS 11.3平台上可以正常构建和工作。

注意

为了直接渲染与较新的Radeon卡(R300和以后的芯片组)一起工作,您需要在Mesa-22.3.5构建时启用R300, r600和radeonsi镓驱动程序。另外,有些卡需要在加载内核驱动程序时提供固件。在这种情况下,如果您没有遵循About Firmware的视频卡固件部分中的说明,该说明为模块化构建提供了/lib/firmware中的固件,固件可以从https://anduin.linuxfromscratch.org/BLFS/linux-firmware/获得——请参阅下面的the section called “Kernel Configuration for additional firmware”以获取附加固件。

包信息

额外下载

Xorg ATI驱动依赖

必要

Xorg-Server-21.1.7 (建议建造时启用glamor)

注意

Glamor对于Southern, Sea 或 Volcanic Islands GPU是必需的,并且在所有其他R600或更高版本的radeon gpu中默认使用。要了解哪些gpu属于这些类别,请阅读Decoder ring for engineering vs marketing names

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xorg-ati-driver

内核配置

在内核配置中启用下列选项,必要时重新编译内核。

Device Drivers  --->
    Graphics support --->
        <*> Direct Rendering Manager (XFree86 ... support) ---> [CONFIG_DRM]
        <*> ATI Radeon                                          [CONFIG_DRM_RADEON]

额外固件的内核配置

如果您需要添加固件,请安装这些文件,然后在内核配置中指向它们,并在必要时重新编译内核。要找出您需要的固件,请咨询Decoder ring for engineering vs marketing names。下载任何名为<ENGINEERING_NAME>_rlc.bin的固件。请注意,对于R600和R700系列,除了特定于模型的固件之外,通用的R600_rlc.binR700_rlc.bin是必需的,而对于后续的版本,除了特定于模型的固件之外,您还需要BTC_rlc.bin。下面是一个Radeon HD6470的例子,它是”Northern Islands” GPU,加上一个RTL网络芯片,也需要额外的固件:

CONFIG_EXTRA_FIRMWARE="radeon/BTC_rlc.bin radeon/CAICOS_mc.bin radeon/CAICOS_me.bin
radeon/CAICOS_pfp.bin radeon/CAICOS_smc.bin rtl_nic/rtl8168e-3.fw"
CONFIG_EXTRA_FIRMWARE_DIR="/lib/firmware"

注意

CONFIG_EXTRA_FIRMWARE应该在同一行。上面显示为两行,仅供展示。

提示

您可以在启动后检查dmesg输出以查看缺少哪些固件。

或者,如果您将CONFIG_DRM_RADEON更改为’=m’在您的.config固件可以自动从/lib/firmware/radeon安装模块时加载。这节省了很小的空间,但也意味着屏幕将在framebuffer出现之前保持较长时间的空白。发行版采用这种方法,因为指定所有可能的固件是不现实的,而且内核会过大。

安装Xorg ATI驱动

首先,为Xorg-Server应用一个补丁,包括已知的性能回归和未来的问题修复。

patch -Np1 -i ../xf86-video-ati-19.1.0-upstream_fixes-1.patch

运行以下命令安装Xorg ATI驱动:

./configure $XORG_CONFIG &&
make

这个包没有附带测试套件。

现在,作为root用户:

make install

内容

安装Xorg驱动: ati_drv.so 和 radeon_drv.so

简短描述

ati_drv.so   是一个包装驱动的ATI视频卡,自动检测ATI视频硬件和加载radeon, mach64或r128驱动程序取决于哪个视频卡正在使用。

radeon_drv.so   是一个Xorg视频驱动的ATI Radeon为基础的视频卡。

Xorg Fbdev Driver-0.5.0

简介Xorg Fbdev Driver

Xorg Fbdev驱动程序包包含用于framebuffer设备的X.Org视频驱动程序。如果特定于硬件和VESA的驱动程序加载失败或不存在,该驱动程序通常用作备用驱动程序。如果没有安装此驱动程序,Xorg服务器将在启动时打印警告,但如果硬件特定的驱动程序工作良好,则可以安全地忽略此警告。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

Xorg Fbdev驱动依赖

必要

Xorg-Server-21.1.7

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xorg-fbdev-driver

安装Xorg Fbdev驱动

运行以下命令安装Xorg Fbdev驱动:

./configure $XORG_CONFIG &&
make

这个包没有附带测试套件。

现在,作为root用户:

make install

内容

安装Xorg驱动: fbdev_drv.so

简短描述

fbdev_drv.so   是一个Xorg视频驱动程序,用于framebuffer设备。

Xorg Intel Driver-20230223

简介Xorg Intel驱动

Xorg英特尔驱动程序包包含英特尔集成视频芯片的X.Org视频驱动程序,包括8xx, 9xx, Gxx, Qxx, HD, Iris和Iris Pro图形处理器。

该软件包在LFS 11.3平台上可以正常构建和工作。

注意

该驱动程序用于英特尔集成GPU,需要一个开发版本才能在最新的硬件上正常工作。这个版本现在已经有一年了,有一些问题。Xorg服务器附带的“内核模式设置(KMS)”驱动程序据说可以提供更好的结果。

包信息

Xorg Intel驱动依赖

必要

xcb-util-0.4.1Xorg-Server-21.1.7

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xorg-intel-driver

内核配置

在内核配置中启用以下选项。如有必要,重新编译内核:

Device Drivers  --->
    Graphics support --->
        <*> Direct Rendering Manager (XFree86 ... support) ---> [CONFIG_DRM]
        <*> Intel 8xx/9xx/G3x/G4x/HD Graphics                   [CONFIG_DRM_I915]

安装Xorg Intel驱动

运行以下命令安装Xorg Intel驱动:

./autogen.sh $XORG_CONFIG     \
            --enable-kms-only \
            --enable-uxa      \
            --mandir=/usr/share/man &&
make

这个包没有附带测试套件。

现在,作为root用户:

make install &&

mv -v /usr/share/man/man4/intel-virtual-output.4 \
      /usr/share/man/man1/intel-virtual-output.1 &&

sed -i '/\.TH/s/4/1/' /usr/share/man/man1/intel-virtual-output.1

正在解决英特尔驱动程序的问题

SandyBridge新加速(SNA)代码旨在取代旧的UXA (UMA加速架构),但它的代码量很大,可能会导致问题。但是,上面列出的版本控制系统中的代码版本已经通过了SNA和UXA功能的成功测试。

为了解决这个问题,以及启用对UXA的支持,必须通过创建配置文件来强制使用UXA。如果你也遇到这个问题,以root用户的身份创建以下文件并根据需要进行修改:

cat >> /etc/X11/xorg.conf.d/20-intel.conf << "EOF"
Section   "Device"
        Identifier "Intel Graphics"
        Driver     "intel"
        #Option     "DRI" "2"            # DRI3 is default
        #Option     "AccelMethod"  "sna" # default
        #Option     "AccelMethod"  "uxa" # fallback
EndSection
EOF

命令解释

--enable-kms-only: 此开关省略UMS(用户模式设置)代码。

--enable-uxa: 除了默认的SNA之外,这个开关还允许编译旧的UXA代码。

内容

安装程序: intel-virtual-output

安装库: libIntelXvMC.so

安装Xorg驱动: intel_drv.so

简短描述

intel-virtual-output   是一个将集成的Intel GPU连接到混合系统上的离散输出的实用程序。

intel_drv.so   是一个Xorg视频驱动的英特尔集成图形芯片组。

Xorg Nouveau Driver-1.0.17

简介Xorg Nouveau驱动

Xorg Nouveau驱动程序包包含了Xorg视频驱动程序的NVidia卡,包括RIVA TNT, RIVA TNT2, GeForce 256, QUADRO, GeForce2, QUADRO2, GeForce3, QUADRO DDC, nForce, nForce2, GeForce4, QUADRO4, GeForce FX, QUADRO FX, GeForce 6XXX 和 GeForce 7xxx芯片组。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

Xorg Nouveau驱动依赖

必要

Xorg-Server-21.1.7 (建议建造时启用glamor)

注意

新的“Maxwell”和“Pascal”gpu需要在Xorg服务器上构建Glamor。

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xorg-nouveau-driver

内核配置

在内核配置中启用下列选项,必要时重新编译内核。

Device Drivers  --->
    Graphics support --->
        <*> Direct Rendering Manager (XFree86 ... support) --->     [CONFIG_DRM]
        <*> Nouveau (NVIDIA) cards                                  [CONFIG_DRM_NOUVEAU]
            [*]   Support for backlight control                     [CONFIG_DRM_NOUVEAU_BACKLIGHT]

安装Xorg Nouveau驱动

注意

在继续之前,请确保您已经安装了Mesa-22.3.5和nouveau修复补丁。

首先,修复Xorg Nouveau驱动程序,以构建最新的Xorg服务器:

grep -rl slave | xargs sed -i s/slave/secondary/

运行以下命令安装Xorg Nouveau Driver:

./configure $XORG_CONFIG &&
make

这个包没有附带测试套件。

现在,作为root用户:

make install

内容

安装Xorg驱动: nouveau_drv.so

简短描述

nouveau_drv.so   是一个Xorg视频驱动程序的nVidia视频卡。

Xorg VMware Driver-13.4.0

简介Xorg VMware驱动

Xorg VMware Driver包包含VMware SVGA虚拟视频卡的X.Org视频驱动程序。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

Xorg VMware驱动依赖

必要

Xorg-Server-21.1.7

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xorg-vmware-driver

内核配置

在内核配置中启用下列选项,必要时重新编译内核。

Device Drivers  --->
    Graphics support  --->
        <*> Direct Rendering Manager (XFree86 ... support) --->      [CONFIG_DRM]
        <*> DRM driver for VMware Virtual GPU                        [CONFIG_DRM_VMWGFX]
            [*]   Enable framebuffer console under vmwgfx by default [CONFIG_DRM_VMWGFX_FBCON]

安装Xorg VMware驱动

运行以下命令安装Xorg VMware驱动:

./configure $XORG_CONFIG &&
make

这个包没有附带测试套件。

现在,作为root用户:

make install

内容

安装Xorg驱动: vmware_drv.so

简短描述

vmware_drv.so   是一个Xorg视频驱动的VMware SVGA虚拟视频卡。

intel-media-driver-23.1.2

简介intel-media-driver

intel-media-driver包为Broadwell cpu及更高版本提供的Intel gpu提供了VA API驱动程序。这包括对多种编解码器的支持。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

注意

压缩包intel-media-23.1.2.tar.gz将被解压缩到media-driver-intel-media-23.1.2目录下。

intel-media-driver依赖

必要

CMake-3.25.2, Intel-gmmlib-22.3.4, 和 libva-2.17.0

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/intel-media-driver

安装intel-media-driver

注意

这个包需要很长时间来构建,因为它编译特定于每一代Intel gpu和各种媒体编解码器的代码。

运行以下命令安装intel-media-driver:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=/usr   \
      -DINSTALL_DRIVER_SYSCONF=OFF  \
      -DBUILD_TYPE=Release          \
      -Wno-dev ..                   &&
make

这个包没有附带测试套件。

现在,作为root用户:

make install

内容

安装程序: None

安装库: libigfxcmrt.so

安装驱动: iHD_drv_video.so

安装目录: /usr/include/igfxcmrt

简短描述

libigfxcmrt.so   提供API函数,允许在渲染引擎上运行GPU内核。

libva-2.17.0

简介libva

libva包包含一个库,该库提供对硬件加速视频处理的访问,使用硬件加速视频处理,以便卸载中央处理单元(CPU)来解码和编码压缩的数字视频。VA API视频解码/编码接口针对X窗口系统中的直接渲染基础设施(DRI)是独立于平台和窗口系统的,但它也可能与直接framebuffer和图形子系统一起用于视频输出。加速处理包括支持视频解码、视频编码、子图像混合和渲染。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

额外下载

libva依赖

必要

libdrm-2.4.115

推荐

Mesa-22.3.5

可选

Doxygen-1.9.6, Wayland-1.21.0, 和 intel-gpu-tools

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/libva

安装libva

运行以下命令安装libva:

./configure $XORG_CONFIG &&
make

这个包没有附带测试套件。

现在,作为root用户:

make install

安装intel-vaapi-driver

intel-vaapi-driver程序是专门为基于Intel GPU的显卡设计的。解压intel-vaapi压缩包:

tar -xvf ../intel-vaapi-driver-2.4.1.tar.bz2 &&
cd intel-vaapi-driver-2.4.1

运行以下命令安装驱动:

./configure $XORG_CONFIG &&
make

这个包没有附带测试套件。

现在,作为root用户:

make install

内容

安装程序: None

安装库: libva-drm.so, libva-glx.so, libva.so, libva-wayland.so, 和 libva-x11.so

安装驱动: i965_drv_video.so

安装目录: $XORG_PREFIX/include/va

简短描述

libva.so   包含API函数,提供对硬件加速视频处理的访问。

libvdpau-1.5

简介libvdpau

libvdpau包包含了一个实现VDPAU库的库。

VDPAU (Video Decode and Presentation API for Unix)是一个开源库(libvdpau)和API,最初是由Nvidia为其GeForce 8系列和后来针对X窗口系统的GPU硬件设计的。这个VDPAU API允许视频程序将部分视频解码过程和视频后处理转移到GPU视频硬件。

目前,VDPAU能够转移到GPU上的部分是运动补偿(mo comp)、离散余弦逆变换(iDCT)、VLD(变长解码)和去块现象,适用于MPEG-1、MPEG-2、MPEG-4 ASP (MPEG-4第2部分)、H.264/MPEG-4 AVC和VC-1、WMV3/WMV9编码视频。哪些特定的编解码器可以卸载到GPU上取决于GPU硬件的版本;具体来说,要解码MPEG-4 ASP (MPEG-4第2部分)、Xvid/OpenDivX (DivX 4)和DivX 5格式,需要GeForce 200M (2xxM)系列(Nvidia的GeForce图形处理单元的第11代)或更新的GPU硬件。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

libvdpau依赖

必要

Xorg Libraries

可选

Doxygen-1.9.6, Graphviz-7.1.0, 和 texlive-20220321install-tl-unx

运行时依赖

Mesa-22.3.5

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/libvdpau

安装libvdpau

运行以下命令安装libvdpau:

mkdir build &&
cd    build &&

meson --prefix=$XORG_PREFIX .. &&
ninja

要测试结果,请执行以下命令: ninja test。这个包只有一个测试,dlclose,并且已知它在某些系统上会失败。

现在,作为root用户:

ninja install

如果在构建时使用了doxygen,请以root用户的身份将文档放在版本化目录中:

[ -e $XORG_PREFIX/share/doc/libvdpau ] && mv -v $XORG_PREFIX/share/doc/libvdpau{,1.5}

内容

安装程序: None

安装库: libvdpau.so

安装目录: $XORG_PREFIX/{include,lib}/vdpau

简短描述

libvdpau.so   包含将视频解码过程和视频后处理部分转移到GPU视频硬件的函数。

libvdpau-va-gl-0.4.0

简介libvdpau-va-gl

libvdpau-va-gl包包含了一个实现VDPAU库的库。Libvdpau_va_gl在底层使用OpenGL加速绘图和缩放,VA-API(如果可用)加速视频解码。目前,VA-API在一些英特尔芯片上可用,在一些AMD视频适配器上可以借助libvdpau驱动程序。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

libvdpau-va-gl依赖

必要

CMake-3.25.2, libvdpau-1.5, 和 libva-2.17.0

可选

Doxygen-1.9.6, Graphviz-7.1.0, 和 texlive-20220321install-tl-unx

运行时依赖

Mesa-22.3.5

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/libvdpau

安装libvdpau-va-gl

运行以下命令安装libvdpau-va-gl:

mkdir build &&
cd    build &&

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$XORG_PREFIX .. &&
make

要测试结果,请执行以下命令: make check。测试必须在Xorg环境中运行。

现在,作为root用户:

make install

配置

要让libvdpau找到libvdpau-va-gl,需要设置一个环境变量。作为root用户:

echo "export VDPAU_DRIVER=va_gl" >> /etc/profile.d/xorg.sh

内容

安装程序: None

安装库: libvdpau_va_gl.so

安装目录: None

简短描述

libvdpau_va_gl.so   包含实现VDPAU (Unix视频解码和演示API) API的OpenGL后端函数。

24.25 twm-1.0.12


简介twm

twm包包含一个非常小的窗口管理器。

这个包用于测试完成的Xorg安装。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

twm依赖

必要

Xorg-Server-21.1.7

推荐

Xorg Legacy Fonts

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/twm

安装twm

运行以下命令安装twm:

sed -i -e '/^rcdir =/s,^\(rcdir = \).*,\1/etc/X11/app-defaults,' src/Makefile.in &&
./configure $XORG_CONFIG &&
make

这个包没有附带测试套件。

现在,作为root用户:

make install

命令解释

sed -i -e ‘/^rcdir =/s…: 该命令确保twm配置文件安装在正确的位置。

内容

安装程序: twm

安装库: None

安装目录: /etc/X11/app-defaults

简短描述

twm   是X窗口系统的选项卡窗口管理器。

24.26 xterm-379


简介xterm

xterm是X窗口系统的终端仿真器。

这个包用于测试完成的Xorg安装。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

xterm依赖

必要

Xorg Applications

必要 (在运行时)

等宽TTF或OTF字体,例如 Dejavu fonts

可选

Emacs-28.2, PCRE-8.45pcre2-10.42, Valgrind-3.20.0man2html

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/Xterm

安装xterm

运行以下命令安装xterm:

sed -i '/v0/{n;s/new:/new:kb=^?:/}' termcap &&
printf '\tkbs=\\177,\n' >> terminfo &&

TERMINFO=/usr/share/terminfo \
./configure $XORG_CONFIG     \
    --with-app-defaults=/etc/X11/app-defaults &&

make

这个包没有附带测试套件。

现在,作为root用户:

make install    &&
make install-ti &&

mkdir -pv /usr/share/applications &&
cp -v *.desktop /usr/share/applications/

命令解释

sed -i … termcap, printf … » terminfo: 这些命令修改了终端描述,因此退格键期望发送ASCII码127的字符。这样做是为了与Linux控制台保持一致性。

TERMINFO=/usr/share/terminfo: 这确保了xterm terminfo文件被安装到系统terminfo数据库中。

--with-app-defaults=...: 设置app-defaults目录的位置。

make install-ti: 此命令安装用于xterm的更正的terminfo描述文件。

配置xterm

有两种方式配置xterm。你可以将X资源定义添加到用户的~/.Xresources文件中,或者将它们添加到系统范围内的$XORG_PREFIX/share/X11/app-defaults/Xterm文件中。

为了让xterm遵循环境中的区域设置,使用TrueType字体,并遵循Linux关于Backspace键发送的代码的约定,作root用户添加以下定义:

cat >> /etc/X11/app-defaults/XTerm << "EOF"
*VT100*locale: true
*VT100*faceName: Monospace
*VT100*faceSize: 10
*backarrowKeyIsErase: true
*ptyInitialErase: true
EOF

内容

安装程序: koi8rxterm, resize, uxterm, 和 xterm

安装库: None

安装目录: None

简短描述

koi8rxterm   是一个包装器脚本,用于将xterm设置为KOI8-R语言环境。

resize   打印一个shell命令,用于设置TERM和TERMCAP环境变量,以指示xterm窗口的当前大小。

uxterm   是一个包装器脚本,它修改当前区域设置以使用UTF-8,并以正确的设置启动xterm。

xterm   是X Window系统的终端模拟器。

24.27 xclock-1.1.1


简介xclock

xclock包包含一个简单的时钟应用程序,在默认的xinit配置中使用。

这个包用于测试完成的Xorg安装。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

xclock依赖

必要

Xorg Libraries

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xclock

安装xclock

运行以下命令安装xclock:

./configure $XORG_CONFIG &&
make

这个包没有附带测试套件。

现在,作为root用户:

make install

内容

安装程序: xclock

安装库: None

安装目录: None

简短描述

xclock   是X的模拟/数字时钟。

24.28 xinit-1.4.2


简介xinit

xinit包包含一个可用的脚本来启动xserver。

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

xinit依赖

必要

Xorg Libraries

推荐 (仅运行时)

twm-1.0.12, xclock-1.1.1, 和 xterm-379 (在默认的xinitrc文件中使用)

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/xinit

安装xinit

运行以下命令安装xinit:

./configure $XORG_CONFIG --with-xinitdir=/etc/X11/app-defaults &&
make

这个包没有附带测试套件。

现在,作为root用户:

make install &&
ldconfig

内容

安装程序: xinit 和 startx

安装库: None

安装目录: None

简短描述

startx   初始化X会话。

xinit   是X窗口系统初始化程序。

24.29 Xorg-7 Testing and Configuration


测试Xorg

注意

在第一次启动Xorg之前,通过以root用户身份运行ldconfig来重建库缓存是很有用的。

注意

在第一次启动Xorg之前,通常需要重新启动系统,以确保启动了所有适当的守护进程,并设置了适当的安全问题。作为一种替代方法,注销和重新登录可以正常工作,但在撰写本文时还没有经过测试。

警告

如果Xorg由于某种原因挂起(例如,缺乏适当的输入驱动程序),系统可能停止响应任何用户输入。作为预防措施,你可以在测试Xorg之前启用一个神奇的SysRq密钥。作为root用户,发出以下命令:

echo 4 > /proc/sys/kernel/sysrq

如果Xorg挂起了,可以使用Alt+SysRq+R来重置键盘模式。现在它应该可以使用Ctrl+Alt+Fx(用VT号替换x)切换到另一个VT。如果它工作,在新的VT中用命令行登录和杀死Xorg。

要测试Xorg的安装,请运行startx。该命令将启动一个名为twm的基本窗口管理器,其中包含三个xterm窗口和一个xclock窗口。左上角的xterm窗口是一个登录终端,从该终端运行exit将退出X window会话。系统上的第三个xterm窗口可能会被另外两个xterm所遮挡。

注意

当使用twm窗口管理器测试Xorg时,在Xorg日志文件$HOME/.local/share/xorg/Xorg.0.log中会有一些关于缺少字体文件的警告。此外,在文本模式终端(通常是tty1)上会有一些关于缺少字体的警告。这些警告不会影响功能,但是如果需要,可以通过安装Xorg Legacy Fonts来删除。

一般来说,Xorg不需要特定的配置,但是可以自定义。有关详细信息,请参阅下面的the section called “Setting up Xorg Devices”

检查DRI (Direct Rendering Infrastructure)安装

DRI是一种允许软件以安全高效的方式访问图形硬件的框架。如果您有支持的视频卡,则默认安装在X中(使用Mesa)。

要检查DRI驱动程序是否正确安装,请检查日志文件$HOME/.local/share/xorg/Xorg.0.log(或者/var/log/Xorg.0.log,如果你已经构建了Xorg-Server-21.1.7与suid位),以获取如下语句:

(II) intel(0): direct rendering: DRI2 Enabled

(II) NOUVEAU(0): Loaded DRI module

注意

如果您使用其他驱动程序,例如来自NVIDIAAMD的驱动程序,则DRI配置可能不同。

另一种确定DRI是否正常工作的方法是使用Mesa-22.3.5中两个可选安装的OpenGL演示程序之一。在X终端中,运行glxinfo并查找这个短语:

name of display: :0
display: :0  screen: 0
direct rendering: Yes

如果启用了直接渲染,您可以通过运行LIBGL_DEBUG=verbose glxinfo来添加详细信息。这将显示DRI系统使用的驱动程序、设备节点和文件。

为了确认DRI2硬件加速正在工作,你可以(仍然在X终端)运行命令**glxinfo grep -E “(OpenGL vendor OpenGL renderer OpenGL version)”**。如果它报告的不是Software Rasterizer,那么你就为运行命令的用户提供了工作加速。

如果你的硬件没有任何DRI2驱动可用,它将使用一个软件光栅化直接渲染。在这种情况下,你可以使用一个新的llvm加速的软件光栅化器,称为LLVMPipe。为了构建LLVMPipe,请确保Mesa构建时存在LLVM-15.0.7。请注意,所有解码都是在CPU上完成的,而不是在GPU上完成的,因此显示将比硬件加速运行得慢。要检查您是否正在使用LLVMpipe,请查看上面glxinfo命令的输出。使用软件光栅化的输出示例如下所示:

OpenGL vendor string: VMware, Inc.
OpenGL renderer string: Gallium 0.4 on llvmpipe (LLVM 3.5, 256 bits)
OpenGL version string: 3.0 Mesa 10.4.5

你也可以通过在启动Xorg时导出LIBGL_ALWAYS_SOFTWARE=1环境变量来强制LLVMPipe。

同样,如果你已经构建了Mesa OpenGL演示程序,你也可以运行glxgears测试程序。这个程序显示了一个有三个齿轮转动的窗口。X终端将显示每五秒绘制了多少帧,因此这将给出一个粗略的基准。窗口是可伸缩的,每秒绘制的帧高度依赖于窗口的大小。在某些硬件上,glxgears将与垂直刷新信号同步运行,帧速率将与显示器的刷新率大致相同。

Debugging Xorg

当启动xorg时,有两种方法来检查您可能遇到的任何问题。如果系统运行起来,你可以看到运行xdriinfo所使用的驱动程序。如果有问题或者你只是想检查,看看Xorg.0.log

Xorg.0.log的位置取决于Xorg是如何安装的。如果严格按照书中的说明,并且Xorg是从命令行启动的,它将位于$HOME/.local/share/xorg/目录中。如果Xorg是由显示管理器启动的(例如lightdm-1.32.0, lxdm-0.5.3, 或 GDM-43.0)或者如果$XORG_PREFIX/libexec/Xorg设置了suid位,它将位于/var/log/目录中。

Xorg.0.log Issues

查看Xorg.0.log时,检查(EE)或(WW)之类的条目。下面是一些常见的条目。

(WW) Open ACPI failed (/var/run/acpid.socket)

这个警告是由于acpid-2.0.34没有安装。如果你使用的不是笔记本电脑,可以忽略它。在笔记本电脑上,安装acpid-2.0.34以启用诸如识别盖子何时关闭之类的操作。

(WW) VGA arbiter: cannot open kernel arbiter, no multi-card support

当普通用户启动Xorg时,会显示此警告。libpciaccess.so库在尝试打开/dev/vga_arbiter时会发出这个警告。如果系统中只有一个视频卡,它可以被忽略。如果需要,可以通过添加udev规则和将本地用户加入视频组来改变该设备的权限。作为root用户:

cat > /etc/udev/rules.d/99-vga-arbiter.rules << EOF
# /etc/udev/rules.d/99-vga-arbiter.rules: Set vga_arbiter group/mode

ACTION=="add", KERNEL=="vga_arbiter", GROUP="video" MODE="0660"
EOF

usermod -a -G video <user running xorg>
(EE) AIGLX error: dlopen of /opt/xorg/lib/dri/i965_dri.so failed

这个错误,伴随着(EE) AIGLX错误:无法加载驱动i965,发生在一些基于英特尔的图形设备的系统。这是由于当前的Xorg-Server-21.1.7Mesa-22.3.5之间的不匹配引起的。Xorg不再使用i965驱动程序,而是使用crocus或iris mesa驱动程序,如xdriinfo命令所示。它完全可以被忽略。

如果需要,可以通过注释掉Xorg-Server-21.1.7包中的glx/glxdricommon.c的第330-331行和第337-338行(LogMessage)来消除此警告。

Hybrid Graphics

在Linux上,混合图形仍然处于实验状态。Xorg的开发人员已经开发了一种名为PRIME的技术,可以用于在集成GPU和无muxless离散GPU之间随意切换。目前无法自动切换。

为了使用PRIME进行GPU切换,请确保您使用的是Linux内核3.4或更高版本(推荐)。您需要最新的DRI和DDX驱动程序为您的硬件和Xorg服务器1.13或更高版本。

Xorg服务器应该自动加载这两个GPU驱动程序。你可以通过运行:

xrandr --listproviders

应该列出两个(或更多)提供者,例如:

Providers: number : 2
Provider 0: id: 0x7d cap: 0xb, Source Output, Sink Output, Sink Offload crtcs: 3 outputs: 4 associated providers: 1 name:Intel
Provider 1: id: 0x56 cap: 0xf, Source Output, Sink Output, Source Offload, Sink Offload crtcs: 6 outputs: 1 associated providers: 1 name:radeon

为了能够在离散GPU上运行GLX应用程序,您需要运行以下命令,其中是更强大的离散卡,是连接显示器的卡片:

xrandr --setprovideroffloadsink <provider> <sink>

注意

对于更新的Xorg驱动程序,如modesetting或intel,它们都支持DRI3,上面的命令就不再必要了。然而,这并没有害处。

然后,每次你想要使用强大的GPU时,都需要导出DRI_PRIME=1环境变量。例如,

DRI_PRIME=1 glxinfo | grep -E "(OpenGL vendor|OpenGL renderer|OpenGL version)"

将显示OpenGL供应商,渲染器和版本的离散GPU。

如果最后一个命令报告了相同的OpenGL渲染器,并没有DRI_PRIME=1,你需要检查你的安装。

设置Xorg设备

对于大多数硬件配置,modern Xorg将自动获得正确的服务器配置,而无需任何用户干预。然而,在某些情况下自动配置是不正确的。下面是在这些情况下可能有用的一些手动配置项示例。

设置X输入设备

对于大多数输入设备,不需要额外的配置。本节仅供参考之用。

默认的XKB设置示例如下(以root用户执行):

cat > /etc/X11/xorg.conf.d/xkb-defaults.conf << "EOF"
Section "InputClass"
    Identifier "XKB Defaults"
    MatchIsKeyboard "yes"
    Option "XkbLayout" "fr"
    Option "XkbOptions" "terminate:ctrl_alt_bksp"
EndSection
EOF

“XkbLayout”行是法语(AZERTY)键盘的一个例子。将其更改为键盘模型。QWERTY (US)键盘不需要这行代码。

微调显示设置

同样,对于现代Xorg,很少或不需要额外的配置。例如,如果你需要将额外的选项传递给你的视频驱动程序,你可以使用以下内容(同样,以root用户执行):

cat > /etc/X11/xorg.conf.d/videocard-0.conf << "EOF"
Section "Device"
    Identifier  "Videocard0"
    Driver      "radeon"
    VendorName  "Videocard vendor"
    BoardName   "ATI Radeon 7500"
    Option      "NoAccel" "true"
EndSection
EOF

另一个常见的设置是在不同的环境中使用多个服务器布局。虽然服务器会自动检测到其他监视器的存在,但它可能会得到错误的顺序:

cat > /etc/X11/xorg.conf.d/server-layout.conf << "EOF"
Section "ServerLayout"
    Identifier     "DefaultLayout"
    Screen      0  "Screen0" 0 0
    Screen      1  "Screen1" LeftOf "Screen0"
    Option         "Xinerama"
EndSection
EOF

24.30 Tuning Fontconfig


Fontconfig概述

如果您只阅读英文文本,并对下一页列出的常见libre字体感到满意,那么您可能永远不需要担心fontconfig如何工作的细节。但是有很多东西如果不符合你的需要,可以改变。

虽然这篇文章很长,但它只是触及了表面,你将能够在网络上找到许多替代的视图(但请记住,多年来有些东西已经改变了,例如autohinter不再是默认的)。这里的目的是给你足够的信息来理解你正在做的改变。

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/Fontconfig

Xft字体协议

Xft字体协议通过freetype提供反别名字体渲染,字体是使用fontconfig从客户端控制的(除了rxvt-unicode-9.31,它可以使用~/.Xresources中列出的字体,以及AbiWord-3.0.5,它只使用指定的字体)。默认的搜索路径是/usr/share/fonts~/.local/share/fonts虽然目前是旧的和废弃的位置~/.fonts仍然有效。Fontconfig递归地在其路径中搜索目录,并在每个目录中维护字体特征的缓存。如果缓存显示过时,则忽略它,并从字体本身获取信息(如果安装了大量字体,则可能需要几秒钟)。

如果你在除/usr之外的任何前缀中安装了Xorg,那么任何X字体都不会安装在Fontconfig已知的位置。符号链接从OTFTTF X字体目录创建到/usr/share/fonts/X11-{OTF,TTF}。这允许Fontconfig使用X提供的OpenType和TrueType字体,尽管许多人更喜欢使用更现代的字体。

Fontconfig使用名称来定义字体。应用程序通常使用通用字体名称,如“等宽字体”、“无字体”和“衬线字体”。Fontconfig将这些名称解析为一种字体,该字体具有覆盖区域设置所指示的语言正字法的所有字符。

有用的命令

使用fontconfig时,下面的命令可能很有用:

**fc-list less** : 显示所有可用字体的列表(/path/to/filename: Font Name:style)。如果您在30秒前安装了字体,但它没有显示,那么它或其目录之一对您的用户来说是不可读的。

fc-match ‘Font Name’ : 如果请求命名字体,则会告诉您将使用哪种字体。通常,您将使用它来查看如果请求您尚未安装的字体会发生什么,但如果系统给您的字体与您期望的不同,您也可以使用它(可能因为fontconfig不同意字体支持您的语言)。

**fc-match -a ‘Type’ less** : 将提供可用于该类型的所有字体的列表(等宽字体、无衬线字体、衬线字体)。请注意,在极端情况下,fontconfig将从任何可用字体中获取字形,即使它不是指定的类型,除非它知道字体的类型,否则它将假定它是Sans。

如果你想知道文本字符串将使用哪种字体(即一个或多个符号,前面有一个空格),粘贴以下命令并将xyz替换为你关心的文本:

**FC_DEBUG=4 pango-view –font=monospace -t xyz grep family** : 这需要Pango-1.50.12ImageMagick-7.1.0-61——它将调用display来在一个小窗口中显示文本,关闭该窗口后,输出的最后一行将显示所选择的字体。这对于CJK语言特别有用,您还可以传递一种语言,例如PANGO_LANGUAGE=en;ja(英语,然后假设是日语)或zh-cn(或其他变体——’zh’本身是无效的)。

各种文件

主要文件在/etc/fonts/conf.d/中,它是一个由符号链接填充的目录,指向/usr/share/fontconfig/conf.avail/中的一些文件。但是许多人,以及一些包,直接创建文件。每个文件名必须是两个数字、一个破折号、somename.conf的形式,并且按顺序读取。

按照惯例,编号分配如下:

您也可以在$XDG_CONFIG_HOME中有一个个人的fonts.conf,即~/.config/fontconfig/

选择字体的规则

如果安装了请求的字体,并且它包含当前语言所需的代码点(在源代码中,请参阅fc-lang/目录中的.orth文件),则将使用它。

但是,如果文档或页面请求的字体没有安装(或者偶尔不包含所有必需的代码点),则需要使用以下规则:首先,30-metric-aliases.conf用于映射具有相同度量(相同大小等)的字体别名。之后,将在45-latin.conf中搜索未知字体——如果找到,则将其映射为衬线字体、等宽字体或Sans字体,否则将假定为Sans字体。然后50-latin.conf提供了备用字体的有序列表——如果你安装了Dejavu fonts,就会使用它们。西里尔语和希腊语似乎是一样的。还有一些类似的文件,前缀为65,表示波斯语和其他非拉丁书写系统。所有这些文件都更喜欢商业字体,如果他们存在,尽管现代自由字体往往至少是他们的平等。

由于fontconfig-2.12.5还有一些emoji和数学字体的通用族匹配,请参见{45,60}-generic.conf。

在字体不包含所有预期代码点的罕见情况下,请参阅I stared into the fontconfig的’Trial the First:’获取详细信息。

Hinting 和 Anti-aliasing

可以更改字体的提示方式或是否提示。下面的示例文件包含默认设置,但带有注释。设置在很大程度上取决于用户的偏好和字体的选择,因此对某些页面有改善的更改可能会对其他页面造成影响。该文件的首选位置是:~/.config/fontconfig/fonts.conf

要尝试不同的设置,你可能需要退出Xorg,然后重新运行startx,以便所有应用程序都使用新的设置。如果您使用Gnome或KDE,他们的桌面可以覆盖这些更改。为了探索这些可能性,为你的用户创建一个文件:

mkdir -pv ~/.config/fontconfig &&
cat > ~/.config/fontconfig/fonts.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>

  <match target="font" >
    <!-- autohint was the old automatic hinter when hinting was patent
    protected, so turn it off to ensure any hinting information in the font
    itself is used, this is the default -->
    <edit mode="assign" name="autohint">  <bool>false</bool></edit>

    <!-- hinting is enabled by default -->
    <edit mode="assign" name="hinting">   <bool>true</bool></edit>

    <!-- for the lcdfilter see https://www.spasche.net/files/lcdfiltering/ -->
    <edit mode="assign" name="lcdfilter"> <const>lcddefault</const></edit>

    <!-- options for hintstyle:
    hintfull: is supposed to give a crisp font that aligns well to the
    character-cell grid but at the cost of its proper shape.

    hintmedium: poorly documented, maybe a synonym for hintfull.
    hintslight is the default: - supposed to be more fuzzy but retains shape.

    hintnone: seems to turn hinting off.
    The variations are marginal and results vary with different fonts -->
    <edit mode="assign" name="hintstyle"> <const>hintslight</const></edit>

    <!-- antialiasing is on by default and really helps for faint characters
    and also for 'xft:' fonts used in rxvt-unicode -->
    <edit mode="assign" name="antialias"> <bool>true</bool></edit>

    <!-- subpixels are usually rgb, see
    http://www.lagom.nl/lcd-test/subpixel.php -->
    <edit mode="assign" name="rgba">      <const>rgb</const></edit>

    <!-- thanks to the Arch wiki for the lcd and subpixel links -->
  </match>

</fontconfig>
EOF

现在需要在首选编辑器中编辑该文件。

有关更多示例,请参阅始于2016-09/00128的blfs-support帖子,特别是2016-09/00137,以及原始海报的首选解决方案2016-09/00147。在Fontconfig in the Arch wikiFontconfig in the Gentoo wiki中还有其他示例。

禁用Bitmap字体

在以前的BLFS版本中,安装了丑陋的旧Xorg位图字体。现在,许多人将不需要安装任何一个。但如果出于某种原因,你已经安装了一个或多个位图字体,你可以通过创建以下文件作为root用户来防止它们被fontconfig使用:

cat > /etc/fonts/conf.d/70-no-bitmaps.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<!-- Reject bitmap fonts -->
 <selectfont>
  <rejectfont>
   <pattern>
     <patelt name="scalable"><bool>false</bool></patelt>
   </pattern>
  </rejectfont>
 </selectfont>
</fontconfig>
EOF

添加额外的字体目录

通常,系统字体和用户字体安装在The Xft Font Protocol指定位置下的目录中,并且没有明显的理由将它们放在其他地方。但是,texlive-20220321的完整BLFS安装将许多字体放在/opt/texlive/2022/texmf-dist/fonts/子目录中的opentype/truetype/中。虽然拉取所有这些文件可能看起来很有用(它允许你在非TeX程序中使用它们),但这种方法有几个问题:

  1. 有数百个文件,这使得选择字体很困难。

  2. 有些文件会做一些奇怪的事情,比如显示信号量标志而不是ASCII字母,或者将西里尔码点映射到适合古教会斯拉夫语的字符形式,而不是预期的当前形状:如果你需要,这没问题,但在正常使用时很痛苦。

  3. 有些字体有多个大小和难以理解的短名称,这都使选择正确的字体变得更加困难。

  4. 当一个字体被添加到CTAN时,它会伴随着TeX包,以便在旧的引擎中使用它(xelatex通常不需要这个),然后版本通常被冻结,而字体则被单独维护。其中一些字体,例如Dejavu fonts可能已经以较新的版本安装在您的BLFS系统上,如果您有多个版本的字体,则不清楚fontconfig将使用哪个版本。

然而,有时在非tex应用程序中查看这些字体是有用的,如果只是为了查看您是否希望安装当前版本。如果您已经安装了所有的texlive,下面的示例将使其他应用程序可以使用Arkandis Open Type字体中的一种,以及所有三种ParaType TrueType字体。根据需要调整或重复行,以使所有opentype/truetype字体可用,或选择不同的字体目录。作为root用户:

cat > /etc/fonts/conf.d/09-texlive.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
  <dir>/opt/texlive/2022/texmf-dist/fonts/opentype/arkandis/berenisadf</dir>
  <dir>/opt/texlive/2022/texmf-dist/fonts/truetype/paratype</dir>
</fontconfig>
EOF

如果你这样做了,记得在升级texlive到新版本时更改该文件中该年份的所有实例。

偏向某些字体

有很多原因可以解释为什么人们希望页面中指定的特定字体使用不同的字体,或者更喜欢等宽字体、无字体或衬线字体。如您所料,有许多不同的方法可以实现这一点。

Fontconfig用户文档

Fontconfig安装用户文档,其中包括一个示例的“用户配置文件”,其中包括其他选择WenQuanYi ZenHei (Sans字体),如果要求中文的衬线字体(这部分可能是过时的,除非你有非自由的中文字体,因为在65-nonlatin.conf中,当为中文指定衬线字体时,此字体已经是首选字体之一),并且如果在日文页面上指定Sans字体,则首选现代VL Gothic字体(否则,如果已经安装了其他字体,则首选几种其他字体)。

如果你安装了当前版本的用户文档,可以在/usr/share/doc/fontconfig-2.14.2/中找到html、PDF和文本版本的用户文档:如果你安装了不同的版本,请更改版本。

喜欢特定的字体

作为一个例子,如果由于某种原因您希望使用Nimbus Roman No9 L无论Times New Roman字体引用(这是度量相似,首选次罗马,但衬线字体Liberation fonts将是首选的Times New Roman字体如果安装),作为一个个体用户可以安装字体,然后创建以下文件:

mkdir -pv ~/.config/fontconfig/conf.d &&
cat >  ~/.config/fontconfig/conf.d/35-prefer-nimbus-for-timesnew.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<!-- prefer Nimbus Roman No9 L for Times New Roman as well as for Times,
 without this Tinos and Liberation Serif take precedence for Times New Roman
 before fontconfig falls back to whatever matches Times -->
    <alias binding="same">
        <family>Times New Roman</family>
        <accept>
            <family>Nimbus Roman No9 L</family>
        </accept>
    </alias>
</fontconfig>
EOF

这是你通常在个人用户的设置中执行的操作,但在这种情况下,文件已经添加了35-前缀,以便如果需要,它可以在系统范围内/etc/fonts/conf.d/中使用。

更喜欢CJK字体

下面的本地配置示例(即适用于该机器的所有用户)做了几件事:

  1. 如果指定了衬线字体,它将优先选择UMing变体,这样在zh-cn, zh-hk和zh-tw语言中,事情应该看起来不错(还有zh-sg,实际上使用与zh-cn相同的设置),而不会影响日语。

  2. 如果安装了日文IPAex fonts,它更喜欢它们,尽管VL Gothic将优先于(Japanese) Sans字体(Sans),如果它也安装了。

  3. 因为WenQuanYi ZenHei涵盖了韩文字形,并且在65-nonlatin.conf中也首选用于衬线字体,如果安装,它将默认用于韩文衬线字体。要获得正确的衬线字体,这里指定了UnBatang字体——如果您安装了与选择的Korean fonts不同的衬线字体,请更改这一行。

  4. 等宽字体被迫使用首选的Sans字体。如果文本是朝鲜语,则将使用WenQuanYi ZenHei

在non-CJK地区,结果是适用的字体将用于所有变体的中国,日本和韩文韩国。如果存在字体,所有其他语言都应该已经工作。作为root用户:

cat > /etc/fonts/local.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
    <alias>
        <family>serif</family>
        <prefer>
            <family>AR PL UMing</family>
            <family>IPAexMincho</family>
            <!-- WenQuanYi is preferred as Serif in 65-nonlatin.conf,
            override that so a real Korean font can be used for Serif -->
            <family>UnBatang</family>
        </prefer>
    </alias>
    <alias>
         <family>sans-serif</family>
         <prefer>
             <family>WenQuanYi Zen Hei</family>
             <family>VL Gothic</family>
             <family>IPAexGothic</family>
         </prefer>
    </alias>
    <alias>
         <family>monospace</family>
         <prefer>
             <family>VL Gothic</family>
             <family>IPAexGothic</family>
             <family>WenQuanYi Zen Hei</family>
         </prefer>
    </alias>
</fontconfig>
EOF

编辑老式的conf文件

有些字体,特别是中文字体,附带了配置文件,可以安装在/etc/fonts/conf.d中。但是,如果您这样做,然后使用终端运行任何使用fontconfig的命令,您可能会看到诸如以下错误消息:

Fontconfig warning: "/etc/fonts/conf.d/69-odofonts.conf", line 14: Having multiple <family> in <alias> isn't supported and may not work as expected.

实际上,这些旧规则不起作用。对于non-CJK用户,fontconfig在没有这些规则的情况下通常也能做得很好。它们的起源可以追溯到CJK用户需要手工制作的位图,以便在小尺寸下清晰易读,而这些位图与反锯齿拉丁符号放在一起看起来很难看——他们更喜欢使用相同的CJK字体来显示拉丁符号。这样做有一个副作用:(衬线)字体通常也用于Sans,在这种情况下,与系统字体相比,Gtk菜单中的(英语)文本将使用这种字体,以及衬线字体,它既微弱又相当小。这会让人读起来不舒服。

不过,如果你想使用这些旧的conf文件,可以修复它们。下面的例子是来自UMing64-arphic-uming.conf的第一部分——还有更多类似的项目也需要更改:

   <match target="pattern">
       <test qual="any" name="lang" compare="contains">
           <string>zh-cn</string>
           <string>zh-sg</string>
       </test>
       <test qual="any" name="family">
           <string>serif</string>
       </test>
       <edit name="family" mode="prepend" binding="strong">
           <string>AR PL UMing CN</string>
       </edit>
    </match>
纠正这个错误的过程很简单但很繁琐——对于每个产生错误信息的项,使用你的编辑器(作为root用户)编辑安装的文件,以重复整个块,因为有多个变量,然后将每个示例减少为只有一个变量。您可能希望一次处理一个错误,在每个修复后保存文件,并从一个单独的术语运行命令,如**fc-list 2>&1 less**,以查看修复工作。对于上面的代码块,固定版本将是:
   <match target="pattern">
       <test qual="any" name="lang" compare="contains">
           <string>zh-cn</string>
       </test>
       <test qual="any" name="family">
           <string>serif</string>
       </test>
       <edit name="family" mode="prepend" binding="strong">
           <string>AR PL UMing CN</string>
       </edit>
    </match>
   <match target="pattern">
       <test qual="any" name="lang" compare="contains">
           <string>zh-sg</string>
       </test>
       <test qual="any" name="family">
           <string>serif</string>
       </test>
       <edit name="family" mode="prepend" binding="strong">
           <string>AR PL UMing CN</string>
       </edit>
    </match>

另请参阅

我盯着fontconfig …

Eevee的博客条目特别有用,如果fontconfig认为您选择的字体不支持您的语言,并且当已经安装了难看的MS字体时,它更喜欢一些非MS的日语字体。

在Arch wiki中的Fontconfig

Arch在它的wiki font_configuration中有很多信息。

Gentoo wiki中的Fontconfig

Gentoo在它的wiki Fontconfig中有一些信息,尽管许多细节(启用什么和无限)是特定于Gentoo的。

24.31 TTF and OTF fonts


关于TTF和OTF字体

最初,Xorg只提供位图字体。后来,添加了一些可扩展的Type1字体,但桌面世界继续使用TrueType和Open Type字体。为了支持这些功能,Xorg使用了Xft——X FreeType接口库。

这些字体可以提供提示,fontconfig使用这些提示来调整它们,使其在计算机显示器上具有最大的可读性。在linux上,如果有的话,您应该总是更喜欢有提示的版本(一般来说,拉丁、西里尔和希腊字母可以使用提示,大多数其他书写系统不使用提示)。

少数字体以集合(TTC或OTC)的形式提供,不同字体之间共享字体数据,从而节省磁盘空间。以与单独的TTF或OTF文件完全相同的方式对待它们。

如果字体同时提供TTF和OTF形式,在linux中首选OTF形式,它可能为知道如何使用它们的程序提供更多的功能(如xelatex)。

对于某些脚本,需要pango来正确地渲染内容,要么通过选择不同的字形形式,要么通过组合字形——在这两种情况下,都要根据上下文进行。这尤其适用于阿拉伯语和印度语。

X附带的标准可扩展字体提供了非常差的Unicode覆盖率。您可能注意到,在使用Xft的应用程序中,有些字符显示为包含四个二进制数字的方框。在本例中,没有找到包含所需符号的字体。其他时候,默认情况下不使用其他字体族,也不接受Fontconfig的替换,当默认字体不覆盖用户语言的正字法时,应用程序将显示空行。

对一个程序可用的字体是当它开始时存在的,所以如果你添加一个额外的字体,并希望在当前正在运行的程序中使用它,那么你将不得不关闭并重新启动该程序。

有些人喜欢有几十种甚至几百种字体文件可用,但是如果你想在桌面应用程序中(例如在文字处理器中)选择一种特定的字体,那么在很多字体中滚动找到正确的字体是缓慢而笨拙的——越少越好。因此,对于某些字体包,您可能决定只安装一种字体-但尽管如此,请安装不同的变体(斜体、粗体等),因为这些都是相同字体名称的变体。

过去,每个人都建议在安装或删除字体后以root用户的身份运行fc-cache,但在linux上不再需要这样做,如果需要,fontconfig会自动执行此操作,如果它的缓存超过30秒。但如果你添加了一种字体并想立即使用它,那么你可以运行该命令(作为普通用户)。

下面有几个关于CJK字符的参考资料。这代表汉语、日语和韩语,尽管现代韩语现在几乎都是使用语音韩文字形书写(过去有时使用与汉语和日语类似的汉字字形)。Unicode决定使用Han Unification,并将一些中国和日本的符号映射到相同的代码点。这在日本非常不受欢迎,结果是不同的字体会将一些代码点渲染成完全不同的形状。此外,简体中文有时会使用与繁体中文相同的码点,但表现形式不同,有点类似于英文字母’a’ 和 ‘g’的不同形状(单层和两层),只是在语言语境中看起来是“错误”而不仅仅是“不同”。

与本书中的大多数其他包不同,BLFS编辑器不会监控该页上字体的版本——一旦字体足够通用,新版本中典型的添加就很少了(例如新的货币符号,或非现代语言的符号,如表情符号或扑克牌)。因此,这些字体都不会显示版本信息或md5信息。

下面的列表不会提供完整的Unicode覆盖。Unicode每年都会更新,现在大多数新增内容都是针对历史书写系统的。为了几乎完全覆盖,您可以安装Noto fonts(上次检查时大约180种字体),但这些字体数量使得在文档中选择特定字体变得不那么方便,大多数人会认为其中许多字体是对空间的浪费。我们曾经推荐Unicode Font Guide,但自2008年以来就没有更新过,而且它的许多链接都失效了。

大多数这些字体的渲染示例,以及它们涵盖的语言的细节,具有相同度量的拉丁字体的一些示例(列在“替代拉丁字体”中)和用于比较相似类型字体的各种虚拟文本文件,可以在这个font comparison页面找到。该网站还涵盖了其他当前的书写系统。

字体通常以zip文件的形式提供,需要UnZip-6.0来列出并提取它们,但即使当前版本是一个压缩包,您仍然应该检查它是否会创建一个目录。在当前目录中,分散的压缩文件或压缩包的内容可能非常混乱,并且一些字体会创建奇怪的__MACOSX/ directories。此外,许多字体都提供了不允许“其他”读取的权限——如果要安装一种字体供系统范围使用,任何目录都必须是755模式,所有文件必须是644模式,所以如果需要,请更改它们。如果你忘记了,root用户可能可以在fc-list中看到特定的字体,但普通用户不能。

作为字体安装示例,请考虑Dejavu fonts的安装。在这个特定的包中,TTF文件位于一个子目录中。在解压后的源目录下,以root用户运行以下命令:

install -v -d -m755 /usr/share/fonts/dejavu &&
install -v -m644 ttf/*.ttf /usr/share/fonts/dejavu &&
fc-cache -v /usr/share/fonts/dejavu

如果您愿意,您也可以安装任何许可证或其他文档,可以与字体一起安装,也可以安装在/usr/share/doc/下的相应目录中。

一些字体连同源代码以及完成的TTF或OTF文件一起提供。除非您打算修改字体,并且有正确的工具(有时FontForge-20230101,但通常是商业工具),否则源代码不会提供任何好处,所以不要安装它。一到两种字体甚至附带了Web开放字体格式(WOFF)文件——如果你运行一个Web服务器并想在其上使用该字体,这很有用,但对于桌面电脑来说没有用处。

为了提供更大的Unicode覆盖范围,建议您安装以下一些字体,具体取决于您希望阅读的网站和语言。本页面的下一部分详细介绍了一些字体,至少涵盖拉丁字母,最后一部分处理come CJK问题。

注意

强烈建议你安装Dejavu fonts

Caladea

Caladea(创建为Chrome OS额外字体)与MS Cambria metrically兼容,如果你必须编辑一个文件,有人开始在Microsoft Office使用Cambria,然后返回给他们。

Cantarell fonts

Cantarell fonts - Cantarell字体家族提供了一个当代人文主义的无衬线字体。它特别优化了小尺寸的易读性,是GNOME-3用户界面的首选字体家族。

请注意,当前版本包括一个VF(可变字体)文件,可以提供所有单独的字体(也提供),但如果fontconfig发现它,则破坏xelatex。各个字体都可以正常工作。

Carlito

Carlito(作为Chrome OS的另一个额外字体创建)与MS Calibri标准兼容,如果你必须编辑某人在Microsoft Office中使用Calibri创建的文档,然后将其返回给他们,则可以使用它。

DejaVu fonts

DejaVu fonts -这些字体是比特流Vera字体的扩展和替换,并提供基于拉丁语的脚本,包括口音和标点符号,如“智能引号”和不同的间距字符,以及西里尔字母、希腊语、阿拉伯语、希伯来语、亚美尼亚语、格鲁吉亚语和其他一些符号。在没有比特流Vera字体(覆盖范围小得多)的情况下,这些是默认的备用字体。

GNU FreeFont

GNU FreeFont -这组字体涵盖了许多非cjk字符,特别是少数民族语言中使用的拉丁和西里尔字母的一些变体,但字形相对较小(不像DejaVu字体相对较大)和相当轻的重量(当使用黑白上的黑色时,“较少黑色”),这意味着在某些上下文中,如终端,它们在视觉上不令人愉快。例如,当大多数其他符号由另一种字体提供时。另一方面,一些主要用于打印输出的字体,以及许多CJK字体,也是轻量级的。

Gelasio

Gelasio与MS Georgia是metrically兼容的,fontconfig将使用它,如果格鲁吉亚被要求但没有安装。

Liberation fonts

Liberation fonts提供了Arial, Courier New和Times New Roman的自由替代品。Fontconfig将使用它们作为这些字体的替代品,也可以用于类似的Helvetica, Courier, Times Roman,尽管对于这些后者,它可以选择不同的字体(参见zarniwhoop.uk).的“替代品”pdf中的示例)

许多人会发现,当需要使用其中一种字体时,Liberation字体很有用。

Microsoft Core Fonts

Microsoft Core fonts始于2002年。它们配备了旧版本的微软Windows操作系统,显然可以用于一般用途。你可以使用libarchive-3.6.2中的bsd-tar从’exe’文件中提取它们。在使用它们之前,请务必阅读许可证。曾经有一段时间,这些字体(特别是Arial, Times New Roman,以及较小程度上的Courier New)在网页上广泛使用。全套包括Andale Mono, Arial, Arial Black, Comic Sans MS, Courier New, Georgia, Impact, Times New Roman, Trebuchet MS, Verdana和Webdings。

请注意,如果你只想使用与Arial, Courier New或Times New Roman相同的字体(字符大小等),你可以使用libre Liberation字体(如上),同样地,你可以用Gelasio替换Georgia。

虽然许多旧的文章建议安装这些字体以获得更美观的输出,但最近的文章中有更多的文章认为这些字体很难看或“损坏”。一种建议是它们不支持反锯齿。

微软在MS Windows或MS Office的后续版本中默认使用的较新的字体(Calibri和Cambria)从来都不是免费提供的。但如果你没有安装它们,你可以找到上面的公制等价物(Carlito, Caladea)。

Noto fonts

Noto fonts(“No Tofu”,即当找不到一个符号时,避免使用带点的方框[十六进制数字])是一组字体,旨在覆盖unicode中的每个符号,无论多么模糊。这些字体,或者至少是无衬线字体,由KF5使用(最初仅用于gtk应用程序)。如果你想覆盖历史语言,可以点击页面顶部的链接下载所有字体。

使用拉丁、希腊或西里尔字母书写的语言的人只需要安装Noto Sans本身,也许还需要安装Noto Sans符号作为货币符号。有关CJK字体的更多细节,请参阅下面的Noto Sans CJK。目前的其他书写系统也有独立的字体,但这些也需要Noto Sans(或Noto Serif),也许还需要Noto符号。

然而,你应该意识到fontconfig对Noto字体一无所知。每一种“Noto Sans Something”字体都被视为单独的字体(对于阿拉伯语来说,没有一个专门的Sans名称),所以如果你安装了其他字体,那么在指定“Noto Sans”的地方,为缺失的符号选择哪种字体将是随机的,除了Sans字体将优于已知的衬线字体和等宽字体,因为Sans是未知字体的备用字体。

Oxygen fonts

当KDE框架5首次发布时,它使用了Oxygen fonts,该字体是为与KDE桌面集成使用而设计的。这些字体不再主动维护,因此KDE决定切换到Noto fonts,但目前’startkde’仍然需要它们。

最初,这些字体只是作为源代码提供的,需要CMake-3.25.2FontForge-20230101来创建TTF文件。但有一段时间,消息来源还包括准备好的TTF。唯一不寻常的功能是每个TTF文件都在自己的子目录中(oxygen-fonts/{*-?00}/),源代码在进一步的子目录中。如果您愿意,您可以安装整个tar包,尽管这会浪费空间。

Source Code Pro

这组来自Adobe的字体(七种不同的权重)包括那些使用gsettings-desktop-schemas-43.0的应用程序现在首选的等宽字体。github发行版source-code-pro包含OTF(首选)和TTF以及source和WOFF字体。

要在终端中使用它,你可能只需要常规字体。

还有一个较旧的TTF版本可以从Google fonts获得,但覆盖面非常有限(对于使用拉丁字母的大多数欧洲语言来说足够)。

CJK fonts:

如前所述,使用汉语、日语和韩语的组合可能很棘手——每种字体只涵盖可用代码点的一个子集,不同语言之间字形的首选形状可能不同,而且许多CJK字体实际上并不支持现代韩语。

此外,默认情况下fontconfig更喜欢中文而不是日语。调优在Prefer chosen CJK fonts中介绍。

尽管Unicode已被扩展以允许大量CJK码位,但基平面以外的码位(大于U+0xFFFF)在普通话(书写汉语的正常形式,无论是简体(中国大陆)还是繁体(台湾))或日语中不常用。

香港使用繁体中文,粤语为主要语言。2005年,Unicode加入了香港增补字符集,并于2009年修订(香港增补字符集是CJK扩展B的一部分,包含超过1900个字符)。早期的字体将不能支持粤语或使用这些字符的地方名称以普通话书写。UMing HK, Noto Sans CJK HK和WenQuanYi Zen Hei字体似乎都涵盖了香港的用法(fontconfig不同意Noto Sans CJK HK)。

汉字形是双宽的,同一字体中的其他字形可能更窄。对于它们的CJK内容,所有这些字体都可以视为等宽(即固定宽度)。

如果您所希望做的只是能够渲染CJK字形,那么安装WenQuanYi ZenHei可能是一个不错的开始。

Chinese fonts:

在中文中,常用的字体有三种:宋(也称为宋或明)是最常见的装饰(“衬线”)形式,楷(“笔触”)是一种较早的装饰风格,看起来很不一样,以及现代的黑(“sans”)。除非你能欣赏其中的差异,否则你可能不想安装Kai字体。

Noto Sans CJK

Noto Sans CJK—ttc中所有CJK字体的无衬线集—正如链接所说,您可以选择安装ttc并在一个110MB的文件中覆盖所有权重的所有语言,或者您可以下载子集。也有等空间版本。

Opendesktop fonts

Arch保留了opendesktop-fonts的1.4.2版副本。这是BLFS曾经推荐的fireysung的后期发展,添加了Kai和单字字体。Sung字体的名称仍然是“AR PL New Sung”,因此它们不能同时安装在一起。

曾经有一个1.6版本,以及最近在github上的一些版本,其中也包括Sans字体(Odohei),但这些已经从网络上消失,不清楚是否有问题。Fontconfig不知道任何关于后来的字体(AR PL New Kai, AR PL New Sung Mono),并将默认将它们视为Sans。

UMing

UMing fonts -在ttc中包含简体和繁体中文变体的中文铭字(来自Debian,使用’.orig’ tarball)(台湾,第二种变体用于不同的bopomofo,以及粤语用于香港)。它带有旧语法文件,你可以将其安装到/etc/fonts/conf.d/,但请参阅Editing Old-Style conf files

WenQuanYi Zen Hei

WenQuanYi Zen Hei提供了一个无衬线字体,涵盖所有CJK字体,包括韩语。虽然它包括老式的配置文件,但这些不是必需的:fontconfig将已经将这些字体( sharp 包含位图,等宽字体在其ASCII部分中似乎不是单字)视为无衬线字体,衬线字体和等宽字体。如果你想做的只是渲染韩文和韩文文本,而不担心所使用形状的细节,那么这个包中的主字体是一个很好的字体。

Japanese fonts:

在日文中,哥特字体是Sans, Mincho字体是Serif。BLFS曾经只提到Kochi字体,但现在这些字体似乎是日本字体中最不受欢迎的。

除了下面详细介绍的字体外,还可以考虑Noto Sans CJK

IPAex fonts

IPAex fonts是IPA字体的当前版本。在主页上使用Google Translate,然后点击IPAex字体Ver.004.01的下载链接。不幸的是,fontconfig只知道旧的IPAfonts和分叉的IPA Mona字体(这是不容易获得的,显然不符合Debian的免费软件指南)。因此,如果您安装了IPAex字体,您可能希望让fontconfig知道它,请参阅Prefer chosen CJK fonts以获取一种可能的方法。

Kochi fonts

Kochi Substitute fonts是第一个真正自由的日本字体(早期的高知字体据称是从商业字体剽窃)。

VL Gothic

VL Gothic字体是一种现代日语字体,有两种变体,为非日语字符提供单调或比例的间距。

Korean fonts:

在朝鲜语中,八堂或名祖(更老的名字)是衬线字体,Dotum或Gothic是主要的无字体。BLFS以前推荐白木字体,但Nanum和Un字体现在首选由fontconfig白木,因为用户请求。

一个方便的地方看到这些例子和许多其他韩国字体是Free Korean Fonts。点击’Gothic Fonts’或’All Categories -> Myeongjo Fonts’,然后点击字体示例以查看更多详细信息,包括许可证,并点击链接下载它。对于Nanum,你需要能够读懂韩语才能在你访问的页面上找到下载链接。Un有直接的链接,你可以在releases/目录中找到un-fonts-core压缩包。

或者,考虑Noto Sans CJK(所有变体都覆盖韩文)或WenQuanYi ZenHei

24.32 Xorg Legacy


简介Xorg Legacy

Xorg的祖先(1987年的X11R1)最初只提供位图字体,并提供了一个工具(bdftopcf)来帮助安装。随着xorg-server-1.19.0和libXfont2的引入,许多人将不再需要它们。仍然有一些旧的软件包可能需要这些废弃的字体,或从这些字体中受益,因此以下软件包显示在这里。

注意

font-adobe-100dpi包可以安装Courier, Helvetica, New Century Schoolbook 和 Times字体的每英寸100个点。

这里剩余的字体包提供了这些字体的75dpi版本,以及各种杂项字体——主要用于遗留编码。这些主要是为了在测试Xorg时消除警告。在以前的BLFS版本中,安装了更多的传统字体。

如果您希望安装任何其他字体,请参阅BLFS-7.10 systemd book 在https://www.linuxfromscratch.org/blfs/view/7.10-systemd/x/x7font.html

该软件包在LFS 11.3平台上可以正常构建和工作。

包信息

Xorg Legacy依赖

必要

Xorg Fonts

用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/Xorg7Legacy

下载Xorg Legacy

首先,创建一个要下载的文件列表。当下载完成时,此文件还将用于验证下载的完整性:

cat > legacy.dat << "EOF"
2a455d3c02390597feb9cefb3fe97a45 app/ bdftopcf-1.1.tar.bz2
1347c3031b74c9e91dc4dfa53b12f143 font/ font-adobe-100dpi-1.0.3.tar.bz2
6c9f26c92393c0756f3e8d614713495b font/ font-adobe-75dpi-1.0.3.tar.bz2
cb7b57d7800fd9e28ec35d85761ed278 font/ font-jis-misc-1.0.3.tar.bz2
0571bf77f8fab465a5454569d9989506 font/ font-daewoo-misc-1.0.3.tar.bz2
a2401caccbdcf5698e001784dbd43f1a font/ font-isas-misc-1.0.3.tar.bz2
c88eb44b3b903d79fb44b860a213e623 font/ font-misc-misc-1.1.2.tar.bz2
EOF

要使用wget下载所需的文件,使用以下命令:

mkdir legacy &&
cd    legacy &&
grep -v '^#' ../legacy.dat | awk '{print $2$3}' | wget -i- -c \
     -B https://www.x.org/pub/individual/ &&
grep -v '^#' ../legacy.dat | awk '{print $1 " " $3}' > ../legacy.md5 &&
md5sum -c ../legacy.md5

安装Xorg Legacy

注意

在一个脚本中安装多个包时,需要以root用户身份进行安装。有3个通用选项可用于完成此操作。

  1. 以root用户身份运行整个脚本(不推荐)。

  2. 使用Sudo-1.9.13p1包中的sudo命令。

  3. 使用su -c “command arguments”(需要引号),它将在每次循环迭代时询问根密码。

处理这种情况的一种方法是创建一个简短的bash函数,它可以自动选择适当的方法。一旦在环境中设置了命令,就不需要再次设置了。

as_root()
{
  if   [ $EUID = 0 ];        then $*
  elif [ -x /usr/bin/sudo ]; then sudo $*
  else                            su -c \\"$*\\"
  fi
}

export -f as_root

首先,启动一个子shell,它会在发生错误时退出:

bash -e

运行以下命令安装所有包:

for package in $(grep -v '^#' ../legacy.md5 | awk '{print $2}')
do
  packagedir=${package%.tar.bz2}
  tar -xf $package
  pushd $packagedir
    ./configure $XORG_CONFIG
    make
    as_root make install
  popd
  rm -rf $packagedir
  as_root /sbin/ldconfig
done

最后,退出之前启动的shell:

exit

内容

安装程序: bdftopcf

安装库: None

安装目录: $XORG_PREFIX/share/fonts/100dpi, $XORG_PREFIX/share/fonts/75dpi, $XORG_PREFIX/share/fonts/misc

简短描述

bdftopcf   将X字体从位图分布格式转换为可移植编译格式。

上一页      主目录      下一页