Fontconfig

参考资料:
Font configuration

Fontconfig 是一个用于向应用程序提供可用的字体列表,以及字体渲染配置的库。

Fontconfig 的默认字体路径是 /usr/share/fonts/~/.local/share/fonts(以及过时的 ~/.fonts/)。Fontconfig 将在这些路径下递归查找字体。

用户配置文件位于 $XDG_CONFIG_HOME/fontconfig/fonts.conf 中(通常是 $HOME/.config/fontconfig/fonts.conf)。全局配置文件位于 /etc/fonts/local.conf。 用户配置优先级高于全局配置。两个文件使用相同的语法。
Fontconfig 配置文件使用 XML 格式,其需要的头部如下:

1
2
3
4
5
6
7
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>

<!-- settings go here -->

</fontconfig>

中文字体显示奇怪

June 4, 2024

本次更新后中文不再是 Noto Sans 字体,变成了更细、发虚的字体(各种意义上太难看了

Arch论坛看了下:
由于近期 noto-fonts-cjk 打包变化,导致默认CJK回落字体不再是 Noto 系列字体。详情

解决方案:
在 ~/.config/fontconfig/ 下 新建一个字体文件(xxx.conf),让 Noto Sans CJK SC 优先使用即可:
参考:修正简体中文显示为异体(日文)字形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<alias>
<family>sans-serif</family>
<prefer>
<family>Noto Sans CJK SC</family>
<family>Noto Sans CJK TC</family>
<family>Noto Sans CJK JP</family>
</prefer>
</alias>
<alias>
<family>monospace</family>
<prefer>
<family>Noto Sans Mono CJK SC</family>
<family>Noto Sans Mono CJK TC</family>
<family>Noto Sans Mono CJK JP</family>
</prefer>
</alias>
</fontconfig>

Waydroid

没有waydroid,我怎么玩碧蓝航线啊(悲

ERROR: Can’t open /dev/binder: No such file or directory

December 24, 2024

更新后发现 waydroid 挂了,表现为 waydroid session start 出错:

1
2
[13:02:43] Failed to add presence handler: None  
[gbinder] ERROR: Can't open /dev/binder: No such file or directory

看看 binder_linux-dkms 貌似也没啥问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ pacman -Qi binder_linux-dkms-git
名字           : binder_linux-dkms-git
版本           : r57.ee4c25f-3
描述           : Android kernel driver fork by @choff in DKMS format, binder only
架构           : any
URL            : https://github.com/choff/anbox-modules
软件许可       : GPL-2.0-only
组             : 无
提供           : 无
依赖于         : dkms
可选依赖       : 无
依赖它         : 无
被可选依赖     : 无
与它冲突       : binder_linux-dkms  anbox-modules-dkms
取代           : binder_linux-dkms
安装后大小     : 279.35 KiB
打包者         : lilac-alarm (on behalf of i7arch) <i7arch@member.fsf.org>
编译日期       : 2024年10月03日 星期四 19时16分59秒
安装日期       : 2024年10月07日 星期一 19时46分44秒
安装原因       : 单独指定安装
安装脚本       : 否
验证者         : SHA-256 校验值  数字签名

去论坛看了下发现上周core/linux已经启用了 binderfs 的MR合并,那可能是冲突了?然而卸载了binder_linux-dkms-git并没有成功启动。

最后根据waydroid文档的建议,尝试重置镜像之后就能正常使用了。

1
$ sudo waydroid init -f

[gbinder] Service manager /dev/anbox-binder has appeared

January 18, 2025

今天重装了系统,发现Waydroid是挂的,一直在启动中挂起:

1
2
3
4
$ waydroid session start

[11:22:15] Starting waydroid session
[gbinder] Service manager /dev/anbox-binder has appeared

日志里只有lxc的地方看上去有点奇怪,但是我看不懂(

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
$ waydroid log
(000837) [22:08:19] % mkdir -p /dev/binderfs
(000837) [22:08:19] % mount -t binder binder /dev/binderfs
(000837) [22:08:19] % ln -s /dev/binderfs/anbox-hwbinder /dev/binderfs/anbox-vndbinder /dev/binderfs/anbox-binder /dev/binderfs/features /dev/binderfs/binder-control /dev/
(000837) [22:08:19] Save config: /var/lib/waydroid/waydroid.cfg
(000837) [22:08:19] % modprobe -q ashmem_linux
(000837) [22:08:19] % lxc-info --version
6.0.3
(000837) [22:08:19] % mkdir -p /var/lib/waydroid/lxc/waydroid
(000837) [22:08:19] % sh -c cat "/usr/lib/waydroid/data/configs/config_base" "/usr/lib/waydroid/data/configs/config_3" "/usr/lib/waydroid/data/configs/config_4" > "/var/lib/waydroid/lxc/waydroid/config"
(000837) [22:08:19] % sed -i s/LXCARCH/x86_64/ /var/lib/waydroid/lxc/waydroid/config
(000837) [22:08:19] % cp -fpr /usr/lib/waydroid/data/configs/waydroid.seccomp /var/lib/waydroid/lxc/waydroid/waydroid.seccomp
(000837) [22:08:19] % systemctl is-active -q apparmor
(000837) [22:08:19] % mv /var/lib/waydroid/config_nodes /var/lib/waydroid/lxc/waydroid
(000592) [22:08:19] % lxc-info -P /var/lib/waydroid/lxc -n waydroid -sH
STOPPED
(000592) [22:08:19] % modprobe -q ashmem_linux
(000592) [22:08:19] % chmod 666 -R /dev/anbox-binder
(000592) [22:08:19] % chmod 666 -R /dev/anbox-vndbinder
(000592) [22:08:19] % chmod 666 -R /dev/anbox-hwbinder
(000592) [22:09:15] % /usr/lib/waydroid/data/scripts/waydroid-net.sh start
vnic is waydroid0
(000592) [22:09:15] % systemctl is-active -q nfcd
(000592) [22:09:15] % chmod 777 -R /dev/dri
(000592) [22:09:15] % chmod 777 -R /dev/fb0
(000592) [22:09:15] % chmod 777 -R /dev/video0
(000592) [22:09:15] % chmod 777 -R /dev/video1
(000592) [22:09:15] % mv /var/lib/waydroid/config_session /var/lib/waydroid/lxc/waydroid
(000592) [22:09:15] % mount -o ro /usr/share/waydroid-extra/images/system.img /var/lib/waydroid/rootfs
(000592) [22:09:15] % mkdir -p /var/lib/waydroid/overlay_work/system
(000592) [22:09:15] % mount -t overlay -o ro,lowerdir=/var/lib/waydroid/overlay:/var/lib/waydroid/rootfs,upperdir=/var/lib/waydroid/overlay_rw/system,workdir=/var/lib/waydroid/overlay_work/system,xino=off overlay /var/lib/waydroid/rootfs
(000592) [22:09:15] % mount -o ro /usr/share/waydroid-extra/images/vendor.img /var/lib/waydroid/rootfs/vendor
(000592) [22:09:15] % mkdir -p /var/lib/waydroid/overlay_work/vendor
(000592) [22:09:15] % mount -t overlay -o ro,lowerdir=/var/lib/waydroid/overlay/vendor:/var/lib/waydroid/rootfs/vendor,upperdir=/var/lib/waydroid/overlay_rw/vendor,workdir=/var/lib/waydroid/overlay_work/vendor,xino=off overlay /var/lib/waydroid/rootfs/vendor
(000592) [22:09:15] % mount -o bind /var/lib/waydroid/waydroid.prop /var/lib/waydroid/rootfs/vendor/waydroid.prop
(000592) [22:09:15] Save config: /var/lib/waydroid/waydroid.cfg
(000592) [22:09:15] % lxc-start -P /var/lib/waydroid/lxc -F -n waydroid -- /init
(000592) [22:09:15] New background process: pid=1129, output=background
(000592) [22:09:15] % lxc-info -P /var/lib/waydroid/lxc -n waydroid -sH
RUNNING
(001076) [22:09:15] Skipping clipboard manager service because of missing pyclip package
(001577) [22:09:41] % tail -n 60 -F /var/lib/waydroid/waydroid.log
(001577) [22:09:41] *** output passed to waydroid stdout, not to this log ***

排查了很久,根本找不到问题所在。直到我尝试用软解成功启动waydroid。那肯定是显卡的问题。有点纳闷我寻思也是混合模式啊,不应该是优先核显嘛…
而且检查结果也没问题。

1
2
$ glxinfo | grep 'OpenGL renderer'
OpenGL renderer string: AMD Radeon 680M (radeonsi, rembrandt, LLVM 19.1.6, DRM 3.59, 6.12.9-arch1-1)

看着waydroid的默认配置,我还是觉得和显卡有关,但是死活找不出原因(

1
2
3
4
5
6
7
8
9
10
11
12
13
/var/lib/waydroid/waydroid_base.prop
------------------------------------
sys.use_memfd=true
debug.stagefright.ccodec=0
ro.hardware.gralloc=gbm
ro.hardware.egl=mesa
ro.hardware.vulkan=radeon
ro.hardware.camera=v4l2
ro.opengles.version=196609
waydroid.system_ota=https://ota.waydro.id/system/lineage/waydroid_x86_64/VANILLA.json
waydroid.vendor_ota=https://ota.waydro.id/vendor/waydroid_x86_64/MAINLINE.json
waydroid.tools_version=1.4.3
ro.vndk.lite=true

直到我看到了一个issues:
[gbinder] Service manager /dev/anbox-binder has appeared than hangs

eglinfo看了下,已经确定是同一个问题,内核早加载的时候,优先使用了Nvidia

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ eglinfo -B
GBM platform:
EGL API version: 1.5
EGL vendor string: NVIDIA
EGL version string: 1.5
EGL client APIs: OpenGL_ES OpenGL
OpenGL core profile vendor: NVIDIA Corporation
OpenGL core profile renderer: NVIDIA GeForce RTX 3060 Laptop GPU/PCIe/SSE2
OpenGL core profile version: 4.6.0 NVIDIA 565.77
OpenGL core profile shading language version: 4.60 NVIDIA
OpenGL compatibility profile vendor: NVIDIA Corporation
OpenGL compatibility profile renderer: NVIDIA GeForce RTX 3060 Laptop GPU/PCIe/SSE2
OpenGL compatibility profile version: 4.6.0 NVIDIA 565.77
OpenGL compatibility profile shading language version: 4.60 NVIDIA
OpenGL ES profile vendor: NVIDIA Corporation
OpenGL ES profile renderer: NVIDIA GeForce RTX 3060 Laptop GPU/PCIe/SSE2
OpenGL ES profile version: OpenGL ES 3.2 NVIDIA 565.77
OpenGL ES profile shading language version: OpenGL ES GLSL ES 3.20
...

解决办法是,在 /etc/mkinitcpio.conf 的HOOK数组上添加回来 kms ,并重做 mkinitcpio ,重启之后,gbm就会优先让AMD工作。最后再重置waydroid镜像就正常工作了

在HOOK数组删 kms 模块的原因
但是当我加上 kms 后,也没在 journalctl -b 找到 nouveau 的东西,估计没啥大问题。

镜像Bug

May 20, 2025

今天久违更新了镜像,发现 adb shell wm size 1280x720 后鼠标触摸出错,只能点击部分区域(1280x720大小),应该是把Los20版本的一些东西搞到Los18版本出现的不兼容。

解决方法是回到推出Los20测试镜像前的Los18镜像,即版本时间线为2025-04-13的system和vendor。

关于如何自定义镜像版本:
https://docs.waydro.id/faq/using-custom-waydroid-images

屏幕刷新率

February 04, 2025

今天更新后发现核显的刷新率只能以60HZ显示了(习惯了240HZ看60HZ真难受)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ wlr-randr
eDP-1 "Thermotrex Corporation TL160ADMP11-0 (eDP-1)"
Make: Thermotrex Corporation
Model: TL160ADMP11-0
Serial: (null)
Physical size: 350x220 mm
Enabled: yes
Modes:
2560x1600 px, 60.000000 Hz (preferred, current)
1920x1200 px, 60.000000 Hz
1920x1080 px, 60.000000 Hz
1600x1200 px, 60.000000 Hz
1680x1050 px, 60.000000 Hz
1280x1024 px, 60.000000 Hz
1440x900 px, 60.000000 Hz
1280x800 px, 60.000000 Hz
1280x720 px, 60.000000 Hz
1024x768 px, 60.000000 Hz
800x600 px, 60.000000 Hz
640x480 px, 60.000000 Hz
Position: 0,0
Transform: normal
Scale: 1.500000
Adaptive Sync: disabled
1
2
$ uname -a
Linux ATRI 6.13.1-arch1-1 #1 SMP PREEMPT_DYNAMIC Sun, 02 Feb 2025 01:02:29 +0000 x86_64 GNU/Linux

切换了一下内核发现又能核显240HZ了,估计是内核的bug。不太懂,摆了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ wlr-randr
eDP-1 "Thermotrex Corporation TL160ADMP11-0 (eDP-1)"
Make: Thermotrex Corporation
Model: TL160ADMP11-0
Serial: (null)
Physical size: 350x220 mm
Enabled: yes
Modes:
2560x1600 px, 239.998001 Hz (preferred, current)
2560x1600 px, 59.999001 Hz (preferred)
1920x1200 px, 239.998001 Hz
1920x1080 px, 239.998001 Hz
1600x1200 px, 239.998001 Hz
1680x1050 px, 239.998001 Hz
1280x1024 px, 239.998001 Hz
1440x900 px, 239.998001 Hz
1280x800 px, 239.998001 Hz
1280x720 px, 239.998001 Hz
1024x768 px, 239.998001 Hz
800x600 px, 239.998001 Hz
640x480 px, 239.998001 Hz
Position: 0,0
Transform: normal
Scale: 1.500000
Adaptive Sync: disabled
1
2
$ uname -a
Linux ATRI 6.12.12-1-lts #1 SMP PREEMPT_DYNAMIC Sat, 01 Feb 2025 18:47:29 +0000 x86_64 GNU/Linux

August 20, 2025
七月的某次更新修复了这个问题,具体内容有点忘记了,做个结果补记一下

/home挂载失败

开机显示

貌似是硬盘的问题,但是其他分区能挂载,应该不是整个盘炸了

由开机时的报错提示看应该是 /home 出了问题

1
[FAILED] Failed to start File System Check on /dev/disk/by-uuid/0d34532b-4120-4ad6-8153-e208696ac4f1. See 'systemctl status "systemd-fsck@dev-disk-by\\x2duuid-0d34532b\\x2d4120\\x2d4ad6\\x2d8153\\x2de208696ac4f1.service"' for details. [DEPEND] Dependency failed for /home. [DEPEND] Dependency failed for Local File Systems. [ OK ] Started D-Bus User Bus.

挂载失败?使用 blkid 对比了/etc/fstab上的UUID好像也没问题。

1
2
3
4
5
6
7
8
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:5 0 1.9T 0 disk /mnt/data
nvme1n1 259:0 0 931.5G 0 disk
├─nvme1n1p1 259:1 0 1G 0 part /boot
├─nvme1n1p2 259:2 0 32G 0 part [SWAP]
├─nvme1n1p3 259:3 0 128G 0 part /
└─nvme1n1p4 259:4 0 770.5G 0 part

使用 mount -a 查看显示分区出现错误,奇怪的是再次使用 lsblk 查看又能挂载了(重试了几次发现是 mount -a 命令导致的,并且使用 mount -a 一次之后再次使用将不显示分区出现错误,检测不出错误了)

1
2
3
4
5
6
7
8
9
10
11
# mount -a
[ 34.606814] EXT4-fs (nvme1n1p4): warning: mounting fs with errors, running e2fsck is recommended

# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme1n1 259:0 0 931.5G 0 disk
├─nvme1n1p1 259:1 0 1G 0 part /boot
├─nvme1n1p2 259:2 0 32G 0 part [SWAP]
├─nvme1n1p3 259:3 0 128G 0 part /
└─nvme1n1p4 259:4 0 770.5G 0 part /home
nvme0n1 259:5 0 1.9T 0 disk /mnt/data

按提示使用e2fsck(Linux 系统中用于检查和修复 ext2、ext3、ext4 文件系统的命令行工具)

由于薛定谔的挂载,还是手动卸载挂载 /home

1
# umount /dev/nvme0n1p4

然后使用工具修复

1
2
3
4
# e2fsck -y /dev/nvme0n1p4
......
/dev/nvme0n1p4: ***** FILE SYSTEM WAS MODIFIED *****
/dev/nvme0n1p4: 309933/50503680 files (1.3% non-contiguous), 17569752/201985024 blocks

重启完事

原因猜测:
这几天我没有进行系统更新啥的,也没有修改系统设置。
唯一让我觉得有关联的事情就是,前段时间宿舍频繁停电,可能埋下了问题。
也有可能是其他原因。