fix(chromium): 升级实例后黑屏崩溃循环 —— 强制 device-scale-factor=1

回归根因(v1.3.0 实例镜像重建时 apt 拉到 Chromium 149 引入,非某个 PR 的代码 bug):
较新 Chromium(≥149)在 KasmVNC 尚无客户端连接、Xvnc 分辨率/DPI 为退化值时,
device-scale-factor 读成 0 → 合成器算出的显示变换矩阵不可逆(transform.cc NOTREACHED)
→ GPU/viz 进程连崩 3 次 → "GPU process isn't usable. Goodbye." → 浏览器退出 →
autostart 每 2s 重启 → 死循环黑屏(只有鼠标、无窗口)。旧版 Chromium 容忍退化分辨率,149 变严格才暴露。

修复:Chromium 启动加 --force-device-scale-factor=1,强制缩放为 1 使变换矩阵可逆,从根上消除崩溃。
仅影响 Chromium 实例;微信(自带 CEF)与旧镜像不受影响。

验证:新镜像一次性容器(最坏情形:无客户端连接、分辨率退化)下 chromium 30s 零退出、
窗口正常显示(修复前每 2s 崩一次、诊断包里 173/58 次退出)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Gloridust
2026-07-05 16:33:41 +08:00
parent db894cfcff
commit 72a34ac7b0

View File

@@ -15,8 +15,13 @@ woc_app_def() {
# --disable-background-networking关掉 Chromium 后台 phone-homeGCM 推送 / 组件更新 / 变体下载),
# 在受限网络NAS / 被墙)下这些会反复失败刷屏 "gcm ConnectionHandler failed net error: -2"。
# 只影响后台流量,不影响前台网页加载与真实网络错误提示。
# 稳定性关键v1.3.1,修复升级实例后黑屏回归):较新 Chromium≥149在本极简容器里当 KasmVNC 的 Xvnc
# 尚无客户端连接时分辨率/DPI 为退化值xrandr 显示空、device-scale-factor 读成 0→ 合成器算出的显示变换矩阵
# [0 0 0 0; 0 0 0 0; …] 不可逆 → transform.cc NOTREACHED → GPU/viz 进程连崩 3 次 → "GPU process isn't usable.
# Goodbye." 整个浏览器退出 → autostart 每 2s 重启 → 死循环黑屏(只有鼠标、无窗口)。旧版 Chromium 能容忍退化
# 分辨率149 变严格才暴露。--force-device-scale-factor=1 强制缩放为 1使变换矩阵可逆从根上消除该崩溃。
APP_BIN=/usr/bin/chromium
APP_LAUNCH="$APP_BIN --no-sandbox --no-first-run --no-default-browser-check --start-maximized --password-store=basic --disable-gpu --disable-background-networking --user-data-dir=/config/chromium"
APP_LAUNCH="$APP_BIN --no-sandbox --no-first-run --no-default-browser-check --start-maximized --password-store=basic --disable-gpu --force-device-scale-factor=1 --disable-background-networking --user-data-dir=/config/chromium"
APP_NAME=Chromium
;;
custom)