web1n / wechat-universal-flatpak

Flatpak 打包微信 Linux Universal 版
627 stars 43 forks source link

关于聊天内容的emoji显示问题 #15

Closed auralioth closed 5 months ago

auralioth commented 5 months ago

系统

Arch + kde6

问题

目前版本没有bind xdg-config/fontconfig:ro ,我这里会出现聊天内容的emoji方框和黑白的问题,如下图所示: 屏幕截图_20240316_130547

emoji是🚀,即\U1F680

测试

没有bind时我运行

$ flatpak run --command=sh --devel com.tencent.WeChat

发现:

[📦 com.tencent.WeChat ~]$ fc-match 'emoji'
NotoColorEmoji.ttf: "Noto Color Emoji" "Regular"
[📦 com.tencent.WeChat ~]$ fc-match ':charset=1F680'
twemoji.ttf: "Twemoji" "Regular"

能匹配到emoji,但是不知道为什么显示为方框

解决

我把我自己的fontconfig精简了一下,然后bind进去,发现至少得有下面这一段:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
  <match target="pattern">
    <test qual="any" name="family">
      <string>sans-serif</string>
    </test>
    <edit name="family" mode="prepend" binding="strong">
      <string>Noto Sans</string>
      <string>Source Han Sans SC</string>
      <string>Twemoji</string>
    </edit>
  </match>
</fontconfig>

在我这里无衬线部分得手动指定emoji字体聊天内容的emoji才能显示

不知道大家有没有这个问题,如果有的话可不可以考虑build时加一条

- --filesystem=xdg-config/fontconfig:ro
web1n commented 5 months ago

是否应该内置 emoji 字体?

auralioth commented 5 months ago

Flatpak确实内置了noto emoji,而且本机的/usr/share/fonts放在了/run/host/fonts里面,fc-list都可以找到,但是我这里不知道为什么默认情况下emoji不显示。你那里会默认显示吗?

web1n commented 5 months ago

Flatpak确实内置了noto emoji,而且本机的/usr/share/fonts放在了/run/host/fonts里面,fc-list都可以找到,但是我这里不知道为什么默认情况下emoji不显示。你那里会默认显示吗?

我这里也是有很多 emoji 不能正常显示的,没太搞明白是怎么回事。 试了一下同样是 Flatpak 安装的 Qt 软件 PrismLauncher,也是同样的问题。这个是否是 Flatpak 软件的共同问题,或者是我本机的配置有问题?

auralioth commented 5 months ago

应该是Flatpak的问题,我看确实有很多应用都不能正确显示emoji,要不build的时候人为添加一个fallback方案 noto-color-emoji.conf

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <description>Emoji fix</description>

    <alias binding="weak">
        <family>sans-serif</family>
        <prefer>
            <family>Noto Color Emoji</family>
        </prefer>
    </alias>

    <alias binding="weak">
        <family>serif</family>
        <prefer>
            <family>Noto Color Emoji</family>
        </prefer>
    </alias>

    <alias binding="weak">
        <family>monospace</family>
        <prefer>
            <family>Noto Color Emoji</family>
        </prefer>
    </alias>
</fontconfig>

然后添加一个module,把config装到/app/etc/fonts/local.conf里

{
    "name": "noto-color-emoji",
    "buildsystem": "simple",
    "sources": [
        {
            "type": "file",
            "path": "noto-color-emoji.conf"
        },
    ],
    "build-commands": [
        "mkdir -p /app/etc/fonts/",
        "cp noto-color-emoji.conf /app/etc/fonts/local.conf",
        "fc-cache -fv"
    ]
},

此外再bind一下 per-user configuration ,针对不想用noto color emoji的自定义用户

- --filesystem=xdg-config/fontconfig:ro
web1n commented 5 months ago

我去试一下。

web1n commented 5 months ago

image

https://github.com/web1n/wechat-universal-flatpak/actions/runs/8308696317/artifacts/1331988254

auralioth commented 5 months ago

好哦!!

web1n commented 5 months ago

上面链接的版本可以正常显示 emoji 了吗?

auralioth commented 5 months ago

我关掉xdg-config/fontconfig也是可以显示的,没问题了