有没有简单的方法来添加字体?

有没有简单的方法来添加字体?

由于硬件故障而失去了我心爱的 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筛选输出目录名称(与dirnameshell 命令完全相同),然后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。

相关内容