Ubuntu删除系统字体后个别程序中的字变成豆腐

系统字体配置、中文显示和输入法问题
回复
头像
dqwyy
帖子: 19
注册时间: 2017-02-20 17:22
来自: Teochew
联系:

Ubuntu删除系统字体后个别程序中的字变成豆腐

#1

帖子 dqwyy » 2018-10-10 15:11

各位好,我目前使用的是Ubuntu 18.04.1 LTS。由于系统自带的字体太多,且个别较为难看,而且我也不需要那么多,所以决定删除大部分不需要的系统自带字体。删除完之后,西文字体我只留下FreeSans、FreeSerif和FreeMono,也就是说我把Ubuntu和DejaVu也给删除了。至于CJK字体,我把原来的noto的OTC给删了,然后自己装了Souce Han的otf。以上所执行的删除操作是通过删除 /usr/share/fonts/ 里面的字体文件来完成的。当然我也通过Tweaks修改了系统字体,把Interface字体设置成Source Han Sans。

这样子一弄之后,发现大部分软件的显示是正常的,例如我目前用的aMule、WPS之类的,里面的UI字体都是显示的我设置的Source Han Sans。直到我通过apt install安装了Gimp 2.10之后,打开之后,发现里面的字全部变成豆腐。由于我系统是英文的,而里面的英文和数字也是显示为豆腐,这一点有点让我惊讶。具体情况可参照我往Gimp邮件列表发的这一个讨论串: https://mail.gnome.org/archives/gimp-us ... 00004.html

图片

从上图可以看出里面大部分字是豆腐,只有少部分字是正常显示的,正常显示的这部分显示的正是我所设置的Souce Han Sans,变成豆腐的那部分明显是没按我的设置,可能是自己寻找某种字体,然后找不到,然后fallback又出问题了,所以就显示为豆腐。我一开始以为西文fallback字体是Ubuntu,所以重装了已经被我删除的Ubuntu字体,后来发现没用,然后邮件列表有人告诉我西文默认fallback字体是DejaVu,然后我重装了DejaVu也没用。后来我通过卸载Gimp,换用其官方网站推荐的flatpak重装了Gimp,结果字体能够正确显示,也就是说能够正确地用我所设置的Source Han Sans了。具体详情可以参见上一段我给出的邮件列表存档。

本来以为这样就可以了,结果我发现其他软件也出问题了,同样的症状。例如计算器还有Character,这两个软件一打开也是看到一堆豆腐。

图片

然后我通过从LiveCD里面复制了 /user/share/fonts 文件夹,把然后覆盖掉被我删减过的fonts文件夹,这样子我通过font manager来看,确实是所以字体都回来了,但是,软件出现的豆腐还是没能解决。我刷新了字体缓存也不起作用。

请问这种情况应该如何解决?谢谢。
上次由 dqwyy 在 2018-10-11 7:56,总共编辑 1 次。
头像
astolia
论坛版主
帖子: 6396
注册时间: 2008-09-18 13:11

Re: Ubuntu删除系统字体后个别程序中的字变成豆腐

#3

帖子 astolia » 2018-10-10 20:41

fc-cache -r和sudo fc-cache -r清理一下字体cache?
头像
qiang_liu8183
论坛版主
帖子: 10699
注册时间: 2006-09-10 22:36
系统: Arch Debian
来自: 北京

Re: Ubuntu删除系统字体后个别程序中的字变成豆腐

#4

帖子 qiang_liu8183 » 2018-10-10 21:12

不要蛮干,删除字体正确的方法是用包管理软件,系统会自动删除字体文件并重建fonts.dir和fonts.scale后刷新cache,建议你用包管理软件把你删除的字体的包重新装回来,再按照正确的方法删除你不想要的字体
看破、放下、自在、随缘、念佛
真诚、清净、平等、正觉、慈悲
头像
dqwyy
帖子: 19
注册时间: 2017-02-20 17:22
来自: Teochew
联系:

Re: Ubuntu删除系统字体后个别程序中的字变成豆腐

#5

帖子 dqwyy » 2018-10-10 23:45

xenomorph0525 写了: 2018-10-10 19:01 對於系統字型,若要刪除應該要用「移除套件」的方式,而不是從「/user/share/fonts」刪除。

