mirror of
https://github.com/Gloridust/WechatOnCloud.git
synced 2026-06-16 19:53:53 +08:00
b7fd778ab1
镜像层(向后兼容,微信路径零改动): - app-defs.sh:按 appType 给出 APP_BIN/APP_LAUNCH/APP_NAME(缺省回退微信)。 - app-ctl.sh:通用安装/状态分发;wechat 委托回 wechat-ctl.sh;telegram 下载官方 portable tar.xz。 - autostart:读 /config/.woc-app 选择启动哪个应用,读不到回退微信(老实例零改动)。 - 02-woc-app 钩子:把容器环境 WOC_APP_TYPE 落到 /config/.woc-app(缺则不写→回退微信)。 - Dockerfile:加 xz-utils(telegram 解压)+ COPY 新脚本。 后端:envList 透传 WOC_APP_TYPE(+自定义启动命令);triggerWechat/wechatStatus 改走 app-ctl.sh <appType>(微信行为不变);创建实例路由接受 appType。 前端:新建实例对话框加「应用类型」选择器(微信默认 / Telegram;Chromium、自定义标记"即将支持"禁用)。 本轮 Telegram(x86_64) 端到端可用;Chromium(待 apt 烤镜像) 与 自定义(待上传流) 下一轮。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
63 lines
2.5 KiB
Bash
63 lines
2.5 KiB
Bash
#!/bin/bash
|
||
# 由 KasmVNC base 的 openbox 会话在桌面就绪后执行(以 app 用户身份)。
|
||
# v1.2.0 多应用:实例承载的应用(微信/Telegram/Chromium/自定义)由面板写入容器环境 WOC_APP_TYPE,
|
||
# 再由 02-woc-app 钩子落到数据卷 /config/.woc-app。本脚本据此等待对应应用就绪并常驻拉起
|
||
# (关窗自动重开;更新后从新版本路径重启)。读不到类型 → 回退微信,老实例零改动。
|
||
|
||
set -u
|
||
|
||
# 容器内无 GPU,强制软件渲染
|
||
export LIBGL_ALWAYS_SOFTWARE=1
|
||
|
||
# 解析本实例应用类型与启动信息(APP_BIN / APP_LAUNCH / APP_NAME)
|
||
APP_TYPE=wechat
|
||
# shellcheck source=/dev/null
|
||
[ -f /config/.woc-app ] && . /config/.woc-app 2>/dev/null || true
|
||
APP_TYPE="${WOC_APP_TYPE:-wechat}"
|
||
# shellcheck source=/dev/null
|
||
. /woc/app-defs.sh
|
||
woc_app_def "$APP_TYPE"
|
||
|
||
# 防“最小化后丢失”:本桌面(openbox)无任务栏,窗口被最小化就无处恢复 → 黑屏。
|
||
# 看守进程:每 2s 把“被最小化(不可见)”的顶层窗口重新激活,相当于禁用最小化。对任意应用通用。
|
||
(
|
||
export DISPLAY="${DISPLAY:-:1}"
|
||
while sleep 2; do
|
||
all=$(xdotool search --name '.+' 2>/dev/null) || continue
|
||
vis=$(xdotool search --onlyvisible --name '.+' 2>/dev/null)
|
||
for w in ${all}; do
|
||
printf '%s\n' "${vis}" | grep -qx "${w}" || xdotool windowactivate "${w}" 2>/dev/null || true
|
||
done
|
||
done
|
||
) &
|
||
|
||
# 自定义应用若未配置启动命令,给出提示并退出(避免空等)
|
||
if [ "$APP_TYPE" = "custom" ] && [ -z "${APP_LAUNCH:-}" ]; then
|
||
echo "[autostart] 自定义应用尚未配置启动命令,请在面板「数据卷」上传安装包并设定后重启实例"
|
||
exit 0
|
||
fi
|
||
|
||
# 1) 等待应用安装就绪(首次需在面板点「下载并安装」)
|
||
notified=0
|
||
while [ -n "${APP_BIN:-}" ] && [ ! -x "${APP_BIN}" ]; do
|
||
if [ "${notified}" -eq 0 ]; then
|
||
echo "[autostart] ${APP_NAME} 尚未安装,等待面板触发下载…(首次使用请在面板点「下载并安装」)"
|
||
notified=1
|
||
fi
|
||
sleep 2
|
||
done
|
||
|
||
# 3) 常驻拉起应用
|
||
while true; do
|
||
if [ -n "${APP_BIN:-}" ] && [ ! -x "${APP_BIN}" ]; then
|
||
# 更新过程中本体被临时挪走,等就位再继续
|
||
sleep 2
|
||
continue
|
||
fi
|
||
echo "[autostart] 启动 ${APP_NAME}: ${APP_LAUNCH}"
|
||
# APP_LAUNCH 可带参数,按 word-split 执行(各应用参数均不含空格,见 app-defs.sh)
|
||
${APP_LAUNCH}
|
||
echo "[autostart] ${APP_NAME} 已退出,2 秒后重启"
|
||
sleep 2
|
||
done
|