mirror of
https://github.com/Gloridust/WechatOnCloud.git
synced 2026-09-20 03:23:32 +08:00
实例深色不再靠 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>
34 lines
1.4 KiB
Bash
34 lines
1.4 KiB
Bash
#!/bin/bash
|
||
# 实时切换本实例桌面深色(由面板经 docker exec 以 app 用户身份调用:woc-dark.sh on|off)。
|
||
# 原理:改 GNOME color-scheme(dconf 共享后端)→ 与 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}"
|