[software development] 无人在意的角落,flutter修复了arm64 linux上的中文字体问题。
Tofloor
poster avatar
kero990
deepin
12 hours ago
Author

很久以来,flutter在arm64 Linux上一直有字体问题,所有中文(其实不止,cjk字体都会)都会显示为方框,即使写个hello world也一样。

整个界面的所有文字都会是□□□□□□□□

由于这是flutter本身的问题,所以任何使用flutter的应用都无法幸免。

如果你使用arm64机器,那你应该见过,flutter应用还挺多的,最著名的的是localsend

当然,商店版本是我传的,当时修改源码修复了这个问题。

截图_localsend_app_20260821114700.png

1.17.x,未修复的样子

image.png

1.18.x,已修复


实际上来说,严格意义上这不是bug。flutter早期支持arm64的时候,还把他定位为嵌入式设备,这些东西都是没有x11,wayland桌面的,字体渲染自然也没啥用,就给干掉了。

flutter项目上,主要的issue在这里

https://github.com/flutter/flutter/issues/139293

其中,2025年底,一名开发者krystic完全定位了该问题,官方的 libflutter_linux_gtk.so库在arm64上默认没有启用 fontconfig选项,这导致在linux桌面环境中无法使用系统的字体回退机制。他创建了一个临时修复工具,https://github.com/krystic/flutter-arm-cjk-fix,本质上的作用就是识别你用的flutter版本,并替换为他预编译的带有 fontconfig的版本

这位开发者也提交了修复PR:https://github.com/flutter/flutter/pull/180235,和官方团队讨论修改后,在2026 年 8 月 5 日被flutter合并进了主分支

当然,这也意味着,flutter官方的arm64 linux版本正式脱离嵌入式领域。以后嵌入式就只能用sony那套flutter-embedded(本来嵌入式也都用这个没人用官方)

所以,如果现在你使用flutter的main通道,会获得该修复,arm64不再需要额外的修补了

localsend的最新版本已经使用了该修复,rustdesk的release还是上个月的事,所以它还没有修复,当然这也是时间问题。

不过flutter是个对环境版本较为敏感的开发语言,一些旧有项目可能无法使用最新版本进行编译。所以那个修复项目也仍有其意义。

总而言之,这玩意修复了,arm64用户终于可以使用官方release包,而不是第三方魔改修复包了。


当然了,虽然localsend修复了字体问题,但它仍然是基于Ubuntu22编译的,需要GLIBC>=2.34,UOS用户,还是没得用,surprise.

Reply Favorite View the author
All Replies
avatar
罐子
Moderator
12 hours ago
#1

有龙芯版本,新旧世界都有,你要不要也拿去更新一下。

Reply View the author
avatar
DebuggerX
deepin
12 hours ago
#2

!!???居然修复了???
不过谁做正经APP不手动配个字体啊😂

另外sony的那套嵌入式方案已经弃坑了,虽然社区有人分叉维护了https://github.com/flutter-elinux/flutter-elinux,但是我试下来感觉问题还挺多,要求不高的还是先用flutter-pi方案吧,https://github.com/toyota-connected/ivi-homescreen应该是未来的主流方案,最近更新也很频繁,但是感觉比较复杂,还没时间研究。

Reply View the author
avatar
kero990
deepin
11 hours ago
#3
罐子

有龙芯版本,新旧世界都有,你要不要也拿去更新一下。

我倒一直很想玩龙芯机器,但我没有

最近几个月闲鱼冒出大量龙芯3A5000机型,据说是军队信创淘汰的,但都有全套包装。

不带内存和硬盘的准系统只卖299,是的你没看错,299

但问题是这不是去年了,现在插两条内存插个固态,总开销要上千,遂作罢。

机器倒是真便宜啊

Reply View the author
avatar
mozixun
Moderator
10 hours ago
#4

无人在意的角落,flutter修复了arm64 linux上的中文字体问题

无人在意的角落, 玲珑商店极速版的ARM64架构早就修好了, 只是没人发现, 我也没说, 因为我当时看这玩意快进上游了

这个问题本质很简单, 就是Flutter把GNU/Linux的ARM64架构平台都以为是嵌入式设备而没开fontconfig

