diff --git a/family/how-to/htpc-steam-nonsteam-shortcuts.md b/family/how-to/htpc-steam-nonsteam-shortcuts.md index be4c9655..b2b6c42c 100644 --- a/family/how-to/htpc-steam-nonsteam-shortcuts.md +++ b/family/how-to/htpc-steam-nonsteam-shortcuts.md @@ -1,95 +1,90 @@ -# Non-Steam Shortcuts через Binary VDF +# Non-Steam Shortcuts через VDF -## Формат файла +## Главное правило -Shortcuts хранятся в бинарном VDF: -`~/.steam/steam/userdata/147839491/config/shortcuts.vdf` +**Steam должен быть выключен** перед записью shortcuts.vdf. Если Steam работает — он перезапишет файл из памяти при следующем запуске. -**Это НЕ текстовый файл** — редактировать через обычную замену строк нельзя, потому что: -- Каждое поле хранится с длиной строки -- Замена строки на другую длины ломает весь файл -- Steam после запуска может перезаписать сломанный файл, удалив все non-Steam игры +## Единственный правильный способ — vdf.binary_load -## Безопасный способ — Python +Использовать модуль `vdf` (установлен на HTPC через pip). **Никогда** не редактировать бинарный VDF через ручную сборку байтов или замену строк — это ломает файл. ```python -import os, struct +import os, vdf, shutil, binascii, struct vdf_path = os.path.expanduser('~/.steam/steam/userdata/147839491/config/shortcuts.vdf') -# 1. Всегда делать бэкап -import shutil +# 1. Бэкап shutil.copy2(vdf_path, vdf_path + '.bak') +# 2. Загрузить существующий with open(vdf_path, 'rb') as f: - data = bytearray(f.read()) + data = vdf.binary_load(f) -# Helper: string field -def sf(name, value): - nb = name.encode() + b'\x00' - vb = value.encode() + b'\x00' - return bytes([0x01, len(nb)]) + nb + bytes([len(vb)]) + vb +shortcuts = data.get('shortcuts', {}) -# Helper: int field -def zf(name, value): - nb = name.encode() + b'\x00' - vb = struct.pack(' 2000000000 чтобы не конфликтовать с реальными Steam AppID) +## Бэкап + +Автоматический бэкап `shortcuts.vdf` делается ежедневно скриптом `backup-saves.sh` на HTPC, версии хранятся в `/run/media/bazzite/Data/backups/saves/shortcuts/` (последние 30 копий). + +## Перезагрузка Steam + +После записи VDF — перезапустить Steam, чтобы он подхватил изменения.