[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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 0–1920 × 0–1080 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
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user