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

3.6 KiB

magic4pc — LG Magic Remote для HTPC

Что это

Go-клиент для LG Magic Remote (webOS приложение на TV).
Форк: https://github.com/mallexxx/magic4pc_altclient (бранч bazzite-linux)
Оригинал: https://github.com/netham45/magic4pc_altclient

Архитектура

  • TV сервер: webOS приложение на LG TV (192.168.1.75:42831), шлёт UDP
  • HTPC клиент: /usr/local/bin/magic4pc, UDP-клиент на фиксированном source port 9106
  • xdotool: единый persistent процесс через stdin pipe — мышь и клавиши
  • ydotool: для gamescope-специфичных команд (Ctrl+1, Ctrl+2) через /run/user/1000/.ydotool_socket

Ключевые фиксы (история)

Проблема Решение
TV "service error" / не реконнектится Фиксированный source UDP port 9106 (ListenUDP(":9106"))
TV зависает в "waiting for client" Server keepalive timeout 10s → auto-reconnect
KDE XTest диалог при каждом клике Единый xdotool процесс (не новый на каждую кнопку)
KDE XTest диалог при рестарте xdotool XwaylandEisNoPrompt=true в kwinrc
Кривые координаты мыши Динамический scale через xdotool getdisplaygeometry
Крестик слал Ctrl/a/s/d TV keycodes 37-40 → Left/Up/Right/Down keysym
Цифры слали мусор ASCII keycodes → string(rune(key))

Маппинг кнопок

Кнопка Keycode Gaming Mode (gamescope) KDE Desktop
Красная 403 Ctrl+1 (Steam меню) Super (Win)
Зелёная 404 Escape Escape
Жёлтая 405 Ctrl+2 (Steam QAM) Средняя кнопка мыши
Синяя 406 Правый клик Правый клик
Back 461 Mouse X1 (back) Mouse X1 (back)
Enter/OK 13 Return Return
Ch Up 33 PageUp PageUp
Ch Down 34 PageDown PageDown
D-pad Left 37 Left Left
D-pad Up 38 Up Up
D-pad Right 39 Right Right
D-pad Down 40 Down Down
Play 415 XF86AudioPlay XF86AudioPlay
Stop 413 XF86AudioStop XF86AudioStop
Pause 19 XF86AudioPause XF86AudioPause
Цифры 0-9 48-57 0-9 0-9
GUIDE 458 Правый клик Правый клик
Мышь (тач) mousemove (scaled) mousemove (scaled)
Тап mousedown/up Left click Left click
Скролл wheel scroll 4/5 scroll 4/5

Определение сессии

isGamescopeSession() — читает /proc/*/cmdline, ищет kwin_wayland. Если нет → gamescope.

Koordinаты мыши

TV шлёт координаты в пространстве 0–1920 × 0–1080.
При старте xdotool запрашивается xdotool getdisplaygeometry → вычисляется scale.
Работает корректно при любом разрешении экрана.

Проблемы которые могут вернуться

  • xdotool умирает (write error) → KDE показывает XTest диалог. Разрешить и включить XwaylandEisNoPrompt=true.
  • TV "service error" — если висит намертво, cold reboot TV (выдернуть из розетки).
  • Бинарь слетает после rpm-ostree upgrade → пересобрать и скопировать.