# 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` - ⚠️ **`luna-send -a '{"appId":...}'`** — на прошивке ТВ `5.4.2` флаг `-a` не парсится, отдаёт хелп-экран. AppId только первым аргументом. ## Установка IPK — рабочий рецепт (проверено 2026-09-22) Установлено приложение Lampa (`com.lampac.tv`) на ТВ `192.168.1.70`. Полный проход: ```bash # 1. Скачать ipk прямо на ТВ (без scp с Mac) ssh root@192.168.1.70 'curl -sS --max-time 60 -o /tmp/app.ipk "http://192.168.1.14:9118/lg.ipk"' # → 6896874 байт; формат ar (!), НЕ tar/gzip # 2. Установить — обёртка script ОБЯЗАТЕЛЬНА ssh root@192.168.1.70 'rm -f /tmp/i.txt; script -q -c \ "luna-send -n 1 -f luna://com.webos.appInstallService/dev/install \ {\"id\":\"org.lampa.tv\",\"ipkUrl\":\"/tmp/app.ipk\",\"subscribe\":true}" /tmp/i.txt; cat /tmp/i.txt' # → {"subscribed":true,"returnValue":true} # 3. Проверить — appId из appinfo.json, НЕ из запроса ssh root@192.168.1.70 'ls /media/developer/apps/usr/palm/applications/' # → com.lampac.tv # 4. Запустить ssh root@192.168.1.70 'rm -f /tmp/l.txt; script -q -c \ "luna-send -n 1 -f luna://com.webos.applicationManager/launch {\"id\":\"com.lampac.tv\"}" /tmp/l.txt' ``` 🔴 **Поле `"id"` в `dev/install` — произвольная метка.** Реальный appId берётся из `appinfo.json` внутри ipk. В нашем случае запрос ушёл с `org.lampa.tv`, а установилось `com.lampac.tv`. **Проверка, что приложение реально открылось** (а не просто «команда вернула true»): ```bash ssh root@192.168.1.70 'rm -f /tmp/f.txt; script -q -c \ "luna-send -n 1 -f luna://com.webos.applicationManager/getForegroundAppInfo {}" /tmp/f.txt; grep appId /tmp/f.txt' # → "appId": "com.lampac.tv" ``` ## Альтернативный путь, который НЕ сработал `org.webosbrew.hbchannel.service/install` — метод в образе есть (`service.js`, `register("install",...)`), но `luna-send` через SSH его не дёрнул. Используй `com.webos.appInstallService/dev/install`. ## Текущий ТВ (2026-09-22) | Параметр | Значение | |---|---| | IP | `192.168.1.70` (проводной eth0); старый `.75` больше не отвечает | | SSH | `root@192.168.1.70`, **ключ `~/.ssh/id_rsa`**, `StrictHostKeyChecking no` | | Порты | `22` SSH, `3000`/`3001` Luna | | webOS | **5.4.2**, ядро `4.4.84`, image `starfish-dvb-secured`, build 2602 | | eth0 link | **100 Mbit/s full duplex — ЖЕЛЕЗНЫЙ ПОТОЛОК ТВ** (проверено 2026-09-22) | | Кастомные приложения | `org.webosbrew.hbchannel` 0.7.2, `org.webosbrew.inputhook`, `me.wouterdek.magic4pc`, **`com.lampac.tv`** | ⚠️ SSH печатает `post-quantum key exchange` warning — **это норма**, не ошибка. 🔴 **Ключ `~/.ssh/konka_webos` ОТКЛОНЁН (проверено 2026-09-22).** `Permission denied (publickey,password)` на всех вариантах (`konka_webos`, `konka_webos.bak`, `988d8c6ece`, `webos_emul`). **Рабочий ключ — `~/.ssh/id_rsa`.** В `~/.ssh/config` при этом есть хвост `Host 192.168.1.76` с `IdentityFile ~/.ssh/konka_webos` — этот хост **не ТВ** (ТВ = `.70`), не путать. Рабочая команда: ```bash ssh -o StrictHostKeyChecking=no -o IdentitiesOnly=yes -i ~/.ssh/id_rsa \ -o HostkeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa \ root@192.168.1.70 'cat /sys/class/net/eth0/speed; cat /sys/class/net/eth0/duplex' # → 100 # full ``` ⚠️ **Только ключ `id_rsa`.** Опция `-o PasswordAuthentication=no` + `-o BatchMode=yes` рвёт соединение раньше, чем успевает пройти pubkey-аутентификация на этой прошивке — не использовать как «проверку», что ключа нет. ## Скорость eth-порта ТВ — потолок железа ``` eth0: 100 Mbit/s, full duplex ``` 🔴 **Это предел сетевой карты телевизора, а не кабеля.** Проверено с заведомо гигабитным кабелем — ТВ всё равно показывает `100`, больше не даёт. Не диагностировать это как «битый кабель», не менять патч-корд, не искать гигабит: модель физически не умеет. Порт роутера со стороны ТВ при этом может показывать `1000FD` — рассинхрон нормален и означает, что ограничение на стороне ТВ. Проверка (только ключ `id_rsa`): ```bash ssh -o StrictHostKeyChecking=no -o IdentitiesOnly=yes -i ~/.ssh/id_rsa \ -o HostkeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa \ root@192.168.1.70 'cat /sys/class/net/eth0/speed; cat /sys/class/net/eth0/duplex' ``` ## Связанные заметки - [[family/how-to/tv-luna-send]] — враппер `~/Automation/tv-luna-send.sh` - [[personal/tech/lampac-deployment]] — что именно ставили на ТВ и зачем - [[family/how-to/kraken-network]] — сеть Кра́кена и ТВ