[2026-05-08] HTPC Bazzite docs: system, access, magic4pc, gaming plans
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
# HTPC — Доступ и управление
|
||||
|
||||
## SSH
|
||||
```bash
|
||||
ssh -i ~/.ssh/id_rsa bazzite@192.168.1.86
|
||||
```
|
||||
Пароль sudo: `bazzite`
|
||||
|
||||
## Go (на HTPC)
|
||||
Go установлен в `/usr/local/go/bin/go` (не в PATH по умолчанию).
|
||||
Сборка: `cd ~/magic4pc && /usr/local/go/bin/go build -o magic4pc_new .`
|
||||
|
||||
## Git workflow (magic4pc)
|
||||
- Mac: `~/Developer/magic4pc_altclient`, бранч `bazzite-linux`
|
||||
- Remote `linux` → `ssh://bazzite@192.168.1.86/var/home/bazzite/magic4pc.git` (bare repo)
|
||||
- Worktree на HTPC: `/home/bazzite/magic4pc`
|
||||
- Remote `origin` → `https://github.com/mallexxx/magic4pc_altclient.git`
|
||||
|
||||
Деплой:
|
||||
```bash
|
||||
# На Mac:
|
||||
git push linux bazzite-linux
|
||||
|
||||
# На HTPC:
|
||||
cd ~/magic4pc && git pull && /usr/local/go/bin/go build -o magic4pc_new .
|
||||
sudo systemctl stop magic4pc
|
||||
sudo rm /usr/local/bin/magic4pc
|
||||
sudo cp magic4pc_new /usr/local/bin/magic4pc
|
||||
sudo systemctl start magic4pc
|
||||
```
|
||||
|
||||
> ⚠️ Нельзя `cp` поверх работающего бинаря — "Text file busy". Всегда сначала `stop` → `rm` → `cp` → `start`.
|
||||
|
||||
## systemd сервис
|
||||
Файл: `/etc/systemd/system/magic4pc.service`
|
||||
```ini
|
||||
[Unit]
|
||||
Description=Magic Remote client for LG TV
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
User=bazzite
|
||||
Group=bazzite
|
||||
ExecStart=/usr/local/bin/magic4pc-run.sh
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
StartLimitIntervalSec=0
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
`StartLimitIntervalSec=0` — без лимита рестартов (иначе при crash-loop убивается).
|
||||
|
||||
## Run script
|
||||
`/usr/local/bin/magic4pc-run.sh` — ждёт X display, делает `xhost +local:`, запускает бинарь.
|
||||
|
||||
## ydotoold
|
||||
User-юнит: `~/.config/systemd/user/ydotoold.service`
|
||||
Socket: `/run/user/1000/.ydotool_socket`
|
||||
Управление: `systemctl --user status ydotoold`
|
||||
|
||||
## Логи
|
||||
```bash
|
||||
journalctl -u magic4pc -n 50 --no-pager
|
||||
journalctl -u magic4pc -f # live
|
||||
```
|
||||
@@ -0,0 +1,65 @@
|
||||
# HTPC — Планы: Игры и Эмуляторы
|
||||
|
||||
## Статус системы
|
||||
- [x] Bazzite установлен, автологин в Gaming Mode
|
||||
- [x] 1080p@60Hz, аудио LPCM работает
|
||||
- [x] LG Magic Remote работает (magic4pc)
|
||||
- [x] Без пароля при входе
|
||||
- [ ] EmuDeck
|
||||
- [ ] Proton-GE
|
||||
- [ ] MangoHud
|
||||
- [ ] Эмуляторы
|
||||
|
||||
## Следующие шаги
|
||||
|
||||
### 1. EmuDeck
|
||||
Установка через официальный скрипт:
|
||||
```bash
|
||||
# В KDE Desktop Mode (не gamescope):
|
||||
curl -L https://raw.githubusercontent.com/dragoonDorise/EmuDeck/main/install.sh | bash
|
||||
```
|
||||
Настроит RetroArch, PCSX2, Yuzu/Ryujinx и др. автоматически.
|
||||
ROM-и класть в `~/Emulation/roms/<system>/`
|
||||
|
||||
### 2. Proton-GE
|
||||
Через ProtonUp-Qt (устанавливается из Discover или Flatpak):
|
||||
```bash
|
||||
flatpak install flathub net.davidotek.pupgui2
|
||||
```
|
||||
Или через EmuDeck — он включает ProtonUp-Qt.
|
||||
|
||||
### 3. MangoHud (FPS overlay)
|
||||
Уже есть в Bazzite. Включить для игры:
|
||||
- В Steam: Properties → Launch Options: `mangohud %command%`
|
||||
- Глобально: `MANGOHUD=1` в environment
|
||||
|
||||
### 4. Эмуляторы (план)
|
||||
|
||||
| Платформа | Эмулятор | Статус |
|
||||
|-----------|----------|--------|
|
||||
| NES | RetroArch (Nestopia) | Через EmuDeck |
|
||||
| SNES | RetroArch (bsnes/Snes9x) | Через EmuDeck |
|
||||
| Sega Mega Drive | RetroArch (Genesis Plus GX) | Через EmuDeck |
|
||||
| PS2 | PCSX2 | Через EmuDeck |
|
||||
| N64 | RetroArch (Mupen64Plus) | Через EmuDeck |
|
||||
| Switch | Ryujinx (или Suyu) | Через EmuDeck |
|
||||
|
||||
### 5. ROM-и
|
||||
Скопировать в `~/Emulation/roms/` по папкам после установки EmuDeck.
|
||||
EmuDeck сам создаст структуру директорий.
|
||||
|
||||
### 6. Steam ROM Manager
|
||||
Входит в EmuDeck — добавляет эмуляторные игры в Steam библиотеку с обложками.
|
||||
После добавления они появятся в Gaming Mode как обычные Steam игры.
|
||||
|
||||
## Железо — ограничения
|
||||
- RX 570: Switch эмуляция может быть медленной (Vulkan поддерживается)
|
||||
- i7-6800K (Broadwell-E): PS2 и Switch — проверить производительность
|
||||
- 32GB RAM: достаточно для всего
|
||||
|
||||
## Управление в эмуляторах
|
||||
Magic Remote (magic4pc) работает как мышь + клавиатура.
|
||||
Для эмуляторов нужен геймпад — варианты:
|
||||
- Bluetooth геймпад (PS4/PS5/Xbox)
|
||||
- USB геймпад
|
||||
- Настроить маппинг Magic Remote кнопок на gamepad через Steam Input (если эмулятор в Steam)
|
||||
@@ -0,0 +1,60 @@
|
||||
# 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` → пересобрать и скопировать.
|
||||
@@ -0,0 +1,65 @@
|
||||
# HTPC — Система (Bazzite Linux)
|
||||
|
||||
## Железо
|
||||
- CPU: Intel Core i7-6800K
|
||||
- RAM: 32 GB
|
||||
- GPU: AMD Radeon RX 570
|
||||
- Подключение к TV: HDMI
|
||||
- TV: LG webOS (192.168.1.75)
|
||||
- HTPC IP: 192.168.1.86
|
||||
|
||||
## ОС
|
||||
- **Bazzite 44** (Fedora-based, immutable OSTree)
|
||||
- Вариант: `bazzite-deck` (Steam Gaming Mode / gamescope)
|
||||
- Пользователь: `bazzite`
|
||||
- Hostname: `htpc`
|
||||
|
||||
## Режимы запуска
|
||||
- **Gaming Mode (gamescope-session-steam)** — автологин по умолчанию, Steam Big Picture
|
||||
- **KDE Desktop** — переключение из меню Steam → "Switch to Desktop"
|
||||
|
||||
## Автологин
|
||||
Файл: `/etc/gdm/custom.conf`
|
||||
```ini
|
||||
[daemon]
|
||||
AutomaticLoginEnable=True
|
||||
AutomaticLogin=bazzite
|
||||
Session=gamescope-session-steam
|
||||
```
|
||||
|
||||
## Переменные окружения
|
||||
`/etc/environment`:
|
||||
```
|
||||
GAMESCOPE_DISABLE_HDR=1
|
||||
```
|
||||
|
||||
`~/.config/environment.d/gamescope.conf`:
|
||||
```
|
||||
GAMESCOPE_WIDTH=1920
|
||||
GAMESCOPE_HEIGHT=1080
|
||||
GAMESCOPE_REFRESH=60
|
||||
```
|
||||
|
||||
## Разрешение
|
||||
- **1080p @ 60Hz** — рабочий режим
|
||||
- 4K вызывает AMD HDA audio clock bug: пиксельный клок ~594 MHz → HDMI audio 880 Hz вместо 440 Hz
|
||||
|
||||
## Аудио
|
||||
TV поддерживает только LPCM 2ch, 32000/44100/48000/96000/192000 Hz, 16/20/24 bit.
|
||||
|
||||
`~/.config/wireplumber/wireplumber.conf.d/fix-hdmi.conf` — S16LE, 48000 Hz, no suspend
|
||||
`~/.config/pipewire/pipewire.conf.d/99-hdmi-fix.conf` — allowed-rates [44100, 48000]
|
||||
|
||||
## OSTree / Обновления
|
||||
- `/usr/local/bin` слетает при `rpm-ostree` upgrade (новый `/usr` overlay)
|
||||
- Бинари держать в `/home/bazzite/` или пересобирать после обновлений
|
||||
- Проверить после апдейта: `systemctl status magic4pc`
|
||||
|
||||
## KDE Xwayland настройки
|
||||
`~/.config/kwinrc`:
|
||||
```ini
|
||||
[Xwayland]
|
||||
EavesdropMode=2
|
||||
XwaylandEisNoPrompt=true
|
||||
```
|
||||
`XwaylandEisNoPrompt=true` — отключает диалог разрешения XTest (нужен для magic4pc/xdotool).
|
||||
Reference in New Issue
Block a user