mirror of
https://github.com/Gloridust/WechatOnCloud.git
synced 2026-09-20 03:23:32 +08:00
两个实测出的 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>
41 lines
1.8 KiB
Bash
41 lines
1.8 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
|
||
|
||
# 必须用与 autostart 完全相同的总线,否则改了 dconf 也通知不到那条总线上的 portal(微信/浏览器就不会实时变)。
|
||
# autostart 已把真实 XDG_RUNTIME_DIR / DBUS_SESSION_BUS_ADDRESS 落到 /config/.woc-dark-env(docker 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}"
|