[2026-06-21] taiga-vault: family/how-to/htpc-emulators-setup.md family/how-to/htpc-steam-nonsteam-shortcuts.md
This commit is contained in:
@@ -406,35 +406,43 @@ CACHE="$HOME/.var/app/org.libretro.RetroArch/config/retroarch/system/Mupen64plus
|
|||||||
| В Steam (shortcuts.vdf) | ✅ 24 игры | launchoptions → плоские симлинки |
|
| В Steam (shortcuts.vdf) | ✅ 24 игры | launchoptions → плоские симлинки |
|
||||||
| Постеры (SteamGridDB) | ✅ wide + poster для всех | `~/.steam/steam/userdata/147839491/config/grid/` |
|
| Постеры (SteamGridDB) | ✅ wide + poster для всех | `~/.steam/steam/userdata/147839491/config/grid/` |
|
||||||
|
|
||||||
**Игры в Steam (Switch):**
|
**36 игр в Steam (Switch) — статус на 21.06.2026:**
|
||||||
| Игра | ROM slug |
|
Всего symlinks в `~/Emulation/roms/switch/`: 36. Из них в Steam добавлено 27 (shortcuts.vdf), у 9 нет shortcut.
|
||||||
|------|----------|
|
Эмулятор: Ryujinx 1.3.3 (flatpak), firmware 19.0.1, prod.keys (12KB), title.keys отсутствует.
|
||||||
| Donkey Kong Country Tropical Freeze | `donkey_kong.nsp` |
|
|
||||||
| Super Mario Odyssey | `mario_odyssey.nsp` |
|
|
||||||
| Mario Kart 8 Deluxe | `mario_kart_8.nsp` |
|
|
||||||
| The Legend of Zelda: Breath of the Wild | `zelda_botw.nsp` |
|
|
||||||
| Donkey Kong Country Returns HD | `donkey_kong_country_returns_hd.nsz` |
|
|
||||||
| Hollow Knight | `hollow_knight.nsp` |
|
|
||||||
| Hollow Knight: Silksong | `hollow_knight__silksong.nsz` |
|
|
||||||
| It Takes Two | `it_takes_two.nsp` |
|
|
||||||
| Little Nightmares | `little_nightmares.nsp` |
|
|
||||||
| Little Nightmares III | `little_nightmares_iii.nsp` |
|
|
||||||
| Luigi Mansion 3 | `luigi_mansion_3.nsp` |
|
|
||||||
| Ori and the Will of the Wisps | `ori_and_the_will_of_the_wisps.nsz` |
|
|
||||||
| Plants vs. Zombies: Replanted | `plants_vs__zombies__replanted.nsz` |
|
|
||||||
| Spyro Reignited Trilogy | `spyro_reignited_trilogy.nsp` |
|
|
||||||
| Super Mario 3D All-Stars | `super_mario_3d_all_stars.nsp` |
|
|
||||||
| Super Mario 3D World + Bowser Fury | `super_mario_3d_world___bowser_fury.nsz` |
|
|
||||||
| Super Mario Bros. Wonder | `super_mario_bros__wonder.nsp` |
|
|
||||||
| Super Mario Party | `super_mario_party.nsp` |
|
|
||||||
| Super Smash Bros. Ultimate | `super_smash_bros__ultimate.nsz` |
|
|
||||||
| Sonic Mania | `sonic_mania.nsp` |
|
|
||||||
| The Disney Afternoon Collection | `the_disney_afternoon_collection.nsz` |
|
|
||||||
| Unravel Two | `unravel_two.nsz` |
|
|
||||||
| Vasilisa and Baba Yaga | `vasilisa_and_baba_yaga.nsz` |
|
|
||||||
| Constance | `constance.nsp` |
|
|
||||||
|
|
||||||
**Symlink схема:** плоские симлинки без пробелов в `~/Emulation/roms/switch/` (например `donkey_kong.nsp`) → `/run/media/system/Data/Switch Roms/...` Оригинальные симлинки на папки сохранены для совместимости.
|
| Игра | ROM slug | Статус |
|
||||||
|
|------|----------|--------|
|
||||||
|
| Animal Crossing New Horizons | `animal_crossing.nsp` | ❓ |
|
||||||
|
| Donkey Kong Country Tropical Freeze | `donkey_kong.nsp` | ✅ работает |
|
||||||
|
| Super Mario Odyssey | `mario_odyssey.nsp` | ✅ работает |
|
||||||
|
| Mario Kart 8 Deluxe | `mario_kart_8.nsp` | ✅ работает |
|
||||||
|
| The Legend of Zelda: Breath of the Wild | `zelda_botw.nsp` | ✅ работает |
|
||||||
|
| Spyro Reignited Trilogy | `spyro_reignited_trilogy.nsp` | ✅ работает |
|
||||||
|
| Majora's Mask (2Ship2Harkinian) | `majoras_mask.nsp` | ❌ PAL_SEHException (GPU crash) |
|
||||||
|
| Donkey Kong Country Returns HD | `donkey_kong_country_returns_hd.nsz` | ❓ не проверялся |
|
||||||
|
| Hollow Knight | `hollow_knight.nsp` | ❌ Hash error (битый ROM) |
|
||||||
|
| Hollow Knight: Silksong | `hollow_knight__silksong.nsz` | ❓ |
|
||||||
|
| It Takes Two | `it_takes_two.nsp` | ❓ |
|
||||||
|
| Little Nightmares | `little_nightmares.nsp` | ❓ |
|
||||||
|
| Little Nightmares III | `little_nightmares_iii.nsp` | ❓ |
|
||||||
|
| Luigi Mansion 3 | `luigi_mansion_3.nsp` | ❓ |
|
||||||
|
| Ori and the Will of the Wisps | `ori_and_the_will_of_the_wisps.nsz` | ❓ |
|
||||||
|
| Plants vs. Zombies: Replanted | `plants_vs__zombies__replanted.nsz` | ❓ |
|
||||||
|
| Super Mario 3D All-Stars | `super_mario_3d_all_stars.nsp` | ❓ |
|
||||||
|
| Super Mario 3D World + Bowser Fury | `super_mario_3d_world___bowser_fury.nsz` | ❓ |
|
||||||
|
| Super Mario Bros. Wonder | `super_mario_bros__wonder.nsp` | ❓ |
|
||||||
|
| Super Mario Party | `super_mario_party.nsp` | ❓ |
|
||||||
|
| Super Smash Bros. Ultimate | `super_smash_bros__ultimate.nsz` | ❓ |
|
||||||
|
| Sonic Mania | `sonic_mania.nsp` | ❓ |
|
||||||
|
| The Disney Afternoon Collection | `the_disney_afternoon_collection.nsz` | ❓ |
|
||||||
|
| Unravel Two | `unravel_two.nsz` | ❓ |
|
||||||
|
| Sam & Max Save the World | `sam_and_max_save_the_world.nsp` | ❓ |
|
||||||
|
| Vasilisa and Baba Yaga | `vasilisa_and_baba_yaga.nsz` | ❌ ArgumentOutOfRangeException |
|
||||||
|
| Constance | `constance.nsp` | ❓ |
|
||||||
|
| Hunting Simulator 2 | `hunting_simulator_2.nsz` | ❓ |
|
||||||
|
| Carnivores Dinosaur Hunt | `carnivores_dinosaur_hunt.nsz` | ❌ ArgumentOutOfRangeException |
|
||||||
|
|
||||||
|
**Symlink схема:** плоские симлинки без пробелов в `~/Emulation/roms/switch/` → `/run/media/system/Data/Switch Roms/...` Оригинальные симлинки на папки сохранены для совместимости.
|
||||||
|
|
||||||
**Transmission:** `/data/Switch Roms` (case-sensitive, с пробелом) мапится в `/run/media/system/Data/Switch Roms/` через mount `/data` → `/run/media/system/Data`
|
**Transmission:** `/data/Switch Roms` (case-sensitive, с пробелом) мапится в `/run/media/system/Data/Switch Roms/` через mount `/data` → `/run/media/system/Data`
|
||||||
|
|
||||||
@@ -451,8 +459,13 @@ CACHE="$HOME/.var/app/org.libretro.RetroArch/config/retroarch/system/Mupen64plus
|
|||||||
**Launcher:** `~/Emulation/tools/launchers/ryujinx.sh` — ищет `~/Applications/publish/Ryujinx.sh` → не находит (`.bak`) → запускает `flatpak run io.github.ryubing.Ryujinx`.
|
**Launcher:** `~/Emulation/tools/launchers/ryujinx.sh` — ищет `~/Applications/publish/Ryujinx.sh` → не находит (`.bak`) → запускает `flatpak run io.github.ryubing.Ryujinx`.
|
||||||
**Логирование:** `~/ryujinx-launch.log` — PWD, ARGS, EXE, EXIT_CODE.
|
**Логирование:** `~/ryujinx-launch.log` — PWD, ARGS, EXE, EXIT_CODE.
|
||||||
|
|
||||||
**Статус проверки игр:** pending — сначала починить ключи.
|
**Ryujinx не поддерживает NSZ нативно** — только NSP и XCI. NSZ нужно конвертировать в NSP (SAK / Switch Army Knife) или скачивать NSP версии.
|
||||||
**Следующий шаг:** установить firmware 22.1.0 под свежие prod.keys либо найти title.keys.
|
|
||||||
|
**TODO:**
|
||||||
|
- [ ] Конвертировать NSZ → NSP или найти NSP версии ROMов (Hollow Knight, Василиса, Carnivores и др.)
|
||||||
|
- [ ] Обновить firmware до 22.1.0 под свежие prod.keys
|
||||||
|
- [ ] Найти title.keys (missing `key_area_key_application_14`)
|
||||||
|
- [ ] Проверить все 35 игр после конвертации NSZ → NSP
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,13 @@ systemctl --user start gamescope-session-plus@steam.service
|
|||||||
|
|
||||||
## Единственный правильный способ — vdf.binary_load
|
## Единственный правильный способ — vdf.binary_load
|
||||||
|
|
||||||
|
**Процедура (один py-скрипт, с бэкапом):**
|
||||||
|
|
||||||
|
1. Остановить Steam
|
||||||
|
2. Сделать бэкап shortcuts.vdf
|
||||||
|
3. Отредактировать VDF
|
||||||
|
4. Запустить Steam
|
||||||
|
|
||||||
Использовать модуль `vdf` (установлен на HTPC через pip). **Никогда** не редактировать бинарный VDF через ручную сборку байтов или замену строк — это ломает файл.
|
Использовать модуль `vdf` (установлен на HTPC через pip). **Никогда** не редактировать бинарный VDF через ручную сборку байтов или замену строк — это ломает файл.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
@@ -44,10 +51,10 @@ def compute_appid(name, exe):
|
|||||||
next_idx = str(len(shortcuts))
|
next_idx = str(len(shortcuts))
|
||||||
shortcuts[next_idx] = {
|
shortcuts[next_idx] = {
|
||||||
'AppName': 'Game Name',
|
'AppName': 'Game Name',
|
||||||
'Exe': '/path/to/game.exe',
|
'Exe': '/home/bazzite/Emulation/tools/launchers/ryujinx.sh',
|
||||||
'StartDir': '/path/to/',
|
'StartDir': '/home/bazzite/Emulation/tools/launchers',
|
||||||
'LaunchOptions': '',
|
'LaunchOptions': '/home/bazzite/Emulation/roms/switch/animal_crossing.nsp',
|
||||||
'appid': compute_appid('Game Name', '/path/to/game.exe'),
|
'appid': compute_appid('Game Name', '/home/bazzite/Emulation/tools/launchers/ryujinx.sh'),
|
||||||
'IsHidden': 0,
|
'IsHidden': 0,
|
||||||
'AllowDesktopConfig': 1,
|
'AllowDesktopConfig': 1,
|
||||||
'AllowOverlay': 1,
|
'AllowOverlay': 1,
|
||||||
@@ -105,14 +112,13 @@ cp ~/.steam/steam/userdata/*/config/shortcuts.vdf{,.bak}
|
|||||||
|
|
||||||
После записи VDF — перезапустить Steam, чтобы он подхватил изменения.
|
После записи VDF — перезапустить Steam, чтобы он подхватил изменения.
|
||||||
|
|
||||||
## Wide Steam Grid Posters
|
## Wide Steam Grid Posters — Порядок действий
|
||||||
|
|
||||||
При добавлении новой не-Steam игры — сразу скачивай и **wide** (920×430, `{appid}.png`), а не только poster (600×900, `{appid}p.png`).
|
**Перед остановкой Steam** — сначала скачать все постеры. Так как Steam не нужен для скачивания.
|
||||||
Без wide постером игра выглядит как пустая белая заглушка в основном режиме библиотеки.
|
|
||||||
|
|
||||||
### Naming convention
|
### Постеры для всех форматов
|
||||||
|
|
||||||
Файлы кладутся в `~/.steam/steam/userdata/147839491/config/grid/`:
|
При добавлении новой не-Steam игры — сразу скачивай все 4 формата:
|
||||||
|
|
||||||
| Размер | Формат файла | Назначение |
|
| Размер | Формат файла | Назначение |
|
||||||
|--------|-------------|------------|
|
|--------|-------------|------------|
|
||||||
@@ -123,6 +129,8 @@ cp ~/.steam/steam/userdata/*/config/shortcuts.vdf{,.bak}
|
|||||||
|
|
||||||
**Unsigned appid** = `signed_appid & 0xFFFFFFFF`. Пример: `-1321720074` → `2973247222`.
|
**Unsigned appid** = `signed_appid & 0xFFFFFFFF`. Пример: `-1321720074` → `2973247222`.
|
||||||
|
|
||||||
|
→ Подробно: [[htpc-steam-nonsteam-shortcuts]]
|
||||||
|
|
||||||
### Процедура (как делал Whale)
|
### Процедура (как делал Whale)
|
||||||
|
|
||||||
1. **Найти постеры на SteamGridDB** — зайти на `https://www.steamgriddb.com/game/<ID>`, отфильтровать по 920×430.
|
1. **Найти постеры на SteamGridDB** — зайти на `https://www.steamgriddb.com/game/<ID>`, отфильтровать по 920×430.
|
||||||
|
|||||||
Reference in New Issue
Block a user