FydeOS中CrossOver中文字体显示不正常解决方法
1 前置知识
2 进入正题
3 效果
1、前置知识
CrossOver基于wine,因此许多wine的配置也能在CrossOver上实施。
CrossOver在这里是Android app的形式,它的数据在Android容器里的/data/data/com.codeweavers.cxoffice/files/这个目录里面,在外部系统里访问该目录要在前面加上/opt/google/containers/android/rootfs/android-data/。看一下这里面的内容
1.1 wine环境
每一个wine容器(环境)用WINEPREFIX来区分,在这里就是数据目录下面的prefixes文件夹,可以知道每次新建一个wine环境这里会多一个子目录,每个子目录下的内容相近
这里我们选择QQMusic的容器来测试
首先看一下该目录:
这里主要注意两个东西:
1.1.1 字体文件夹
这里一共有三个字体文件夹。其中两个在./drive_c/fonts/里面
一个是system,可见它指向了Android子系统里面的字体文件夹,这个文件夹是只读的
另一个是wine带的文件夹,看到它也是个软链接指向了数据目录里的share/wine/fonts目录,这个应该是wine带的字体,所有容器公用的
第三个就是./drive_c/windows/Fonts/,这个其实就是Windows的系统字体目录,每个容器独立的。查看可以知道这个目录其实是空空如也,想必是版权原因。
0.1.2 注册表项
注意.reg后缀的文件,这些其实是文本格式存储的Windows注册表数据,不同的文件名对应不同的注册表树,这个问题里我们要通过修改注册表来解决。
wine里和字体相关的注册表项主要有
wine相关配置:
- HKEY_CURRENT_USER\Software\Wine\Fonts\Replacements 通过名字可以知道,这里记录的是某一字体的替换字体
- HKEY_CURRENT_USER\Software\Wine\Fonts\External Fonts 这里记录的外部字体(C:\windows\Fonts之外的字体)文件的路径
- HKEY_CURRENT_USER\Software\Wine\Fonts\Cache 字体缓存吧可能是,其中每一个子目录的名字正是是字体的标准名称
Windows相关配置:
- HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink这里似乎能给某种字体指定对应的文件路径,看到很多教程说修改这个来支持中文,但是试过好像并没有效果
- HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Fonts字体名对应的路径,这里不用管这个
1. 进入正题
修正一共两步,建议在CrossOver菜单里停止所有wine进程后再操作
1.1 增加中文字体
这里我们选择增加经典的文泉驿微黑字体wqy-microhei.ttc,可以从网上下载一个,放到./drive_c/windows/Fonts/里面,wine会自动识别这个字体,
建议添加字体后重启子系统然后确保正确读取,否则可能导致下一步修改注册表项进行的修改不生效,原因未知。
如何确保字体被wine读取呢?
在菜单中选择Command Shell,在出现的命令行中输入regedit启动Windows注册表编辑器,在HKEY_CURRENT_USER\Software\Wine\Fonts\Cache里面应该能找到一个叫WenQuanYi Micro Hei的子目录,说明文泉驿微黑字体被wine正确读取。
1.2 修改注册表项
这里我们可以选择regedit里面编辑注册表,不过要修改的表项太多了,应该没人这么做。
我们可以通过修改user.reg来达到这个目的,效果是一样的,首先墙裂建议停止所有wine进程后再操作!
我们要修改的表项是HKEY_CURRENT_USER\Software\Wine\Fonts\Replacements,指示某种字体缺失后的候选字体,我们要给所有常用的中文字体添加文泉驿微黑作为候选字体。
修改前的注册表:
在我们修改之前,会有很多表项含的值为Noto Sans CJK SC Regular,这也是一种中文字体,我们需要将这些项的值替换成Noto Sans CJK SC Regular和WenQuanYi Micro Hei两个值,并增加一些字体如宋体、黑体等的候选。
- 打开user.reg,找到以[Software\\Wine\\Fonts\\Replacements]开头的块(在文件偏末尾的位置),删除该大块里面形如"XXXXXXX"="Noto Sans CJK SC Regular"的行,注意不要在中间留空行。
- 在该块的末尾添加如下项
"DFKai-SB"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "FangSong"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "Hiragino Sans GB"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "KaiTi"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "Microsoft JhengHei"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "Microsoft Sans Serif"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "Microsoft YaHei"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "MingLiU"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "NSimSun"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "PMingLiU"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "SimHei"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "SimKai"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "SimSun"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "\x4eff\x5b8b"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "\x4eff\x5b8b_GB2312"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "\x5b8b\x4f53"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "\x5fae\x8f6f\x96c5\x9ed1"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "\x601d\x6e90\x9ed1\x4f53 Regular"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "\x65b0\x5b8b\x4f53"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "\x65b0\x7d30\x660e\x9ad4"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "\x6977\x4f53"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "\x6977\x4f53_GB2312"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "\x96b6\x4e66"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0" "\x9ed1\x4f53"=str(7):"Noto Sans CJK SC Regular\0WenQuanYi Micro Hei\0"
保存后从regedit里面可以看到,新增了一些常见的字体,并新增了文泉驿微黑作为候选字体。
3. 效果
原先歌词中的中文部分显示为方块,现已显示正常。
另外网上说的另一种似乎比较可靠的办法是直接将原版Windows的Fonts文件夹里的字体全部放到./drive_c/windows/Fonts/,但是我没有尝试过,可以尝试一下。
相关阅读:
未知的网友