Reply View the author
avatar
MeGusta
deepin
10 hours ago
#5
kero990

我倒一直很想玩龙芯机器,但我没有

最近几个月闲鱼冒出大量龙芯3A5000机型,据说是军队信创淘汰的,但都有全套包装。

不带内存和硬盘的准系统只卖299,是的你没看错,299

但问题是这不是去年了,现在插两条内存插个固态,总开销要上千,遂作罢。

机器倒是真便宜啊

前几天买了一台联想开天的m70d g1s准系统,1200,从鲲鹏920机器上拆了内存和硬盘安装上去的。

现有的龙芯生态绝大部分都是围绕旧世界展开的,新世界还没商业化,生态非常贫瘠。

也没有明确的硬件适配清单,什么兼容什么不兼容,基本靠搜帖子和运气。

Reply View the author
avatar
kero990
deepin
9 hours ago
#6
MeGusta

前几天买了一台联想开天的m70d g1s准系统,1200,从鲲鹏920机器上拆了内存和硬盘安装上去的。

现有的龙芯生态绝大部分都是围绕旧世界展开的,新世界还没商业化,生态非常贫瘠。

也没有明确的硬件适配清单,什么兼容什么不兼容,基本靠搜帖子和运气。

其实我看龙芯合作社里,软件还挺多的,只是龙芯历史包袱重,一会mips,一会新旧世界的。

按你这个说法,他可能设备适配都有很大问题,软件适配还早着

虽然debian14把龙芯当主要发布架构,这能带来大量基础包。但同样的问题,还是要抛弃历史包袱才行,谁知道debian14的glibc干到哪去了。

Reply View the author
avatar
MeGusta
deepin
8 hours ago
#7
kero990

其实我看龙芯合作社里,软件还挺多的,只是龙芯历史包袱重,一会mips,一会新旧世界的。

按你这个说法,他可能设备适配都有很大问题,软件适配还早着

虽然debian14把龙芯当主要发布架构,这能带来大量基础包。但同样的问题,还是要抛弃历史包袱才行,谁知道debian14的glibc干到哪去了。

龙芯合作社的应用我看好多都是旧世界(abi1.0)的,然后下载它的abi2.0的合作社客户端,还缺pyqt6依赖。等编译完依赖了,安装上了,才发现这个坑,还不如星火商店呢。

前几天我玲珑打包一个.net10程序,玲珑只支持新世界。在龙芯官网下载了.net10 sdk,结果一看是旧世界,我还以为只有旧世界的.net10 sdk,然后折腾了半宿的liblol,好歹跑起来了。

然而昨天晚上又四处搜索了一下,原来有新世界版本的.net10 sdk,但是只在github里面发布,而且也不说到底是新世界还是旧世界,只能下载下来,分析elf的字节码才知道是新世界,我x。。。

我觉得龙芯生态要全面铺开,还得等Debian 14,不过到时候的glibc版本也得到2.4x,只能自己编译了吧。

Reply View the author
avatar
kero990
deepin
8 hours ago
#8
MeGusta

龙芯合作社的应用我看好多都是旧世界(abi1.0)的,然后下载它的abi2.0的合作社客户端,还缺pyqt6依赖。等编译完依赖了,安装上了,才发现这个坑,还不如星火商店呢。

前几天我玲珑打包一个.net10程序,玲珑只支持新世界。在龙芯官网下载了.net10 sdk,结果一看是旧世界,我还以为只有旧世界的.net10 sdk,然后折腾了半宿的liblol,好歹跑起来了。

然而昨天晚上又四处搜索了一下,原来有新世界版本的.net10 sdk,但是只在github里面发布,而且也不说到底是新世界还是旧世界,只能下载下来,分析elf的字节码才知道是新世界,我x。。。

我觉得龙芯生态要全面铺开,还得等Debian 14,不过到时候的glibc版本也得到2.4x,只能自己编译了吧。

没错,龙芯的dotnet就是这样的,或者应该反过来说,你在github上只能下到新世界的,要旧世界版只有厂商提供。

但是没用,就算是你有了dotnet本体,一编译什么东西就遇到Nuget仓库里的包没有龙芯版,除非你一个一个依赖一路编译过去。龙芯也不可能把整个Nuget搬过去。

Reply View the author