查詢你所刪除的字型屬於哪個套件之後,「sudo apt --reinstall 套件」。
https://packages.ubuntu.com/
感謝您的回覆。正如我文中所言,我是把作業系統內建的西文字型幾乎是全部刪除了,只留下FreeSans、FreeSerif和FreeMono。如果要重新安裝所有的字型套件應該是比較麻煩的,然後郵件列表裏有人說西文字型是fallback到DejaVu的,所以我重新安裝了DejaVu字型和Ubuntu字型並清除了字型快取,但仍然不起作用。

图片

其實我比較疑惑的一點是,明明在字型設置那裏設置了Source Han Sans作爲介面的字型,不知爲何一些軟體沒有按照這個設置來,像其他那些按照這個字型設置來的軟體,它們的介面字型就是Source Han Sans,所以自然不會出現tofu。難道是因爲這些出現tofu的軟體在選擇字型的時候是按照另外一個設定檔?
上次由 dqwyy 在 2018-10-11 0:05,总共编辑 1 次。
头像
dqwyy
帖子: 19
注册时间: 2017-02-20 17:22
来自: Teochew
联系:

Re: Ubuntu删除系统字体后个别程序中的字变成豆腐

#6

帖子 dqwyy » 2018-10-10 23:47

astolia 写了: 2018-10-10 20:41 fc-cache -r和sudo fc-cache -r清理一下字体cache?
正如我在一楼所写的,之前已有尝试过这个命令,但是仍然不起作用。
xenomorph0525
帖子: 520
注册时间: 2009-11-21 20:29

Re: Ubuntu删除系统字体后个别程序中的字变成豆腐

#7

帖子 xenomorph0525 » 2018-10-11 3:10

dqwyy 写了: 2018-10-10 23:45
感謝您的回覆。正如我文中所言,我是把作業系統內建的西文字型幾乎是全部刪除了,只留下FreeSans、FreeSerif和FreeMono。如果要重新安裝所有的字型套件應該是比較麻煩的,然後郵件列表裏有人說西文字型是fallback到DejaVu的,所以我重新安裝了DejaVu字型和Ubuntu字型並清除了字型快取,但仍然不起作用。

其實我比較疑惑的一點是,明明在字型設置那裏設置了Source Han Sans作爲介面的字型,不知爲何一些軟體沒有按照這個設置來,像其他那些按照這個字型設置來的軟體,它們的介面字型就是Source Han Sans,所以自然不會出現tofu。難道是因爲這些出現tofu的軟體在選擇字型的時候是按照另外一個設定檔?
字型是由「/etc/fonts/conf.avail」底下的設定檔指定,說不定你刪到有被指定的字型了?
头像
dqwyy
帖子: 19
注册时间: 2017-02-20 17:22
来自: Teochew
联系:

Re: Ubuntu删除系统字体后个别程序中的字变成豆腐

#8

帖子 dqwyy » 2018-10-11 8:04

其实我的这个思维不知道正不正确。既然我一开始是删除了 /usr/share/fonts/ 中的字体文件,那么这一次我就把我删除的字体文件全部还原回来,也就是从LiveCD里面把那个原来的 /usr/share/fonts/ 复制过来覆盖?这样按照我的常规思路来想应该就是复原了我之前删除的东西了,然后再刷新一下字体缓存应该就可以了。这就是我原来的思路,可是不知道为何这样子仍然不起作用,毕竟我也不太懂Ubuntu。

图片
xenomorph0525
帖子: 520
注册时间: 2009-11-21 20:29

Re: Ubuntu删除系统字体后个别程序中的字变成豆腐

#9

帖子 xenomorph0525 » 2018-10-11 14:32

dqwyy 写了: 2018-10-11 8:04 其实我的这个思维不知道正不正确。既然我一开始是删除了 /usr/share/fonts/ 中的字体文件,那么这一次我就把我删除的字体文件全部还原回来,也就是从LiveCD里面把那个原来的 /usr/share/fonts/ 复制过来覆盖?这样按照我的常规思路来想应该就是复原了我之前删除的东西了,然后再刷新一下字体缓存应该就可以了。这就是我原来的思路,可是不知道为何这样子仍然不起作用,毕竟我也不太懂Ubuntu。
權限有設對嗎?
「ls -al」比對一下沒被刪除的跟補回的是否有權限上的不同,若有設回原權限再刷新一下字体缓存。
头像
dqwyy
帖子: 19
注册时间: 2017-02-20 17:22
来自: Teochew
联系:

