fix(launcher): M2.83 回归 — 开机选单期不抢屏。sysui S70 拉起 launcher 时 mode 文件未写+播放器未起,is_meow_mode()=find_hiby_pid<=0 恒真 → 误入 MeowOS 主屏,与选单/HibyOS 播放器抢 fb0+触摸(开机选 HibyOS 黑屏根因)。修: mode 文件缺失且 bootmenu 存活→怠速等写(不设上限,bootmenu 消失回退旧判定); hiby→怠速守护不碰 fb,轮询 mode 变 meow(热键切换)再落地主屏; 等待期被 sysui stop→直走退出尾

This commit is contained in:
MeowOS committed 2026-08-31 19:33:26 +08:00
1 parent ee104f1b18
commit 1cfd124211
2 files changed
+33 -2

No files matched your search

+33 -2
View File
@@ -1670,6 +1670,10 @@ static void usage(void)
}
/* /tmp/meow_boot_mode:开机模式标记(bootmenu 在 S90 选定后写 "meow"/"hiby",tmpfs 开机清空)。
* M2.89 回归修复用,见 main() 内「开机选单期不抢屏」。 */
#define MEOW_BOOT_MODE_PATH "/tmp/meow_boot_mode"
int main(int argc, char **argv)
{
long sim_hotkey = 0, sim_tap = 0, sim_exit = 0, dumpkeys = 0;
@@ -1877,7 +1881,34 @@ int main(int argc, char **argv)
* - BACK TO PLAYER → 显示「需重启」提示并留在主界面(不渲染死帧);
* - 仅 SIGTERM 退出(rcS/SSH 关停),退出时屏幕保持应用列表主界面(无残帧)。
* 若此时竟有存活播放器(不应用于 MeowOS,防御性),回落到下面的旧覆盖路径。 */
meow_mode = is_meow_mode();
/* ===== M2.89 回归修复:开机选单期不抢屏 =====
* sysui 在 S70 即拉起 launcher(早于 S90 bootmenu 写 /tmp/meow_boot_mode)。
* 旧判定 is_meow_mode()=find_hiby_pid()<=0 在选单阶段恒真(播放器尚未启动),
* launcher 误入 MeowOS 主屏 → 与选单/HibyOS 播放器抢 fb0 与触摸输入
* (开机选 HibyOS 后黑屏/选单被主屏重绘覆盖的回归根因)。
* 修复:mode 文件不存在且 bootmenu 存活 → 怠速等它写(选单无超时,不设等待上限;
* bootmenu 消失且仍无文件 → 非开机语境如 SSH 手跑/S92 兜底,回退旧判定)。
* 读到 hiby → 怠速守护(不碰 fb):轮询 mode 文件,变 meow(HibyOS 热键切换)→ 落地主屏。 */
char boot_mode[16] = { 0 };
if (!sigterm_flag) {
int announced = 0;
while (access(MEOW_BOOT_MODE_PATH, F_OK) != 0 && !sigterm_flag) {
if (proc_by_comm("meow_bootmenu") <= 0) break; /* 非开机语境:回退旧判定 */
if (!announced) { logmsg("boot: mode undecided, bootmenu active -> idle wait (no fb grab)"); announced = 1; }
usleep(200 * 1000);
}
FILE *mf = fopen(MEOW_BOOT_MODE_PATH, "r");
if (mf) { if (fscanf(mf, "%15s", boot_mode) != 1) boot_mode[0] = 0; fclose(mf); }
while (!sigterm_flag && !strcmp(boot_mode, "hiby")) {
/* HibyOS 会话怠速:bootmenu supervisor 管热键/播放器;mode 变 meow(热键切换)即落地。 */
usleep(500 * 1000);
mf = fopen(MEOW_BOOT_MODE_PATH, "r");
if (mf) { if (fscanf(mf, "%15s", boot_mode) != 1) boot_mode[0] = 0; fclose(mf); }
}
if (boot_mode[0]) logmsg("boot mode = %s", boot_mode);
}
meow_mode = !strcmp(boot_mode, "meow") ? 1 :
!strcmp(boot_mode, "hiby") ? 0 : is_meow_mode();
/* M2.12:卡在则把 /usr/data/mnt/sd_0/MeowOS/opt/bin 前插 PATH(外围 CLI 已迁卡,
* 按需可用;卡不在跳过,绝不崩)。SSH 会话另由 rootfs /etc/profile.d/meow_card_path.sh 处理。 */
if (ensure_card_mounted() || sd_mounted()) {
@@ -1886,7 +1917,7 @@ int main(int argc, char **argv)
} else {
logmsg("PATH: no card, MeowOS/opt/bin skipped");
}
if (meow_mode) {
if (!sigterm_flag && meow_mode) { /* M2.89:怠速等待期间被 sysui stop(HibyOS 选定)→ 直走退出尾 */
/* M2.2 拔营:启动即尝试挂 TF 卡 + 联网(非阻塞);失败由 run_menu 后台周期重试。 */
ensure_card_mounted();
ensure_wifi();
Binary file not shown.