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

137 lines
6.1 KiB
Markdown
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.
# 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