diff --git a/family/how-to/magic4pc-webos.md b/family/how-to/magic4pc-webos.md index 64725332..cc9d0a87 100644 --- a/family/how-to/magic4pc-webos.md +++ b/family/how-to/magic4pc-webos.md @@ -89,10 +89,9 @@ ssh root@192.168.1.75 "script -q -c \"luna-send -n 1 -f luna://com.webos.service # 3. Удалить старую версию ssh root@192.168.1.75 "script -q -c \"luna-send -n 1 -f luna://com.webos.appInstallService/dev/remove '{\\\"id\\\":\\\"me.wouterdek.magic4pc\\\"}'\" /tmp/o.txt; cat /tmp/o.txt" -# 4. Установить новую (подписанный IPK от ares-package SDK) -ssh root@192.168.1.75 "luna-send -i -f luna://com.webos.appInstallService/dev/install '{\"id\":\"me.wouterdek.magic4pc\",\"ipkUrl\":\"/tmp/magic4pc.ipk\",\"subscribe\":true}' > /tmp/install.txt 2>&1" -sleep 10 && ssh root@192.168.1.75 "cat /tmp/install.txt" -# Ждать state: "installed" в выводе +# 4. Установить новую (через PTY — иначе нет вывода) +ssh root@192.168.1.75 "script -q -c \"luna-send -i -f luna://com.webos.appInstallService/dev/install '{\\\"id\\\":\\\"me.wouterdek.magic4pc\\\",\\\"ipkUrl\\\":\\\"/tmp/magic4pc.ipk\\\",\\\"subscribe\\\":true}'\" /tmp/o.txt; cat /tmp/o.txt" +# Ждать "state": "installed" в выводе # 5. Запустить ssh root@192.168.1.75 "script -q -c \"luna-send -n 1 -f luna://com.webos.applicationManager/launch '{\\\"id\\\":\\\"me.wouterdek.magic4pc\\\"}'\" /tmp/o.txt; cat /tmp/o.txt" @@ -128,7 +127,93 @@ ssh bazzite@192.168.1.86 "systemctl --user restart magic4pc" > `enable` не используется — autostart через EIM на стороне TV. +## Auto-launch при boot/wake + +Magic4pc автоматически запускает выбранный app (VK Video, Кинопоиск, last used) при включении TV. + +### Логика + +- **Boot (полный ребут)** — `/tmp` чистится → нет `/tmp/magic4pc-run-state` → `freshStart=true` → запускает app +- **Wake (standby→on) с последним активным app** — init.d при Suspend удаляет `run-state` → при wake нет файла → `freshStart=true` → запускает app +- **Wake после HDMI/EIM source** — если последний активный был HDMI (`com.webos.app.hdmi*`) — init.d при Suspend тоже удаляет `run-state` (TODO: можно улучшить), magic4pc по wake не запускает чужой app если пользователь вручную переключился на HDMI перед сном +- **Ручной запуск magic4pc** (пользователь сам открыл) — `run-state = running` уже есть → `freshStart=false` → ничего не запускает ✅ + +### Файлы persistent storage + +Сервис (UID 5078, jail) имеет доступ только к `/tmp` и своей директории: + +| Файл | Где | Что | +|------|-----|-----| +| `magic4pc-settings` | `PERSISTENT_DIR/` | Выбранный app: appId / `__last_used__` / `none` | +| `magic4pc-last-app` | `PERSISTENT_DIR/` | Последний foreground app (пишет init.d + сервис) | +| `magic4pc-run-state` | `/tmp/` | `running` = уже запускался после boot/wake | + +`PERSISTENT_DIR = /media/developer/apps/usr/palm/services/me.wouterdek.magic4pc.service` + +Init.d (root) копирует `last-app` в `PERSISTENT_DIR` при каждом обновлении foreground. + +### Init.d скрипт + +Файл на TV: `/var/lib/webosbrew/init.d/magic4pc` +Исходник в репо: `tv-scripts/init.d-magic4pc.sh` + +**Что делает:** +- При старте: удаляет `/tmp/magic4pc-run-state` (fresh boot) +- `track_foreground` — каждые 3 сек пишет foreground app в `/tmp/magic4pc-last-app` и `PERSISTENT_DIR/magic4pc-last-app` +- `monitor_power` — при Suspend удаляет `run-state` чтобы wake выглядел как fresh start +- Каждые 5 мин обновляет `/tmp/magic4pc-apps.json` (список app для Dropdown) + +**Деплой init.d:** +```bash +scp tv-scripts/init.d-magic4pc.sh root@192.168.1.75:/var/lib/webosbrew/init.d/magic4pc +ssh root@192.168.1.75 "chmod +x /var/lib/webosbrew/init.d/magic4pc" +# Изменения применяются после ребута TV (init.d запускается Homebrew Channel при старте) +``` + +### Деплой IPK (правильный способ) + +`luna-send` через обычный SSH не выводит ответ — нужен PTY через `script`: + +```bash +# 1. Собрать и упаковать +cd ~/Developer/magic4pc/webos +NODE_OPTIONS=--openssl-legacy-provider npm run build +/Users/admin/webOS_TV_SDK/CLI/bin/ares-package dist/ service/ --outdir . + +# 2. Скопировать на TV +scp me.wouterdek.magic4pc_1.1.0_all.ipk root@192.168.1.75:/tmp/magic4pc.ipk + +# 3. Установить (через PTY — иначе нет вывода) +ssh root@192.168.1.75 "script -q -c \"luna-send -i -f luna://com.webos.appInstallService/dev/install '{\\\"id\\\":\\\"me.wouterdek.magic4pc\\\",\\\"ipkUrl\\\":\\\"/tmp/magic4pc.ipk\\\",\\\"subscribe\\\":true}'\" /tmp/o.txt; cat /tmp/o.txt" +# Ждать "state": "installed" в выводе + +# 4. Запустить +ssh root@192.168.1.75 "script -q -c \"luna-send -n 1 -f luna://com.webos.applicationManager/launch '{\\\"id\\\":\\\"me.wouterdek.magic4pc\\\"}'\" /dev/null" +``` + +> ⚠️ `npm run package` = `ares-package -n` (unsigned) — **не использовать**, TV отклоняет. +> ⚠️ `luna-send` без PTY (`script`) молчит — всегда использовать `script -q -c "..." /tmp/o.txt`. + +### Отладка + +```bash +# Лог сервиса +ssh root@192.168.1.75 "cat /tmp/m4p_debug.log" + +# Текущий выбранный app и last-app +ssh root@192.168.1.75 "cat /media/developer/apps/usr/palm/services/me.wouterdek.magic4pc.service/magic4pc-settings" +ssh root@192.168.1.75 "cat /media/developer/apps/usr/palm/services/me.wouterdek.magic4pc.service/magic4pc-last-app" + +# Run-state (есть = уже запускался, нет = fresh start) +ssh root@192.168.1.75 "cat /tmp/magic4pc-run-state" + +# Лог init.d +ssh root@192.168.1.75 "cat /tmp/m4p_debug.log | grep 'magic4pc init'" +``` + ## Известные проблемы - **Guide (458)** — перехватывается WebOS системно, EIM-регистрация не помогает. Нет решения. - **listApps** — `applicationManager/dev/listApps` недоступен без dev mode. Используется `applicationManager/listApps`. +- **Self-launch** — magic4pc не должен запускать сам себя. Фильтруется в `checkAutoLaunch` по appId. +- **HDMI как last-app** — init.d трекает foreground включая HDMI sources. При `__last_used__` и последнем активном HDMI — не запустит ничего полезного. Решение: выбрать конкретный app вместо `last_used`.