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

6.1 KiB
Raw Blame History

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

Исходники

Компонент Путь
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

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 (стандартный способ)

# Сборка
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)

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

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 сервис

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