我让我的 Debian GNU/Linux 12 “bookworm” 知道非根分区中本地安装的字体:
$ la -la /usr/local/share/fonts/
…
lrwxrwxrwx 1 root staff 40 8. Feb 22:16 Folder1 -> '/media/WIN_SYS/Folder1'
lrwxrwxrwx 1 root staff 33 8. Feb 23:05 Folder2 -> /media/WIN_SYS/Folder2
…
# fc-cache -fv
之后,evince 在打开某些(并非全部)PDF 文件时开始在控制台上报告一堆错误“某些字体失败”。检查 /var/log/syslog 产生了一堆消息,如下所示
[date&time] MachineName kernel: [210785.968345] audit: type=1400 audit(1708091486.368:26210): apparmor="DENIED" operation="open" profile="/usr/bin/evince" name="/media/WIN_SYS/Folder1/some_font_file.ttf" pid=3000142 comm="EvJobScheduler" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
Courier New, Regular
some_font_file.ttf向 gnome-font-viewer宣传自己。
evince 真的需要 some_font_file.ttf 吗?我看不出 evince 查看器窗口本身有什么不良影响,尽管
pdffonts viewed_document.pdf | grep -i cour
它会产生一些其他的东西,ABCDEE+Courier New TrueType WinAnsi yes yes no 3 0 ABCDEE+Courier New CID TrueType Identity-H yes yes yes 11 0 CourierNewPSMT TrueType WinAnsi no no no 70 0
我无法重新生成 viewed_document.pdf(它是别人很久以前创建的)。当然,我总有机会在查看 PDF 时忽略一些视觉输出,但到目前为止我还没有注意到。
- 如何以最不宽松但又简洁的方式放宽 apparmor 的设置,以允许 evince 从 /media/WIN_SYS/Folder1、/media/WIN_SYS/Folder2 等(包括其子文件夹)获取字体文件?那里有太多的字体文件,并且它们在 Folder1 和 Folder2 中的名称和位置可能会发生变化,因此单独列出每个字体文件不是一个选项。允许 evince 访问所有已安装的非根分区也不是一个选项,因为这是一个不必要的安全风险。