From 882142f742824d9c3b11d201628167e70d924790 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Fri, 8 May 2026 18:10:22 +0600 Subject: [PATCH] 2026-05-08 WebOS luna-send SSH guide --- family/how-to/htpc-webos-luna.md | 44 ++++++++++ family/how-to/magic4pc-webos.md | 136 +++++++++++++++++++++++++++++++ 2 files changed, 180 insertions(+) create mode 100644 family/how-to/htpc-webos-luna.md create mode 100644 family/how-to/magic4pc-webos.md diff --git a/family/how-to/htpc-webos-luna.md b/family/how-to/htpc-webos-luna.md new file mode 100644 index 00000000..f9bfa7ae --- /dev/null +++ b/family/how-to/htpc-webos-luna.md @@ -0,0 +1,44 @@ +# WebOS TV — luna-send via SSH + +TV IP: `192.168.1.75`, user: `root` + +## Проблема +`luna-send` пишет вывод в tty, не в stdout. Через SSH без PTY — пусто. + +## Решение — через `script` +```bash +ssh root@192.168.1.75 "script -q -c \"luna-send -n 1 -f luna://...\" /tmp/o.txt; cat /tmp/o.txt" +``` + +## Методы + +### Список запущенных приложений +```bash +ssh root@192.168.1.75 "script -q -c \"luna-send -n 1 -f luna://com.webos.service.applicationmanager/running '{}'\" /tmp/o.txt; cat /tmp/o.txt" +``` + +### Закрыть приложение +```bash +ssh root@192.168.1.75 "script -q -c \"luna-send -n 1 -f luna://com.webos.service.applicationmanager/closeByAppId '{\"id\":\"APP_ID\"}'\" /tmp/o.txt; cat /tmp/o.txt" +``` + +### Удалить приложение (dev) +```bash +ssh root@192.168.1.75 "script -q -c \"luna-send -n 1 -f luna://com.webos.appInstallService/dev/remove '{\"id\":\"APP_ID\"}'\" /tmp/o.txt; cat /tmp/o.txt" +``` + +### Установить ipk +```bash +scp app.ipk root@192.168.1.75:/tmp/ +ssh root@192.168.1.75 "script -q -c \"luna-send -n 1 -f luna://com.webos.appInstallService/dev/install '{\"id\":\"APP_ID\",\"ipkUrl\":\"/tmp/app.ipk\",\"subscribe\":true}'\" /tmp/o.txt; cat /tmp/o.txt" +``` + +### Запустить приложение +```bash +ssh root@192.168.1.75 "script -q -c \"luna-send -n 1 -f luna://com.webos.applicationManager/launch '{\"id\":\"APP_ID\"}'\" /tmp/o.txt; cat /tmp/o.txt" +``` + +## Не работает +- `ares-install/ares-launch` — требует dev mode (порт 9922) +- `listRunningApps` — нет метода, правильно: `running` +- `applicationManager/remove` — нет, правильно: `appInstallService/dev/remove` diff --git a/family/how-to/magic4pc-webos.md b/family/how-to/magic4pc-webos.md new file mode 100644 index 00000000..9e8de223 --- /dev/null +++ b/family/how-to/magic4pc-webos.md @@ -0,0 +1,136 @@ +# Magic4PC — WebOS Client + +Управление LG MagicRemote как мышью/клавиатурой на HTPC через Bazzite. + +## Архитектура + +- **TV (WebOS)** — app `me.wouterdek.magic4pc` + JS-сервис `me.wouterdek.magic4pc.service` + - App: React/Enact UI, слушает кнопки пульта, отправляет в сервис через luna + - Сервис: Node.js, бродкастит UDP, принимает подключение от Go-клиента на HTPC +- **HTPC (Bazzite)** — Go-клиент `~/magic4pc/`, сервис `magic4pc.service` + - Получает UDP-пакеты от TV, инжектирует ввод через `/dev/uinput` + - `inputBackKey()` → Esc в gamescope, x1 в KDE + - Репо: https://github.com/mallexxx/magic4pc_altclient (ветка `main`) + +## Исходники + +| Компонент | Путь | +|-----------|------| +| WebOS UI | `~/Developer/magic4pc/webos/src/views/MainPanel.js` | +| WebOS сервис | `~/Developer/magic4pc/webos/service/m4p_service.js` | +| Go клиент | `~/Developer/magic4pc_altclient/` | +| HTPC бинарник | `~/magic4pc/magic4pc` | +| HTPC сервис | `~/.config/systemd/user/magic4pc.service` (HTPC) | +| run.sh | `~/magic4pc/run.sh` (HTPC) | + +## Кнопки пульта (keyCode) + +| Код | Кнопка | Действие | +|-----|--------|----------| +| 406 | 🔵 Синяя | Открыть панель настроек | +| 461 | Back | Esc (gamescope) / x1 (KDE) | +| 458 | Guide | системный (не перехватывается) | +| 403 | 🔴 Красная | передаётся на HTPC | +| 415 | Play | передаётся на HTPC | +| 19 | Pause | передаётся на HTPC | + +## Панель настроек (синяя кнопка) + +- **Статус** — Connected to IP:port / Waiting / Service disabled +- **v1.1.0** — версия справа от статуса +- **Input source** — выбор HDMI входа +- **Enable / Disable** — старт/стоп сервиса +- **Autostart** — регистрация в EIM (запуск при переключении на HDMI) +- **Show Log / Hide Log** — лог событий и ошибок поверх видео + +## Сборка WebOS app + +```bash +cd ~/Developer/magic4pc/webos +NODE_OPTIONS=--openssl-legacy-provider npm run build +``` + +Требует `--openssl-legacy-provider` — старый webpack несовместим с Node 25. + +## Деплой на TV (192.168.1.75) + +TV рутован, SSH без пароля: `ssh root@192.168.1.75` + +### Деплой через IPK (стандартный способ) + +```bash +# Сборка +cd ~/Developer/magic4pc/webos +NODE_OPTIONS=--openssl-legacy-provider npm run build +/Users/admin/webOS_TV_SDK/CLI/bin/ares-package dist/ service/ --outdir . + +# Деплой на TV +scp me.wouterdek.magic4pc_1.1.0_all.ipk root@192.168.1.75:/tmp/magic4pc.ipk +ssh root@192.168.1.75 " +luna-send -n 1 'luna://com.webos.applicationManager/closeApp' '{\"id\":\"me.wouterdek.magic4pc\"}'; sleep 1 +killall -9 node 2>/dev/null; sleep 1 +mkdir -p /tmp/m4p_deploy && cd /tmp/m4p_deploy +ar x /tmp/magic4pc.ipk +mkdir -p data && tar xf data.tar.gz -C data +cp data/usr/palm/applications/me.wouterdek.magic4pc/main.js /media/developer/apps/usr/palm/applications/me.wouterdek.magic4pc/ +cp data/usr/palm/applications/me.wouterdek.magic4pc/main.css /media/developer/apps/usr/palm/applications/me.wouterdek.magic4pc/ +cp data/usr/palm/services/me.wouterdek.magic4pc.service/m4p_service.js /media/developer/apps/usr/palm/services/me.wouterdek.magic4pc.service/ +luna-send -n 1 'luna://com.webos.applicationManager/launch' '{\"id\":\"me.wouterdek.magic4pc\"}' +echo deployed ok +" +``` + +> ⚠️ `ares-package dist/ service/` — оба аргумента обязательны, иначе сервис не попадёт в IPK. +> `killall -9 node` обязателен — WebOS кэширует Node.js сервис в памяти. +> Распаковывать IPK в отдельную папку (`/tmp/m4p_deploy`) — иначе `ar x` конфликтует с существующим `debian-binary` в `/tmp`. + +### Полная переустановка через ipk (если нужны новые ресурсы/appinfo) + +```bash +cd ~/Developer/magic4pc/webos +/Users/admin/webOS_TV_SDK/CLI/bin/ares-package dist/ --outdir . +scp me.wouterdek.magic4pc_1.0.0_all.ipk root@192.168.1.75:/tmp/ +ssh root@192.168.1.75 " + cd /tmp && ar x me.wouterdek.magic4pc_1.0.0_all.ipk + mkdir -p /tmp/ipk_data + tar xf data.tar.gz -C /tmp/ipk_data 2>/dev/null || tar xf data.tar.xz -C /tmp/ipk_data + cp /tmp/ipk_data/usr/palm/applications/me.wouterdek.magic4pc/main.js \ + /media/developer/apps/usr/palm/applications/me.wouterdek.magic4pc/ + cp /tmp/ipk_data/usr/palm/services/me.wouterdek.magic4pc.service/m4p_service.js \ + /media/developer/apps/usr/palm/services/me.wouterdek.magic4pc.service/ +" +``` + +> ⚠️ `luna://com.webos.appInstallService/dev/install` требует Developer Mode. +> TV рутован → прямая копия файлов надёжнее. + +### Если изменения не видны (кэш WebOS) + +WebAppMgr кэширует JS. Помогает: закрыть+открыть через luna. Если нет — перезагрузка TV. + +## Деплой Go-клиента на HTPC + +```bash +cd ~/Developer/magic4pc_altclient +GOOS=linux GOARCH=amd64 go build -o magic4pc_new . +scp magic4pc_new bazzite@192.168.1.86:~/magic4pc/ +ssh bazzite@192.168.1.86 " + systemctl --user stop magic4pc + mv ~/magic4pc/magic4pc_new ~/magic4pc/magic4pc + systemctl --user start magic4pc +" +``` + +## HTPC сервис + +```bash +ssh bazzite@192.168.1.86 "systemctl --user status magic4pc" +ssh bazzite@192.168.1.86 "systemctl --user restart magic4pc" +``` + +> `enable` не используется — autostart через EIM на стороне TV. + +## Известные проблемы + +- **Guide (458)** — перехватывается WebOS системно, EIM-регистрация не помогает. Нет решения. +- **WebOS кэш** — после scp деплоя иногда нужна перезагрузка TV