[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:
@@ -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` | ✅ работает |
|
||||
|
||||
@@ -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`:
|
||||
|
||||
Reference in New Issue
Block a user