ArchLinux下解决deepinwine软件中文黑框问题

1. 简介

随着 deepinwine 的不断完善,类似中文显示等问题也在逐渐减少,目前最新的 deepinwine 应用,如 com.qq.tim.spark 等中文都显示正常,相信到后面这类问题就会完全消失。给 deepin 团队打 call !!!

2. 中文显示黑框

目前遇到两种情况下中文显示黑框,一种是英文环境下中文显示黑框,但中文环境下正常;另一种是中文环境下中文也显示为黑框。

2.1 英文环境导致中文显示黑框

这种情况下,安装的 deepinwine 软件显示中文会有问题,需要修改一下 wine 软件的启动环境,具体修改步骤如下:

  1. 查找 wine 软件的启动命令,这里以 com.tencent.meeting.deepin 软件(即腾讯会议 wine 版)为例,在开始菜单中找到该软件,右键编辑应用,切换到应用选项卡,找到启动命令,我这里是 "/opt/apps/com.tencent.meeting.deepin/files/run.sh" -u %u(一般默认安装也会是这个命令)。
  2. 打开启动脚本 /opt/apps/com.tencent.meeting.deepin/files/run.sh,找到 WINE_CMD(早期版本)或 APPRUN_CMD(较新版本),我这里是 export APPRUN_CMD="/usr/lib/deepin-wine6-stable/bin/wine"。然后将 LC_ALL=zh_CN.UTF-8 添加到变量 APPRUN_CMD 中,即表示使用中文环境启动:
1
export APPRUN_CMD="LC_ALL=zh_CN.UTF-8 /usr/lib/deepin-wine6-stable/bin/wine"
  1. 由于命令 WINE_CMDAPPRUN_CMD 中引入了一条赋值语句,和原来的 wine 命令之间出现了空格,所以可能会影响后面的 if 命令,所以需要追踪一下 APPRUN_CMD 的使用。比如我这里:
  • 首先是 /opt/apps/com.tencent.meeting.deepin/files/run.sh 脚本中没有具体使用到 APPRUN_CMD,而是通过 export 导出了 APPRUN_CMD 命令,然后再通过 START_SHELL_PATH="/opt/deepinwine/tools/run_v3.sh" 变量指定了 /opt/deepinwine/tools/run_v3.sh,并在下文通过 $START_SHELL_PATH $BOTTLENAME $APPVER "$EXEC_PATH" "$@" 进行了启动,因此定位到 /opt/deepinwine/tools/run_v3.sh 文件。
  • 打开 /opt/deepinwine/tools/run_v3.sh 发现,有一段代码使用到 APPRUN_CMD 变量:
1
2
3
if [ $APPRUN_CMD ]; then
WINE_CMD=$APPRUN_CMD
fi
  • 由于 APPRUN_CMD 变量在 if 语句中进行判断时没有加上双引号,因此如果 APPRUN_CMD 变量中有空格就会导致 if 语句判断了两个字符串,从而导致问题。因此需要将 $APPRUN_CMD 加上双引号进行判读,具体修改成如下代码:
1
2
3
if [ "$APPRUN_CMD" ]; then
WINE_CMD=$APPRUN_CMD
fi
  1. 至此修改完毕,重新启动 com.tencent.meeting.deepin 中文显示正常。

2.2 中文环境下中文也显示为黑框

这就是系统本身找不到字体的原因了,因此可以将 Windows 环境下的添加到 deepinwine 环境中。比如这里仍然以 com.tencent.meeting.deepin 软件(即腾讯会议 wine 版)为例:

  1. 将 Windows 系统下的 C:\Windows\Fonts\msyh.ttc~/.deepinwine/Deepin-WeMeet/drive_c/windows/Fonts 文件夹中。
  2. 修改 com.tencent.meeting.deepin 的 wine 环境中的注册表文件 ~/.deepinwine/Deepin-WeChat/system.reg,修改以下两行指定使用的字体为 msyh.ttc 字体:
1
2
"MS Shell Dlg"="msyh"
"MS Shell Dlg 2"="msyh"

附录

其实不止在 ArchLinux 下,其他系统下出现类似问题的解决方案也差不多是这两种。参考资料: