[2026-05-28] htpc ecosystem, magic4pc, kodi layout, steam emulators, jellyfin, kraken, gitea, hermes, truenas, vault, reflect-skip, wiki curation

This commit is contained in:
Alexey Martemyanov
2026-05-28 03:02:02 +06:00
parent b582a5b7ca
commit 7c37461f06
14 changed files with 336 additions and 16 deletions
@@ -0,0 +1,100 @@
---
date: 2026-05-28
status: complete
---
# Wiki Curation — 2026-05-28
## Done
- **Conflict scan:** No git conflict markers in ~/obsidian/ ✅
- **Previous run (2026-05-27):** Status = complete, no Unfinished section ✅
- **Orientation:** SCHEMA.md, index.md (48 pages), log.md (last 30 lines)
- **Vault changes since 2026-05-27 02:00:**
- `family/how-to/htpc-magic4pc.md` — new detailed LG Magic Remote Go
client guide (key fixes table, button mapping, coordinate algorithm)
- `family/how-to/htpc-system.md` — hardware overview + 8BitDo dual
dongle USB port pitfall (commit `d397371`)
- `wiki/tech/reflect-skip-fuse.md` — Alex added `#if SKIP vs
SKIP_BRIDGE` definitive rule (commit `06e8db4`); already in wiki
- `wiki/concepts/watchlist-automation.md` — Alex fixed watchlist-sync
HDD path (`/Developer/` removed, commit `c1c3583`); already applied
- `family/how-to/htpc-steam-nonsteam-shortcuts.md` — detailed VDF
guide; content already covered in wiki/htpc-bazzite-proton.md
- work briefs — skipped
- **Inbox:** ~/obsidian/wiki/raw/inbox/ empty ✅
### Session Crystallization
- `session_20260528_013724_360f62c1` (01:3701:38, 1 min): this is the
wiki curation cron session itself — not crystallizable
- Sessions from 2026-05-27 afternoon (`_110806`, `_111029`, `_112543`,
`_100917`, `_095645`, `_094706`, `_094507`): all system-prompt-only
reads at session start; the HTPC VDF work from that day was already
crystallized into wiki/htpc-bazzite-proton.md by Eagle directly
### Crystallization — new pages
**tech/htpc-magic4pc.md** (new) — LG Magic Remote client
- Source: `family/how-to/htpc-magic4pc.md`
- Architecture (TV UDP → Go client → xdotool/ydotool), button mapping
table, gamescope letterbox coordinate algorithm, key pitfalls, deploy
workflow. Not previously in any wiki page.
**tech/htpc-steam-emulators.md** (updated) — added hardware + 8BitDo fix
- Added HTPC hardware section (i7-6800K, RX 570, Bazzite 44)
- Added 8BitDo dual-dongle USB port pitfall: both dongles on same hub
→ second fails to enumerate. Working port layout documented.
- Source: `family/how-to/htpc-system.md`
### Synthesis (MANDATORY)
**concepts/htpc-bazzite-ecosystem.md** (new) — HTPC Bazzite Ecosystem
- Co-occurrence: `htpc-bazzite-proton` + `htpc-steam-emulators` +
`htpc-kodi-layout` + `htpc-magic4pc` (4 HTPC pages, no synthesis existed)
- Mode map (gamescope / KDE / Kodi / emulators), input device table,
Proton summary, VDF rules, cover art note, maintenance reminders
### Lint fixes
8 pre-existing `related:` inline wikilinks converted to YAML lists:
- `tech/truenas-inpxer.md`
- `tech/jellyfin-config.md`
- `tech/hermes-docker-kraken.md`
- `tech/kraken-network.md`
- `tech/gitea-config.md`
- `tech/vault-namespace.md` (also corrected to link vault-filling-guide
instead of unrelated kraken-network)
- `tech/htpc-kodi-layout.md`
- `tech/reflect-skip-fuse.md` (also corrected related links to
psychologist-app + gitea-config)
### Navigation updated
- `index.md`: 2 entries added (htpc-magic4pc, htpc-bazzite-ecosystem);
count 48→50; date bumped to 2026-05-28
- `log.md`: entry appended
## Validation fixes
All 4 created/modified wiki pages passed pre-commit validation (NO_FRONTMATTER,
BARE_MULTI_LINK, WIKILINK_IN_FIELD, VARIATION_SELECTOR, WEIRD_SPACES, TITLE_LOOKS_LIKE_SLUG)
— no fixes needed post-validation.
## Unresolved conflicts
(none)
## Unfinished
(none)
## Stats
- Conflicts resolved: 0
- Inbox processed: 0 (empty)
- Sessions crystallized: 0 / 1 checked (cron-self session, not crystallizable)
- Pages created: 2 (tech/htpc-magic4pc, concepts/htpc-bazzite-ecosystem)
- Pages updated: 1 (tech/htpc-steam-emulators)
- Synthesis pages created: 1 (concepts/htpc-bazzite-ecosystem)
- Lint issues fixed: 8 (pre-existing inline related: fields)
- Validation issues fixed: 0
+74
View File
@@ -0,0 +1,74 @@
---
title: HTPC Bazzite Ecosystem — Overview
created: '2026-05-28'
updated: '2026-05-28'
type: concept
namespace: family
tags: [htpc, infra, how-to]
sources: []
confidence: medium
related:
- "[[htpc-bazzite-proton]]"
- "[[tech/htpc-steam-emulators]]"
- "[[tech/htpc-kodi-layout]]"
- "[[tech/htpc-magic4pc]]"
---
# HTPC Bazzite Ecosystem — Overview
Synthesis across [[htpc-bazzite-proton]], [[tech/htpc-steam-emulators]],
[[tech/htpc-kodi-layout]], and [[tech/htpc-magic4pc]].
Intel i7-6800K / RX 570 / Bazzite 44 at `192.168.1.86`. Connected to
LG webOS TV (`192.168.1.75`) via HDMI.
## Mode Map
| Mode | Entry | What runs |
|------|-------|-----------|
| Steam Big Picture (gamescope) | Default boot | Steam Gaming Mode + 39 non-Steam shortcuts |
| KDE Desktop | Ctrl+Alt+F2 or Steam → "Switch to Desktop" | Full desktop + Kodi launcher |
| Kodi | From KDE | NFS/SMB media browsing (see [[tech/htpc-kodi-layout]]) |
| Emulators | Steam shortcuts (gamescope or KDE) | RetroArch, EmuDeck |
## Input Devices
| Device | Role |
|--------|------|
| 2× 8BitDo Ultimate dongles | Primary gamepads |
| Xbox 360 Wireless Receiver | Secondary gamepad |
| LG Magic Remote (magic4pc) | TV remote → mouse/keyboard via [[tech/htpc-magic4pc]] |
**8BitDo pitfall:** both dongles must be on separate physical USB ports
(not the same hub). See [[tech/htpc-steam-emulators]].
## Windows Games via Proton
39 games added as non-Steam shortcuts. Most on GE-Proton10-34.
Compatibility matrix and fix recipes: [[htpc-bazzite-proton]].
Highlights:
- VK GameCenter (Atomic Heart) — working ✅
- Rayman Origins — GE-Proton + `d3d9=b`
- Doom 3 BFG — Luxtorpeda (rbdoom-3-bfg flatpak) ✅
- 5 games still broken (Brawlhalla, Castle Crashers, Worms ×2, Duck Game)
## Non-Steam Shortcut Management
VDF shortcuts via Python `vdf` module. **Rules:**
1. Stop Steam before editing `shortcuts.vdf`
2. Use `vdf.binary_load` — never manual byte editing
3. Keep `bak-eagle` (23 May, 106 entries) as recovery baseline
See full guide in [[htpc-bazzite-proton]] § VDF.
## Cover Art
`steam-grid-artwork.py` (at vault root) — fetches artwork from
SteamGridDB for non-Steam shortcuts. Run when adding new shortcuts.
## Maintenance Notes
- `rpm-ostree upgrade` resets `/usr/local/bin/magic4pc` — rebuild and redeploy
- VDF backup: `saves-backup.service` (systemd, daily rsync)
- Proton updates: extract tar.gz into `~/.steam/steam/compatibilitytools.d/`
+4 -2
View File
@@ -7,7 +7,7 @@ updated: '2026-05-25'
> Content catalog. Every wiki page listed with a one-line summary.
> Read this first to find relevant pages for any query.
> Last updated: 2026-05-27 | Total pages: 48
> Last updated: 2026-05-28 | Total pages: 50
## Personal OS — Core
@@ -41,7 +41,8 @@ updated: '2026-05-25'
- [[tech/gitea-config]] — Gitea URL, user, API endpoint, token (eagle-reflect)
- [[tech/vault-namespace]] — Rules for where notes live: namespace assignments, directory map
- [[tech/media-pipeline-pitfalls]] — Torrent rename pitfall, torrent-set-location usage
- [[tech/htpc-steam-emulators]] — Bazzite HTPC Steam shortcuts, emulator save paths, gamepad config
- [[tech/htpc-steam-emulators]] — Bazzite HTPC Steam shortcuts, emulator save paths, gamepad config (8BitDo dual-dongle fix)
- [[tech/htpc-magic4pc]] — LG Magic Remote Go client; button mapping, gamescope letterbox coord algo, deploy
- [[tech/truenas-inpxer]] — Books at /mnt/RED_2TB/storage/books/, inpxer setup
- [[tech/jellyfin-config]] — Jellyfin URL, users (alex/lisa), API key, DB stop-first rule
- [[tech/arr-stack-kraken]] — Prowlarr→Radarr+Sonarr→Transmission→Jellyfin pipeline + API keys
@@ -84,6 +85,7 @@ updated: '2026-05-25'
- [[concepts/kraken-media-stack]] — Full Kraken media server stack; Jellyfin, Arr, Transmission overview
- [[concepts/watchlist-automation]] — Full watchlist automation flow; Radarr/Sonarr triggers to Jellyfin
- [[concepts/multi-host-cron-topology]] — Which jobs run on Eagle vs Kraken, why, and design principles
- [[concepts/htpc-bazzite-ecosystem]] — Full HTPC stack overview: Steam/Proton, Kodi, emulators, magic remote, input devices
## Meta
+13
View File
@@ -75,3 +75,16 @@ type: meta
- Updated: index.md — added multi-host-cron-topology; count 47→48
- Lint: watchlist-automation.md has tags [watchlist, automation, synthesis] not in SCHEMA taxonomy (pre-existing); torrents tag on media-pipeline-pitfalls.md also pre-existing; no broken wikilinks in new/modified pages
- Validation: all 4 modified/created pages passed pre-commit checks ✅
## [2026-05-28] update | Crystallization + synthesis + lint fixes
- Conflicts: 0 found (scan: all ~/obsidian/**/*.md)
- Inbox: empty
- Vault changes since 2026-05-27 02:00: family/how-to/htpc-magic4pc.md (new — LG Magic Remote Go client), family/how-to/htpc-system.md (hardware + 8BitDo fix), wiki/tech/reflect-skip-fuse.md (Alex added #if SKIP vs SKIP_BRIDGE rule), wiki/concepts/watchlist-automation.md (Alex fixed watchlist-sync HDD path), work briefs (skip)
- Session 20260528_013724_360f62c1: cron session itself (01:37, 1 min) — not crystallizable
- Crystallized: tech/htpc-magic4pc.md (from family/how-to/htpc-magic4pc.md) — LG Magic Remote client arch, button mapping, coordinate algorithm, deploy steps
- Updated: tech/htpc-steam-emulators.md — added hardware section + 8BitDo dual-dongle USB port pitfall (from family/how-to/htpc-system.md)
- Synthesis: concepts/htpc-bazzite-ecosystem.md — ties together htpc-bazzite-proton + htpc-steam-emulators + htpc-kodi-layout + htpc-magic4pc; HTPC mode map, input device overview, VDF rules
- Lint fixes (7 pre-existing inline related: → proper YAML lists): truenas-inpxer, jellyfin-config, hermes-docker-kraken, kraken-network, gitea-config, vault-namespace, htpc-kodi-layout
- Lint fix (reflect-skip-fuse): related: "[[kraken-network]]" → proper list with correct related pages (psychologist-app, gitea-config)
- Updated: index.md — 2 pages added (htpc-magic4pc, htpc-bazzite-ecosystem); count 48→50
- Validation: all 4 new/modified wiki pages passed pre-commit checks ✅; 8 lint-fixed pages have valid structure ✅
+2 -1
View File
@@ -5,7 +5,8 @@ updated: '2026-05-23'
type: tech
namespace: personal
tags: [infra, gitea, git, credentials]
related: "[[kraken-network]]"
related:
- "[[tech/kraken-network]]"
---
# Gitea Config
+2 -1
View File
@@ -5,7 +5,8 @@ updated: '2026-05-23'
type: tech
namespace: personal
tags: [hermes, docker, kraken, infra, how-to]
related: "[[kraken-network]]"
related:
- "[[tech/kraken-network]]"
---
# Hermes Docker on Kraken
+2 -1
View File
@@ -5,7 +5,8 @@ updated: '2026-05-23'
type: tech
namespace: family
tags: [htpc, kodi, wol, infra, how-to]
related: "[[htpc-steam-emulators]]"
related:
- "[[tech/htpc-steam-emulators]]"
---
# HTPC Kodi Layout & WoL
+102
View File
@@ -0,0 +1,102 @@
---
title: HTPC — magic4pc (LG Magic Remote)
created: '2026-05-28'
updated: '2026-05-28'
type: tech
namespace: family
tags: [htpc, how-to, pitfalls]
sources: [family/how-to/htpc-magic4pc.md]
confidence: medium
related:
- "[[htpc-bazzite-proton]]"
- "[[tech/htpc-steam-emulators]]"
---
# HTPC — magic4pc (LG Magic Remote)
Go-client for using the LG Magic Remote (webOS TV app) as HTPC
mouse/keyboard input. Fork: `mallexxx/magic4pc_altclient` branch
`bazzite-linux`.
LG TV: `192.168.1.75`, HTPC: `192.168.1.86`.
## Architecture
- **TV server**: webOS app on LG TV → sends UDP to fixed source
port **9106**
- **HTPC client**: `/usr/local/bin/magic4pc`, UDP listener
- **xdotool**: single persistent process via stdin pipe (mouse +
keyboard)
- **ydotool**: gamescope-specific keys (Ctrl+1, Ctrl+2) via
`/run/user/1000/.ydotool_socket`
Session detection:
- `isGamescopeSession()` — scans `/proc/*/cmdline` for `kwin_wayland`;
if absent → gamescope (Steam Big Picture mode)
- `activeDisplay()` — KDE uses Xwayland display from kwin args; gamescope
uses `:1` (game) if visible windows present, else `:0` (Steam BP)
## Button Mapping
| Button | Keycode | Gamescope | KDE Desktop |
|--------|---------|-----------|-------------|
| Red | 403 | Ctrl+1 (Steam menu) | Super |
| Green | 404 | Escape | Escape |
| Yellow | 405 | Ctrl+2 (Steam QAM) | Middle click |
| Blue | 406 | Right click | Right click |
| Back | 461 | Mouse X1 | Mouse X1 |
| D-pad | 37-40 | Arrow keys | Arrow keys |
| Ch+/Ch- | 33/34 | PageUp/Down | PageUp/Down |
| Play/Stop/Pause | 415/413/19 | XF86Audio* | XF86Audio* |
| Touch (swipe) | — | mousemove (scaled) | mousemove |
| Tap | — | Left click | Left click |
## Mouse Coordinate Mapping
TV sends coordinates in 01920 × 01080 space.
**In gamescope:** uses letterbox algorithm.
1. Find active window: (a) under cursor via `getmouselocation`, or
(b) largest bounding-box window (non-popup, highest ID)
2. Compute 16:9 letterbox viewport from window width:
`lb_h = win_w * 9/16`
3. Compute offset: `off_y = -(lb_h - win_h) / 2`
4. Map: `x11_x = tv_x * scale + off_x`; clip negatives to 0
**In KDE:** `getdisplaygeometry` → scale = display / 1920×1080.
## Key Pitfalls
| Problem | Fix |
|---------|-----|
| TV "service error" / won't reconnect | Fixed source UDP port 9106 |
| TV stuck "waiting for client" | Server keepalive timeout 10s |
| KDE XTest prompt on every click | Single persistent xdotool process |
| KDE XTest prompt after xdotool restart | `XwaylandEisNoPrompt=true` in kwinrc |
| Wrong mouse coordinates | Dynamic scale via `xdotool getdisplaygeometry` |
| Binary lost after `rpm-ostree upgrade` | Rebuild and redeploy |
## Deploy
```bash
# Build on Mac
cd ~/Developer/magic4pc_altclient
GOOS=linux GOARCH=amd64 go build -o magic4pc .
# Copy + restart on HTPC
scp magic4pc htpc:/home/bazzite/magic4pc/magic4pc
echo bazzite | sudo -S systemctl stop magic4pc.service
echo bazzite | sudo -S cp /home/bazzite/magic4pc/magic4pc \
/usr/local/bin/magic4pc
echo bazzite | sudo -S systemctl start magic4pc.service
```
Sudoers rule (no-password systemctl):
```
bazzite ALL=(ALL) NOPASSWD: /usr/bin/systemctl
```
## See Also
- [[htpc-bazzite-proton]] — Proton game compatibility on this HTPC
- [[tech/htpc-steam-emulators]] — Steam, emulators, gamepad config
+26 -6
View File
@@ -1,11 +1,13 @@
---
title: HTPC Steam & Emulators
created: '2026-05-23'
updated: '2026-05-23'
updated: '2026-05-28'
type: tech
namespace: family
tags: [htpc, steam, emulators, gamepad, how-to]
related: "[[htpc-kodi-layout]]"
tags: [htpc, steam, emulators, gamepad, how-to, pitfalls]
related:
- "[[htpc-kodi-layout]]"
- "[[htpc-bazzite-proton]]"
---
# HTPC Steam & Emulators
@@ -13,6 +15,27 @@ related: "[[htpc-kodi-layout]]"
Bazzite HTPC at `192.168.1.86`. See [[htpc-bazzite-proton]] for Proton
game compatibility details.
## Hardware
- CPU: Intel Core i7-6800K, RAM: 32 GB, GPU: AMD Radeon RX 570
- TV: LG webOS at `192.168.1.75` (HDMI)
- OS: Bazzite 44 (Fedora-based, immutable OSTree, `bazzite-deck` variant)
## Gamepads — 8BitDo Ultimate (2 dongles)
**Critical:** both 8BitDo Ultimate dongles (`2dc8:3106`) must be on
**separate physical USB ports**, not sharing a USB hub. If both share
the Huasheng USB2.0 HUB on port 006, the second dongle fails to
enumerate (`#Ifs=0 Cfg#=0`) and creates no `/dev/input/js`.
**Working USB layout:**
- Port 005 (direct xHCI, no hub) → 8BitDo #1 (`E417D8D87F0C`)
- Port 006 → Hub Port 001 → 8BitDo #2 (`E417D8C197E4`)
- Port 006 → Hub Port 004 → Xbox 360 Wireless Receiver
**Symptoms of wrong layout:** lsusb shows both but second has `#Ifs=0`;
only one `/dev/input/js`; Steam sees one controller.
## Rules
- Game save paths: managed per-emulator; see emulator config in Bazzite
@@ -26,6 +49,3 @@ game compatibility details.
|--------|------|
| Steam | `~/.steam/steam/userdata/` |
| RetroArch | `~/.var/app/org.libretro.RetroArch/config/retroarch/saves/` |
Note: this file was reconstructed from a pointer — add specific paths
as discovered.
+2 -1
View File
@@ -5,7 +5,8 @@ updated: '2026-05-23'
type: tech
namespace: family
tags: [jellyfin, infra, media, credentials]
related: "[[arr-stack-kraken]]"
related:
- "[[tech/arr-stack-kraken]]"
---
# Jellyfin Config
+2 -1
View File
@@ -5,7 +5,8 @@ updated: '2026-05-23'
type: tech
namespace: personal
tags: [infra, kraken, ssh, wireguard, network]
related: "[[arr-stack-kraken]]"
related:
- "[[tech/arr-stack-kraken]]"
---
# Kraken Network & Infra
+3 -1
View File
@@ -5,7 +5,9 @@ updated: '2026-05-23'
type: tech
namespace: personal
tags: [reflect, swift, kotlin, ios, android, pitfalls]
related: "[[kraken-network]]"
related:
- "[[entities/psychologist-app]]"
- "[[tech/gitea-config]]"
---
# Reflect — Skip Fuse (SwiftUI/Kotlin)
+2 -1
View File
@@ -5,7 +5,8 @@ updated: '2026-05-23'
type: tech
namespace: family
tags: [truenas, books, infra, storage]
related: "[[kraken-network]]"
related:
- "[[tech/kraken-network]]"
---
# TrueNAS Inpxer / Books Setup
+2 -1
View File
@@ -5,7 +5,8 @@ updated: '2026-05-23'
type: tech
namespace: personal
tags: [vault, meta, conventions]
related: "[[kraken-network]]"
related:
- "[[vault-filling-guide]]"
---
# Vault Namespace Rules