[2026-06-21] eagle: family/how-to/htpc-emulators-setup.md family/how-to/htpc-steam-nonsteam-shortcuts.md

This commit is contained in:
Alexey Martemyanov
2026-06-21 15:00:32 +06:00
parent 10fa035a34
commit 1051f11626
2 changed files with 24 additions and 15 deletions
+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`: