Files
obsidian-vault/wiki/tech/tv-luna-send.md
T

104 lines
3.0 KiB
Markdown

---
title: WebOS TV — luna-send via SSH
created: '2026-05-29'
updated: '2026-05-29'
type: tech
namespace: family
tags: [htpc, how-to, pitfalls]
sources:
- family/how-to/tv-luna-send.md
- family/how-to/htpc-webos-luna.md
confidence: medium
related:
- "[[tech/htpc-magic4pc]]"
- "[[tech/htpc-kodi-layout]]"
---
# WebOS TV — luna-send via SSH
`luna-send` on WebOS writes output to the TTY, not stdout. SSH without a
PTY produces no output. The `script(1)` workaround captures output via a
pseudo-TTY.
TV IP: `192.168.1.75` (aliases: `root@LGwebOSTV`, `root@tv`).
## The Problem
```bash
ssh root@192.168.1.75 "luna-send -n 1 -f luna://..." # → silent
ssh -t root@192.168.1.75 "luna-send -n 1 -f luna://..." # → still silent
```
Root cause: `luna-send` detects whether its stdout is a TTY and refuses to
write to a pipe.
## The Fix: script(1)
```bash
ssh root@192.168.1.75 \
"script -q -c \"luna-send -n 1 -f luna://com.webos.applicationManager/running '{}'\" \
/tmp/o.txt; cat /tmp/o.txt"
```
`script(1)` allocates a pseudo-TTY and records output to `/tmp/o.txt`.
The wrapper then reads the file, filters the Script header/footer lines,
and removes the temp file.
## Wrapper: tv-luna-send.sh
Location: `~/Automation/tv-luna-send.sh` on Eagle.
```bash
# Usage (same flags as luna-send)
~/Automation/tv-luna-send.sh [luna-send flags] luna://service/method 'json'
# List running apps
~/Automation/tv-luna-send.sh \
-n 1 -f luna://com.webos.service.applicationmanager/running '{}'
# Close an app
~/Automation/tv-luna-send.sh \
-n 1 -f luna://com.webos.service.applicationmanager/closeByAppId \
'{"id":"me.wouterdek.magic4pc"}'
# Launch an app
~/Automation/tv-luna-send.sh \
-n 1 -f luna://com.webos.applicationManager/launch \
'{"id":"me.wouterdek.magic4pc"}'
# Query magic4pc service status
~/Automation/tv-luna-send.sh \
-n 1 -f luna://me.wouterdek.magic4pc.service/query '{}'
```
Set `TV_HOST` env to override the default target (`root@LGwebOSTV`).
DNS resolves via home router at `192.168.1.1`.
## Common Luna URIs
| URI | Purpose |
|-----|---------|
| `.../applicationmanager/running` | List running apps |
| `.../applicationmanager/closeByAppId` | Close app by ID |
| `.../appInstallService/dev/install` | Install IPK (subscribe) |
| `.../appInstallService/dev/remove` | Remove app |
| `.../applicationManager/launch` | Launch app |
| `.../applicationManager/getForegroundAppInfo` | Get active app |
| `...magic4pc.service/query` | Magic4pc service status |
Full service prefix: `com.webos.service.applicationmanager`,
`com.webos.appInstallService`, `com.webos.applicationManager`.
## Limitation: Subscribe Mode (-i)
`luna-send -i` (infinite subscribe, used for `dev/install`) does **not**
work through the wrapper — it never terminates normally. The
`magic4pc/webos/deploy.sh` handles install directly via `ssh+script` with
inline polling for `"state":"installed"`.
## Where Used
`magic4pc/webos/deploy.sh` — close, remove, and launch steps in the deploy
pipeline. See [[tech/htpc-magic4pc]] for the full magic4pc build and deploy
workflow.