--- title: HTPC Steam & Emulators created: '2026-05-23' updated: '2026-05-29' type: tech namespace: family tags: [htpc, steam, emulators, gamepad, how-to, pitfalls] sources: - family/how-to/htpc-migration-plan.md related: - "[[htpc-kodi-layout]]" - "[[htpc-bazzite-proton]]" - "[[tech/htpc-magic4pc]]" --- # HTPC Steam & Emulators 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 - Gamepad config: stored in Steam controller profiles, backed up to `~/controller-profiles/` - Steam shortcuts for non-Steam Windows games: use Proton Experimental ## EmuDeck Save Paths (Flatpak) | Emulator | Save path | |----------|-----------| | RetroArch | `~/.var/app/org.libretro.RetroArch/config/retroarch/saves/` | | Dolphin (GC/Wii) | `~/.var/app/org.DolphinEmu.dolphin-emu/data/dolphin-emu/` | | Citra / Lime3DS | `~/.var/app/org.citra_emu.citra/` | | PCSX2 (PS2) | `~/.var/app/net.pcsx2.PCSX2/config/PCSX2/memcards/` | | RPCS3 (PS3) | `~/.var/app/net.rpcs3.RPCS3/config/rpcs3/dev_hdd0/` | | PPSSPP (PSP) | `~/.var/app/org.ppsspp.PPSSPP/config/ppsspp/PSP/SAVEDATA/` | | melonDS (NDS) | `~/.var/app/net.kuribo64.melonDS/` | | Ryujinx (Switch) | `~/.var/app/org.ryujinx.Ryujinx/config/Ryujinx/bis/user/save/` | | Steam | `~/.steam/steam/userdata/` | ## ROM Symlinks (Data partition → EmuDeck) Emulators expect ROMs at `~/Emulation/roms//`. Symlinks from the Data partition (`/run/media/bazzite/Data/`): ```bash ln -s "/run/media/bazzite/Data/n64 roms" ~/Emulation/roms/n64 ln -s "/run/media/bazzite/Data/snes roms" ~/Emulation/roms/snes ln -s "/run/media/bazzite/Data/gba roms" ~/Emulation/roms/gba ln -s "/run/media/bazzite/Data/3ds roms" ~/Emulation/roms/3ds ln -s "/run/media/bazzite/Data/ps2 roms" ~/Emulation/roms/ps2 ln -s "/run/media/bazzite/Data/dolphin roms" ~/Emulation/roms/wii ln -s "/run/media/bazzite/Data/cemu roms" ~/Emulation/roms/wiiu ln -s "/run/media/bazzite/Data/mame roms" ~/Emulation/roms/mame ln -s "/run/media/bazzite/Data/sega roms" ~/Emulation/roms/genesis ln -s "/run/media/bazzite/Data/nes" ~/Emulation/roms/nes ``` After symlinking, run **Steam ROM Manager** (EmuDeck) from Desktop Mode to import ROMs into Steam with cover art. ## Non-Steam Windows Games `/run/media/bazzite/Data/games/` — 38 pre-installed games (Bayonetta, Cuphead, GTA V, Witcher 3, etc.). Add as Non-Steam games with Proton Experimental. `/run/media/bazzite/Data/steam/steamapps/common/` — already-Steam games (Gang Beasts, Shovel Knight, etc.). Add as a second Steam library path.