由于硬件故障而失去了我心爱的 5 年多的 Gentoo 安装后,我转向了 FreeBSD。我觉得这是我探索和使用基于源代码的操作系统的下一个合乎逻辑的步骤。在阅读所有FreeBSD 的相关文档,在安装 XOrg Server 时,5.6 - 在 XOrg 部分使用字体吸引了我的注意力。意识到我从未添加过这一行:
Section "Files"
FontPath "/usr/share/fonts/...."
EndSection
对于我的 Gentoo 安装上的任何字体,我现在明白为什么我的 DE 看起来很糟糕。作为一名残疾的单手打字员,我手动编辑打字变得更加困难Files Section
,我更愿意手动添加字体作为最后的手段。因此,有没有一种方法可以使用我尚未找到的某人创建的工具或这里的读者非常擅长制作的一些精美的 shell 脚本等将输出添加fc-list : file
到文件部分?xorg.conf
笔记:我用来nvidia-xconfig
生成我的xorg.conf
文件,所以它与当今推荐的模块化方法相去甚远。如果需要,我可以将 conf.d 方法与生成的配置混合并匹配吗?
答案1
如果我理解这个问题,并且您在系统上安装了 vim(这vi
也可以使用,因为这些只是ex
命令)
在终端运行以下命令,将:
- 读入文件:
xorg.conf
- 显然将其替换为您要修改的文件。注意:该文件xorg.conf
将不是进行修改,以防脚本出现问题。 - 进行一些文本操作
- 命令的输出将放置在文件中:
/tmp/temp_xorg.conf
如果在这些操作之后,您对状态感到满意,/tmp/temp_xorg.conf
可以将其复制到真实的、工作的 xorg 配置文件的位置。
运行命令
在 shell 提示符下运行此命令以生成 fontpaths 目录,该目录的格式可以放入 xorg conf 文件中(感谢 @meuh 提供此命令)。
fc-list : file | sed -E 's#(.*)/.*#\tFontPath "\1"#' | sort -u > /tmp/filepaths.txt
然后运行此命令,该命令将获取上述命令的输出并将其插入到“文件”部分
$ vim -e xorg.conf << 'EOF'
" move cursor to the line with the text: `Section "Files"`
/Section "Files"
" read in the output of `fc-list` at this point
r !fc-list
write /tmp/temp_xorg.conf
EOF
例如,如果xorg.conf
看起来像这样:
Section "InputClass"
Identifier "trackpoint catchall"
MatchIsPointer "true"
MatchProduct "TrackPoint|DualPoint Stick"
MatchDevicePath "/dev/input/event*"
Option "Emulate3Buttons" "true"
Option "EmulateWheel" "true"
Option "EmulateWheelButton" "2"
Option "XAxisMapping" "6 7"
Option "YAxisMapping" "4 5"
EndSection
Section "Files"
Identifier "trackpoint catchall"
MatchIsPointer "true"
MatchProduct "TrackPoint|DualPoint Stick"
MatchDevicePath "/dev/input/event*"
Option "Emulate3Buttons" "true"
Option "EmulateWheel" "true"
Option "EmulateWheelButton" "2"
Option "XAxisMapping" "6 7"
Option "YAxisMapping" "4 5"
EndSection
Section "InputClass"
Identifier "trackpoint catchall"
MatchIsPointer "true"
MatchProduct "TrackPoint|DualPoint Stick"
MatchDevicePath "/dev/input/event*"
Option "Emulate3Buttons" "true"
Option "EmulateWheel" "true"
Option "EmulateWheelButton" "2"
Option "XAxisMapping" "6 7"
Option "YAxisMapping" "4 5"
EndSection
运行上述命令后/tmp/temp_xorg.conf
应如下所示:
Section "InputClass"
Identifier "trackpoint catchall"
MatchIsPointer "true"
MatchProduct "TrackPoint|DualPoint Stick"
MatchDevicePath "/dev/input/event*"
Option "Emulate3Buttons" "true"
Option "EmulateWheel" "true"
Option "EmulateWheelButton" "2"
Option "XAxisMapping" "6 7"
Option "YAxisMapping" "4 5"
EndSection
Section "Files"
FontPath "/home/ubuntu/.fonts"
FontPath "/usr/share/fonts/opentype/noto"
FontPath "/usr/share/fonts/opentype/stix"
FontPath "/usr/share/fonts/opentype/stix-word"
FontPath "/usr/share/fonts/truetype"
FontPath "/usr/share/fonts/truetype/abyssinica"
FontPath "/usr/share/fonts/truetype/ancient-scripts"
FontPath "/usr/share/fonts/truetype/dejavu"
FontPath "/usr/share/fonts/truetype/fonts-guru-extra"
FontPath "/usr/share/fonts/truetype/freefont"
FontPath "/usr/share/fonts/truetype/kacst"
FontPath "/usr/share/fonts/truetype/kacst-one"
FontPath "/usr/share/fonts/truetype/lao"
FontPath "/usr/share/fonts/truetype/lato"
FontPath "/usr/share/fonts/truetype/liberation"
FontPath "/usr/share/fonts/truetype/lohit-punjabi"
FontPath "/usr/share/fonts/truetype/nanum"
FontPath "/usr/share/fonts/truetype/openoffice"
FontPath "/usr/share/fonts/truetype/padauk"
FontPath "/usr/share/fonts/truetype/sinhala"
FontPath "/usr/share/fonts/truetype/takao-gothic"
FontPath "/usr/share/fonts/truetype/tibetan-machine"
FontPath "/usr/share/fonts/truetype/tlwg"
FontPath "/usr/share/fonts/truetype/ttf-khmeros-core"
FontPath "/usr/share/fonts/truetype/ubuntu-font-family"
FontPath "/usr/share/fonts/type1/gsfonts"
FontPath "/usr/share/fonts/X11/Type1"
Identifier "trackpoint catchall"
MatchIsPointer "true"
MatchProduct "TrackPoint|DualPoint Stick"
MatchDevicePath "/dev/input/event*"
Option "Emulate3Buttons" "true"
Option "EmulateWheel" "true"
Option "EmulateWheelButton" "2"
Option "XAxisMapping" "6 7"
Option "YAxisMapping" "4 5"
EndSection
Section "InputClass"
Identifier "trackpoint catchall"
MatchIsPointer "true"
MatchProduct "TrackPoint|DualPoint Stick"
MatchDevicePath "/dev/input/event*"
Option "Emulate3Buttons" "true"
Option "EmulateWheel" "true"
Option "EmulateWheelButton" "2"
Option "XAxisMapping" "6 7"
Option "YAxisMapping" "4 5"
EndSection
答案2
对于问题的配置“混合和匹配”部分 - 答案是“有点”。
手册xorg.conf
页按优先级顺序列出了配置源,并指出“当以多种方式提供相同信息时,将使用最高优先级机制”。
通过观察(在我看来,由于“相同信息”和“不止一种方式”在手册页中没有明确定义),这意味着您无法使用文件覆盖/更新xorg.conf
(例如Section "Files"
字体)中的部分xorg.conf.d
,因为优先级较低。尽管读取并解析了较低优先级的文件,但对于那些已存在较高优先级的节,节内容将被默默地忽略。
当前的 Nvidia 驱动程序(396,仅在 Linux 上)做现在使用xorg.conf.d
片段,但仅适用于 Linux DRM Xorg 驱动程序,它仍然在安装过程中创建近乎整体的片段xorg.conf
。
幸运的是,nvidia-xconfig
不会更改此部分,因此如果有帮助,您可以将其注释掉xorg.conf
并将其迁移到一个或多个xorg.conf.d
文件中。具有相同优先级的多个重复部分,即全部位于单个xorg.conf.d
目录中,做结果如所希望的合并值。
生成指令的简单方法是:
fc-list -f 'Fontpath "%{file|dirname}"\n' : | sort -u
这使用格式化输出(-f
)来fc-list
创建所需的配置行,%{file}
是每种字体的文件名,|dirname
是筛选输出目录名称(与dirname
shell 命令完全相同),然后sort -u
输出唯一路径。如果您有很多字体,您可能希望重新排序路径,如果您有位图版本,您可以执行以下操作来重新排序:
fc-list -f ' Fontpath "%{file|dirname}"\n' :scalable=true | sort -u
fc-list -f ' Fontpath "%{file|dirname}"\n' :scalable=false | sort -u
您可以根据需要粘贴该输出 - 或者 - 作为所有步骤的示例(以 root 身份)
# extract Files section from xorg.conf to a separate conf
sed -n '/^Section..Files/,/^EndSection/p' \
< /etc/X11/xorg.conf > /etc/x11/xorg.conf.d/10-section-files.conf
# comment out Files section in xorg.conf
sed -i.bak '/^Section..Files/,/^EndSection/ s/^/#/' /etc/X11/xorg.conf
# paths for scalable fonts
( echo 'Section "Files"';
fc-list -f ' Fontpath "%{file|dirname}"\n' :scalable=true | sort -u;
echo 'EndSection' ) > /etc/X11/xorg.conf.d/20-fontpath.conf
# paths for non-scalable fonts
( echo 'Section "Files"';
fc-list -f ' Fontpath "%{file|dirname}"\n' :scalable=False | sort -u;
echo 'EndSection' ) > /etc/X11/xorg.conf.d/30-fontpath-fixed.conf
如果需要,重新排序并删除重复项,然后重新启动 X。
为了完整起见,您还可以使用 即时修改字体路径xset
,例如
xset +fp /usr/local/share/fonts/TTF
使用 检查当前路径xset q
。您可以简单地修改它以将此类命令添加到.xinitrc
脚本中,以便字体路径独立于任何后续的 X 配置更改而持续存在,并且也可以保存重新启动 X。