LOADING...

加载过慢请开启缓存(浏览器默认开启)

loading

容器的 GUI 应用假死

都是在疫情的阴霾下,去年遇见的基本是 Linux 内核的问题,今年遇见基本是 Linux 容器的问题,年年变着花样出问题,着实是不省心。

前段时间,NAS 上的 Debian 刚 apt upgrade 后,Lxd 的容器就上不了网,后面排查了很久,才知道 Lxd 并不是固定使用 iptable 或者是 nftables,也不能自己去设定,而是有自己一套优先规则。而恰好 Debian 这发行版很容易为用户做过多的配置,所以系统在更新后配置可以使用 iptables,但是默认自动改为 nftables 导致了 Lxd 的容器上不了网。

最近,ITX 的 Gentoo 也 emerge world,系统并没有任何错误提示,但是在之后启动 Lxd 里的 GUI 应用后,却发现一个极其奇怪的问题:图形界面的 UI 在重绘的时候,界面总是会假死几秒,但是不管是 OpenGL 或者是播放高清电影都能很流畅。

这是个诡异的问题,涉及到图形界面,一开始以为又是 nvidia 的驱动问题,升降驱动后发现没有效果,便感觉是 libcontainer-nvidia-toolkit 的问题,毕竟容器的 GPU 是由它做中介提供的,后面改用容器打驱动的形式,发现问题依旧。检查了很多用户的配置和环境变量,清除了很多缓存,都没能见效。因为本身我对 Gentoo 的 USE 是全局 -gtk 的,而且我在 Lxd 里面使用的也是 GTK 的界面,是以也试了容器里面的 QT 程序,发现一样的问题,那就不是 USE 的问题了。创建了一个新的用户帐号来运行,还是没能解决。然后新 emerge 了一个窗口管理器,发现在窗口管理器下并不会出现这种问题。

好像是找到问题解决的方向了,是 KDE 的问题。跟图形界面相关的,会引起界面假死的,最大的可能就是特效和混合管理器。关闭了特效后并没有改善问题,但是关闭混合管理器,假死的时间却缩短了三分之二,这让我一度以为是混合管理器的问题,但是缩短的时间并不能让我觉得问题获取到正确的答案,就是是在找不到一个可以挖掘出正确答案的方向。

阴差阳错的,今天因为配置 Samba 的 WINS,黑苹果、Windows 和 Android 都能识别到主机名字,就 Linux 自己识别不到自己的主机名字,然后就折腾了下 hostname,结果反倒把该问题解决了:KDE 本身对于 hostname 有自己的一套规则,要么删除 /etc/hostname,要么得改成 aaa.bbb 的形式,可是很多发行版默认就是 aaa 的形式,如 Debian,当然发行版之间的 hostnamectl 命令和 domainnamehostname 命令对于相同的 aaa.bbb 域名的结果都是有差异的。

真的没想到,关于图形界面,主机的没任何问题,容器的也只是 UI 组件重绘才有会假死,视频和硬件加速等都是正常,居然是因为主机名的格式问题,而且还是常见的格式出的问题,实在太不能理解了。