Re: Ubuntu删除系统字体后个别程序中的字变成豆腐

#10

帖子 dqwyy » 2018-10-14 13:28

xenomorph0525 写了: 2018-10-11 14:32
dqwyy 写了: 2018-10-11 8:04 其实我的这个思维不知道正不正确。既然我一开始是删除了 /usr/share/fonts/ 中的字体文件,那么这一次我就把我删除的字体文件全部还原回来,也就是从LiveCD里面把那个原来的 /usr/share/fonts/ 复制过来覆盖?这样按照我的常规思路来想应该就是复原了我之前删除的东西了,然后再刷新一下字体缓存应该就可以了。这就是我原来的思路,可是不知道为何这样子仍然不起作用,毕竟我也不太懂Ubuntu。
權限有設對嗎?
「ls -al」比對一下沒被刪除的跟補回的是否有權限上的不同,若有設回原權限再刷新一下字体缓存。
問題已經解決,感謝您的回覆。

由於我目前是Ubuntu初學者,還正在看William Shotts寫的《The Linux Command Line》這本書,還沒學到權限這一章。但是您的回覆給了我一個很好的提示,我在從LiveCD複製貼上字型資料夾時使用的是 cp -ar 指令,所以權限應該是沒問題的。然後我查看了系統字型資料夾的權限,發現是這樣子的。也就是說權限是正常的。

但是我發現裏面有一行與衆不同,也就是我自己安裝的字型Source Han Sans Regular,在前文我有提到我把系統內建的Noto Han Sans給刪除了,然後自己重新安裝了Source Han Sans,並把我自己安裝的Source Han Sans設定爲作業系統的默認介面字型。

代码: 全选

dqwyy@Lenovo:~$ ll ~/.local/share/fonts/
total 203212
drwxr-xr-x  2 dqwyy dqwyy     4096 Oct  7 16:17 ./
drwx------ 26 dqwyy dqwyy     4096 Oct 14 12:59 ../
-rw-r--r--  1 dqwyy dqwyy 22761228 Aug 31  2017 HanaMinA.ttf
-rw-r--r--  1 dqwyy dqwyy 30739236 Aug 31  2017 HanaMinB.ttf
-rw-r--r--  1 dqwyy dqwyy 24824240 Oct  5 10:41 I.MingCP-5.00.otf
-rw-r--r--  1 dqwyy dqwyy 16998496 Oct  4 14:49 SourceHanSans-Bold.otf
-rw-r--r--  1 root  root  16427580 Oct  5 00:41 SourceHanSans-Regular.otf    #這一行跟其他不一樣!
-rw-r--r--  1 dqwyy dqwyy 24694632 May  2  2017 SourceHanSerif-Bold.otf
-rw-r--r--  1 dqwyy dqwyy 23469028 Oct  4 14:46 SourceHanSerif-Light.otf
-rw-r--r--  1 dqwyy dqwyy 24684812 Oct  5 20:58 SourceHanSerifTC-Bold.otf
-rw-r--r--  1 dqwyy dqwyy 23459208 Oct  5 21:00 SourceHanSerifTC-Light.otf
可以看到裏面的SourceHanSans-Regular.otf是root root,而其他的都是dqwyy dqwyy。而我又聯想到我之前安裝Gimp的過程,一開始我通過Ubuntu Software安裝出現了豆腐,後來我按照官方網站的教程通過flatpak安裝便沒有出現豆腐,雖說我還沒學到權限,但是我推測,是不是這兩種管道存在着權限的不同。於是我又猜測,是不是我一開始的想法就是有誤的,我一開始說一些軟體沒有按照我的設定去用我的Source Han Sans Regular,但現在想想,會不會是因爲這些軟體想用我的Source Han Sans Regular,但是沒有權限去用?於是我決定把 ~/.local/share/fonts/ 資料夾中的Source Han Sans Regular複製貼上一份到 /usr/share/fonts/ 這個系統字型資料夾去。

代码: 全选

sudo cp -a ~/.local/share/fonts/SourceHanSans-Regular.otf /usr/share/fonts/
這麼一複製貼上,連字型快取都還沒重新整理,我就打開之前出現豆腐的計算器和Characters這兩個軟體來看,驚喜地發現已經顯示正常了,並且顯示的是我的Source Han Sans Regular。

图片
回复