Files
WechatOnCloud/docker/woc-dark.sh
Gloridust 335b839e9a feat(dark): 面板/实例统一深色开关(portal 实时切换)+ 修复 KasmVNC 致命崩溃自愈
实例深色不再靠 GTK_THEME(微信 Chromium 内核不吃),改用 freedesktop 桌面 portal:
每个实例常驻 session D-Bus + xdg-desktop-portal(gtk 后端) + dconf(固定总线地址),
面板顶栏主题开关(管理员)统一控制面板 + 实例深色,持久化进 accounts.json,并对运行中实例
docker exec woc-dark.sh 实时切换 color-scheme(微信据 SettingChanged 实时重绘),无需改 env。

- docker/Dockerfile: 装 xdg-desktop-portal(+gtk) / dconf / gsettings / dbus-x11(单独成层)
- docker/autostart: woc_setup_portal 常驻 portal,初始明暗由 WOC_DARK 决定
- docker/woc-dark.sh: 面板经 exec 调用,实时改 gsettings color-scheme
- store.ts: 持久化 desktopDark;docker.ts: envList 读它 + setInstanceDark;index.ts: /api/desktop-theme
- AppShell 主题开关接 setDesktopTheme(含 auto 跟随系统联动);移除 WOC_INSTANCE_DARK env

KasmVNC 客户端 bundle 长跑空闲后偶发 'lastActiveAt' 致命崩溃 → 仅在其致命错误浮层出现时
做一次干净整页重载(安全重连路径,非激进 churn),5min 限 4 次防死循环。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 02:11:47 +08:00

34 lines
1.4 KiB
Bash
Raw 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.

#!/bin/bash
# 实时切换本实例桌面深色(由面板经 docker exec 以 app 用户身份调用woc-dark.sh on|off
# 原理:改 GNOME color-schemedconf 共享后端)→ 与 autostart 同一条 session 总线上的 xdg-desktop-portal
# 收到变化、对外发 org.freedesktop.appearance→color-scheme 的 SettingChanged → 微信等 Chromium 系应用实时重绘。
# 须与 autostart 用完全相同的 XDG_RUNTIME_DIR / 总线地址,否则改的不是同一个 dconf、portal 读不到。
set -u
uid="$(id -u)"
export XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR:-/tmp/woc-run-${uid}}"
export DBUS_SESSION_BUS_ADDRESS="${DBUS_SESSION_BUS_ADDRESS:-unix:path=${XDG_RUNTIME_DIR}/woc-bus}"
case "${1:-}" in
on | 1 | dark | true)
scheme='prefer-dark'
gtk='Adwaita-dark'
;;
*)
scheme='default'
gtk='Adwaita'
;;
esac
command -v gsettings >/dev/null 2>&1 || {
echo "[woc-dark] 容器内无 gsettings镜像未升级到含 portal 的版本),跳过;重启实例即用新镜像生效" >&2
exit 1
}
gsettings set org.gnome.desktop.interface color-scheme "$scheme" 2>/dev/null || {
echo "[woc-dark] 设置 color-scheme 失败portal/总线可能未就绪),可重启实例" >&2
exit 1
}
gsettings set org.gnome.desktop.interface gtk-theme "$gtk" 2>/dev/null || true
echo "[woc-dark] color-scheme=${scheme}"