[Bug Report] N卡设备升级后微信等玲珑应用全部无法启动问题定位分析
Tofloor
poster avatar
chenkun_lws
deepin
2026-09-29 01:36
Author

排查日期:2026-09-28/29 · 系统:deepin 25(磐石不可变系统,9月28 日系统更新后出现)
状态:根因已定位,已提交上游 issue(linyaps-box#265),用户侧有临时自救方法。
发帖目的:① 给同样中招的 N 卡用户一个立即可用的恢复方法;② 向官方反馈根因与修复方向。


一、现象

9 月 28 日晚系统更新(aptss full-upgrade)并重启后:

  • 启动器里点击微信图标完全没反应——不只是微信,通达信、日历、相册、计算器等所有玲珑应用全部无法启动;
  • 启动器里部分玲珑应用图标消失(桌面/任务栏图标失效);
  • 终端手动启动也一样失败:
$ ll-cli run org.deepin.calculator
Error -1: InitRunContext failed

快速自查你是否是同一个问题:终端执行上面这条命令,如果同样报 InitRunContext failed,且你的机器装有 NVIDIA 独立显卡,基本就是本帖描述的问题。deb 安装的应用(浏览器等)不受影响。

同类报告:《更新最新版微信后无法启动,点击没有反应》(9月28 日,症状一致但帖内未确诊)——如果你也是同样情况,可按本帖第三节自救。


二、根因(已用三层证据确认)

简单说:新版玲珑给每个容器注入了一个 NVIDIA 显卡钩子(hook),而玲珑的容器运行时 ll-box 在给这个钩子传递数据时把数据弄断了,钩子一读发现数据不完整就拒绝工作,于是每个容器都启动失败。

具体链条:

  1. 9 月中旬起,玲珑上游改用 NVIDIA 官方的 Container Toolkit(CDI 机制)做显卡透传(见社区 9 月 15 日《玲珑NVIDIA驱动透传机制更新说明》),本次更新后 nvidia-container-toolkit 被自动安装,开机自动生成显卡设备描述文件 /run/cdi/nvidia.yaml,玲珑随后给每一个容器自动注入显卡 hook(/usr/bin/nvidia-cdi-hook)——这就是所有应用(包括根本不需要显卡的计算器)都遭殃的原因;
  2. 容器启动时,运行时 ll-box 需要把"容器状态"(一段 JSON)通过 hook 的标准输入传给它。ll-box 2.3.4 用了一种叫 SEQPACKET 的通道来传,这种通道会丢弃超过接收方一次读取量的数据——其源码注释里本身就挂着 FIXME 承认这一点,并指出 runc/youki/crun 等同类运行时都用普通管道(pipe)传输;
  3. hook 读到的是被截断的 JSON,报错 failed to decode container state: unexpected EOF 并退出,ll-box 判定 hook 失败,于是每一个容器都在启动阶段被中止——表现为所有玲珑应用"点了没反应"。

服务端实际错误日志(通过 systemd 日志重定向捕获):

level=error msg="failed to load container state: failed to decode container state: unexpected EOF"
[ERROR] [container.cpp:2476 run]: failed to run a container, caused by:
        hook /usr/bin/nvidia-cdi-hook failed with exit code 1

我还用最精简的容器配置在本地复现了完全相同的错误(复现脚本已附在上游 issue 中),排除了内核升级、系统沙箱配置、软件包误删等其他嫌疑。


三、临时自救方法(已实测有效)

原理:在玲珑的全局配置里把"请求注入的设备"显式置空,玲珑就不再给容器注入显卡 hook,应用即可正常启动。

一条命令完成(用 python 合并字段,不会破坏文件里已有的其他配置):

sudo python3 -c "
import json
p='/etc/linglong/config.json'
cfg=json.load(open(p))
cfg['devices']=[]
json.dump(cfg,open(p,'w'),indent=4,ensure_ascii=False)
print(json.load(open(p)))"

执行后无需重启,直接启动微信/计算器验证即可(首次启动稍慢属正常,启动器里消失的图标稍后也会自动恢复,若没出现可注销重登)。

注意事项:

  • ⚠️ 不要图省事直接 echo 覆盖 /etc/linglong/config.json——文件里还有系统既有配置(device_mode/disable_xdp 等),覆盖会丢配置;
  • 影响:玲珑应用暂时失去显卡加速——微信、通达信、计算器这类 2D 应用完全无感;仅玲珑浏览器播放在线视频时会退回 CPU 软解(更费电)。docker 里的显卡用法(如 AI 模型推理)走的是另一条独立路径,不受影响;
  • 官方修复 ll-box 后,删除该行配置即可恢复显卡透传:
sudo python3 -c "
import json
p='/etc/linglong/config.json'
cfg=json.load(open(p))
cfg.pop('devices', None)
json.dump(cfg,open(p,'w'),indent=4,ensure_ascii=False)"

验证恢复:ll-cli run org.deepin.calculator -- ls /dev/nvidia0(能列出设备节点即透传已恢复)。


四、给官方的建议

  1. 建议按最高优先级修复 ll-box 的 hook 数据传输:该缺陷(execute_hook 用 SEQPACKET 传 state JSON)叠加玲珑 1.14 的 CDI 自动透传,会导致所有装有 N 卡的设备在更新后玲珑应用全体瘫痪(含日历、相册等系统组件),影响面极大。修复方向上游已知:改用普通 pipe 传输(runc/youki/crun 均如此);上游 issue 已建:linyaps-box#265,附零依赖最小复现脚本;
  2. 修复版本推送前,建议在更新说明中给 N 卡用户明示临时 workaround(本帖第三节),减少集中反馈;
  3. 建议补一个回归测试:让 hook 从 stdin 读取超过其单次读缓冲大小(>8K)的 state JSON——当前缺陷正是因为缺少这一路径的覆盖而流出的;
  4. 次要:linglong-box 的 deb 依赖未包含 uidmap(非恒等映射场景需要 newuidmap),建议补上 Depends 或 Recommends。

五、环境信息

  • 系统:deepin 25(磐石不可变系统),2026-09-28 晚 aptss full-upgrade 后出现
  • 硬件:双 NVIDIA 显卡,驱动 580.119.02(dkms 已为当前内核正常构建,nvidia-smi 正常——显卡驱动本身没有问题)
  • 相关组件版本:linyaps(linglong-bin)1.14.3、ll-box(linglong-box)2.3.4、nvidia-container-toolkit 1.20.1
  • 背景:本次属 25.2.2 玲珑专项更新(9 月 20/22/24 日已连推三轮修复"应用无法启动/图标丢失",见官方更新公告)的最新一波
Reply Favorite View the author
All Replies
avatar
deepin流云
Super Moderator
Community OP
2026-09-29 09:49
#1

这个问题已经报给玲珑团队在复现排查了,如果确定会尽快修复。

同类报告:《更新最新版微信后无法启动,点击没有反应》(9月28 日,症状一致但帖内未确诊)——如果你也是同样情况,可按本帖第三节自救。

这个帖子的情况和你反馈的不一样,该用户是海思处理器的机器,只能用UOS,海思用不了N卡,而且海思上没有玲珑的

Reply View the author
avatar
chenkun_lws
deepin
2026-10-01 10:23
#2
deepin流云:

这个问题已经报给玲珑团队在复现排查了,如果确定会尽快修复。

同类报告:《更新最新版微信后无法启动,点击没有反应》(9月28 日,症状一致但帖内未确诊)——如果你也是同样情况,可按本帖第三节自救。

这个帖子的情况和你反馈的不一样,该用户是海思处理器的机器,只能用UOS,海思用不了N卡,而且海思上没有玲珑的

ok,希望下个小版本可以修复

Reply View the author
avatar
Signal
deepin
2026-10-06 18:41
#3
deepin流云:

这个问题已经报给玲珑团队在复现排查了,如果确定会尽快修复。

同类报告:《更新最新版微信后无法启动,点击没有反应》(9月28 日,症状一致但帖内未确诊)——如果你也是同样情况,可按本帖第三节自救。

这个帖子的情况和你反馈的不一样,该用户是海思处理器的机器,只能用UOS,海思用不了N卡,而且海思上没有玲珑的

请问大佬,这个问题大致什么时候可以修复?

Reply View the author
avatar
deepin流云
Super Moderator
Community OP
2026-10-08 17:10
#4
Signal:

请问大佬,这个问题大致什么时候可以修复?

我私信你了,研发需要环境验证下修复情况。

Reply View the author
avatar
deepin流云
Super Moderator
Community OP
2026-10-08 17:10
#5
chenkun_lws:

ok,希望下个小版本可以修复

我私信你下,研发需要环境验证下。

Reply View the author
avatar
chenkun_lws
deepin
2026-10-12 22:25
#6

2026-10-12 更新:官方开发人员提供了修复验证包 linglong-box 2.3.5-1(上游 commit 7f42f5f,hook stdin 由 SEQPACKET 改为 pipe),已在本机验证通过——撤销 devices:[] 后 nvidia-cdi-hook 正常执行,/dev/nvidia0 等节点透传恢复,玲珑应用 GUI 启动也正常。正式版推送后,用过本文"临时自救方法"的 N 卡用户按"撤销方法"恢复即可。

Reply View the author