Files
WechatOnCloud/docker/woc-dark.sh
Gloridust eefce1e9ba fix(dark): woc-dark.sh 复用 autostart 真实总线 + 浏览器改纯 portal 跟随(修实时切换)
两个实测出的 bug:
1) 总线不一致:base 镜像里 XDG_RUNTIME_DIR=/config/.XDG,autostart 的 portal 总线在
   /config/.XDG/woc-bus;但面板 docker exec woc-dark.sh 不继承会话环境,原先默认 /tmp/woc-run-<uid>,
   连错总线 → 改了 dconf 也通知不到运行中的 portal → 微信/浏览器不实时变。改为 autostart 把真实总线
   地址写入 /config/.woc-dark-env,woc-dark.sh source 它。
2) 浏览器恒深色:之前给 Chromium 加 --force-dark-mode 是启动期固定开关,切回浅色无效、必须重启。
   去掉它,改为同微信一样纯靠 portal 的 color-scheme/gtk-theme,实现双向实时切换。
另:autostart 不再 export 静态 GTK_THEME(会让 GTK 恒深色),明暗统一走 gsettings。

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

41 lines
1.8 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
# 必须用与 autostart 完全相同的总线,否则改了 dconf 也通知不到那条总线上的 portal微信/浏览器就不会实时变)。
# autostart 已把真实 XDG_RUNTIME_DIR / DBUS_SESSION_BUS_ADDRESS 落到 /config/.woc-dark-envdocker exec 不继承
# 会话环境不能自行猜测——base 镜像里 XDG_RUNTIME_DIR 是 /config/.XDG 而非 /tmp/woc-run-<uid>)。
if [ -f /config/.woc-dark-env ]; then
# shellcheck source=/dev/null
. /config/.woc-dark-env
fi
: "${XDG_RUNTIME_DIR:=/config/.XDG}"
: "${DBUS_SESSION_BUS_ADDRESS:=unix:path=${XDG_RUNTIME_DIR}/woc-bus}"
export XDG_RUNTIME_DIR DBUS_SESSION_BUS_ADDRESS
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}"