[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:
Taiga
2026-06-21 09:03:49 +00:00
parent 7940dc29aa
commit 88ff94e173
2 changed files with 24 additions and 15 deletions
+1 -1
View File
@@ -412,7 +412,7 @@ CACHE="$HOME/.var/app/org.libretro.RetroArch/config/retroarch/system/Mupen64plus
| Игра | ROM slug | Статус |
|------|----------|--------|
| Animal Crossing New Horizons | `animal_crossing.nsp` | |
| 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` | ✅ работает |
+23 -14
View File
@@ -16,38 +16,46 @@ systemctl --user start gamescope-session-plus@steam.service
Если после stop Steam всё ещё активен — повторить.
## Единственный правильный способ — vdf.binary_load
## Процедура (один bash-скрипт)
**Процедура (один py-скрипт, с бэкапом):**
1. Остановить Steam
2. Сделать бэкап shortcuts.vdf
3. Отредактировать VDF
4. Запустить Steam
Один скрипт на HTPC: останавливает Steam → делает бэкап → редактирует VDF → запускает Steam.
Использовать модуль `vdf` (установлен на HTPC через pip). **Никогда** не редактировать бинарный VDF через ручную сборку байтов или замену строк — это ломает файл.
```bash
#!/bin/bash
set -e
# 1. Остановить Steam
systemctl --user stop gamescope-session-plus@steam.service
sleep 2
# 2. Бэкап
cp ~/.steam/steam/userdata/147839491/config/shortcuts.vdf{,.bak}
# 3. Редактировать VDF (скрипт лежит рядом)
python3 /path/to/edit_vdf.py
# 4. Запустить Steam
systemctl --user start gamescope-session-plus@steam.service
```
Python-скрипт (`edit_vdf.py`):
```python
import os, vdf, shutil, binascii, struct
vdf_path = os.path.expanduser('~/.steam/steam/userdata/147839491/config/shortcuts.vdf')
# 1. Бэкап
shutil.copy2(vdf_path, vdf_path + '.bak')
# 2. Загрузить существующий
with open(vdf_path, 'rb') as f:
data = vdf.binary_load(f)
shortcuts = data.get('shortcuts', {})
# 3. Вычислить appid (алгоритм Steam)
def compute_appid(name, exe):
key = exe + name
top = binascii.crc32(key.encode('utf-8')) | 0x80000000
return struct.unpack('i', struct.pack('I', top))[0]
# 4. Создать entry
next_idx = str(len(shortcuts))
shortcuts[next_idx] = {
'AppName': 'Game Name',
@@ -68,12 +76,13 @@ shortcuts[next_idx] = {
'tags': {},
}
# 5. Записать
data['shortcuts'] = shortcuts
with open(vdf_path, 'wb') as f:
vdf.binary_dump(data, f)
```
Скрипты на HTPC загружать через scp, не через heredoc.
## CompatToolMapping (Proton) в config.vdf
После добавления shortcut нужно прописать Proton в текстовом `config.vdf`: