Files
WechatOnCloud/docker/app-defs.sh
Gloridust 72a34ac7b0 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>
2026-07-05 16:33:41 +08:00

40 lines
2.4 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 应用定义(被 autostart 与 app-ctl.sh source。给定应用类型输出该应用的
# APP_BIN — 可执行文件路径autostart 据此判断"是否就绪/已安装"
# APP_LAUNCH — 启动命令可带参数autostart 以 word-split 方式执行,参数勿含空格)
# APP_NAME — 显示名(日志用)
# 缺省/未知类型一律回退微信保证老实例零改动。v1.2.0 多应用平台。
woc_app_def() {
case "${1:-wechat}" in
telegram)
APP_BIN=/config/telegram/Telegram
APP_LAUNCH="$APP_BIN"
APP_NAME=Telegram
;;
chromium)
# 容器内无 user namespace / GPU--no-sandbox + 软件渲染;--password-store=basic 免 keyring 弹窗。
# --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 --force-device-scale-factor=1 --disable-background-networking --user-data-dir=/config/chromium"
APP_NAME=Chromium
;;
custom)
# 自定义:启动命令由面板写入 .woc-app 的 WOC_CUSTOM_LAUNCH用户上传安装包后设定
APP_LAUNCH="${WOC_CUSTOM_LAUNCH:-}"
APP_BIN="${WOC_CUSTOM_BIN:-}"
APP_NAME="自定义应用"
;;
*)
APP_BIN=/config/wechat/opt/wechat/wechat
APP_LAUNCH="$APP_BIN"
APP_NAME=微信
;;
esac
}