Files
obsidian-vault/family/how-to/htpc-webos-luna.md
T

143 lines
7.2 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# WebOS TV — luna-send via SSH
TV IP: `192.168.1.70` (Ethernet), user: `root`
## Проблема
`luna-send` пишет вывод в tty, не в stdout. Через SSH без PTY — пусто.
## Решение — через `script`
```bash
ssh root@192.168.1.70 "script -q -c \"luna-send -n 1 -f luna://...\" /tmp/o.txt; cat /tmp/o.txt"
```
## Методы
### Список запущенных приложений
```bash
ssh root@192.168.1.70 "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.70 "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.70 "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.70:/tmp/
ssh root@192.168.1.70 "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.70 "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 (!<arch>), НЕ 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]] — сеть Кра́кена и ТВ