Files
obsidian-vault/family/how-to/htpc-bazzite-proton.md
T

457 lines
25 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
confidence: medium
created: '2026-05-23'
namespace: personal
sources:
- family/projects/htpc-windows-games-fix.md
tags:
- htpc
- infra
- how-to
- pitfalls
- vk-play
- atomic-heart
- vdf
- doom
title: HTPC Bazzite — Proton Compatibility
type: tech
updated: '2026-06-01'
---
# HTPC Bazzite — Windows Game Proton Compatibility
Bazzite HTPC at `bazzite@192.168.1.86`. 39 non-Steam Windows games added as
Steam shortcuts (2026-05-22). Default tool: Proton Experimental; older titles
on Proton 8.0.
---
## Working ✅
- Fallout 4
- Vladik Brutal
- Red Alert 3
- **Rayman Origins** (fixed 2026-05-23 — GE-Proton10-34 + `WINEDLLOVERRIDES=\"d3d9=b\" %command%`)
- Samurai Gunn (works but **gamepad not detected**)
- GTA V, Cuphead (assumed; not retested)
- **VK GameCenter** (GE-Proton10-34, `Data/gamecenter/GameCenter/`)
- **Discworld Noir (NQ)** — работает, сейвы грузятся ✅
- **Doom 3 BFG** (через flatpak Classic-RBDOOM-3-BFG)
- **Worms W.M.D (native Linux)** — ✅ запускается (MojoSetup-инсталлятор, rutracker, не Proton)
## Removed from Steam shortcuts ✅
- Human Fall Flat (3928445186) — already in real Steam
- Shovel Knight (2526703384) — already in real Steam
## Mapped to GE-Proton10-34 but still broken
| Game | AppID | Symptom | Diagnosis | LaunchOpt set |
|------|-------|---------|-----------|---------------|
| Brawlhalla | 2410005953 | Doesn't start | — | `WINEDLLOVERRIDES=\"msvcp140,vcruntime140=n,b\"` |
| Castle Crashers | 3048471472 | "crash, mini dump sent" | — | `WINEDLLOVERRIDES=\"msvcp140,vcruntime140=n,b\"` |
| Worms World Party Remastered | 2401592779 | Лог: `Steam denied appID 2401592779`. **Вывод:** GOG, `w2.exe` со вшитым Steamworks SDK — игра дёргает `SteamAPI_Init()` с хардкодом 270910, Steam проверяет лицензию → denied. `steam_appid.txt` не помогает. Фундаментально неработоспособна через Proton как non-Steam без обхода Steam API. | — | `WINEDLLOVERRIDES=\"msvcp140,vcruntime140=n,b\"` |
| Duck Game | 2926094216 | Won't launch | — | `WINEDLLOVERRIDES=\"msvcp140,vcruntime140=n,b\"` |
## Epic Games & GOG — Heroic Launcher
### Игры
| Игра | Источник | Статус |
|------|----------|--------|
| GTA V | Epic Games | ✅ уже в списке (Working) |
| Fall Guys | Epic Games | 📥 к установке |
| Borderlands: The Handsome Collection | Epic Games | 📥 к установке |
| Sid Meier's Civilization® VI | Epic Games | 📥 к установке |
| Grand Theft Auto V: Premium Edition | Epic Games | 📥 к установке (дубль GTA V?) |
| Hitman Absolution | GOG.com | ⬇️ скачивается |
### Как установить Epic Games игры через Heroic
1. **Установить Heroic Games Launcher** (если ещё нет):
```bash
flatpak install flathub com.heroicgameslauncher.hgl
```
2. **Войти в Epic Games:**
Heroic → Login → Epic Games → авторизация через браузер
3. **Установить игру:**
Library → найти игру → Install → выбрать путь:
`/run/media/system/Data/games/`
4. **Настроить Proton:**
Heroic → игра → Settings → Wine → выбрать GE-Proton
(скачать через Heroic → Wine Manager если ещё нет)
5. **Добавить в Steam для Gaming Mode:**
Heroic → игра → правая кнопка → Add to Steam
Игра появится как non-Steam shortcut, запускается через gamescope
6. **Обложки:**
После добавления в Steam запустить `fix_artwork.py` для арта с SteamGridDB
### GOG игры через Heroic
Аналогично Epic — Heroic поддерживает GOG нативно:
1. Heroic → Login → GOG → авторизация
2. Library → GOG tab → Install
---
## Target:
## Unravel — EA App, вылет после "preparing game"
**Steam AppID:** 1225560
**Статус:** broken — вылетает после "preparing game" на GE-Proton10-34
### План фикса
1. **Заменить EAappInstaller.exe** — скачать свежий (~2 MB) с [EA CDN](https://origin-a.akamaihd.net/EA-Desktop-Client-Download/installer-releases/EAappInstaller.exe) и переписать:
```
/run/media/system/Data/Steam/steamapps/common/Unravel/__Installer/Origin/redist/internal/EAappInstaller.exe
```
2. **Включить GE-Proton10-34** для Unravel (Properties → Compatibility → Force GE-Proton10-34)
3. **Launch Options:** `PROTON_USE_WINED3D=1 %command%`
4. После запуска — EA app установится, привязать аккаунт EA к Steam, дальше работает
### Источник
[Steam Guide — Unravel on Linux](https://steamcommunity.com/sharedfiles/filedetails/?id=3695395873) (Foxidy Fox, 2026-03-29)
## Still broken — fundamental issues
| Game | AppID | Symptom | What's known | What might help |
| ---------------------- | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------------------------------------------- |
| FPC Atomic Bomberman ✅ | -1009122144 (unsigned: 3285845152) | Native Linux SDL-порт (FPC). Работает: геймпад, музыка. Причина: `sleep 5` в LaunchOptions. Win95-шорткат (BM95.EXE) удалён. Артворки скопированы. | Путь в `/run/media/bazzite/Data/Games/fpc_atomic/`. | ✅ Фикс: `sleep 5 && LD_LIBRARY_PATH=/run/media/bazzite/Data/Games/fpc_atomic %command%` |
| Atomic Heart VK | — | ✅ Авторизация сделана, игра обновлена. Запуск тестируется. | 97GB, GameCenter, shared prefix | — |
| Final Fantasy X HD | 2642741094 | Was Japanese, no saves | `GameSetting.ini` replaced (en+HD) from Windows | Test pending |
| Metal Slug X | 2938712902 | Speed wrong, controls dead | Neo-Geo emulator config issue, not Wine | — |
| Split Second | 3871231787 | Green artifacts | `PROTON_USE_WINED3D=1` | Switch to GE-Proton; copy `d3dx9_*.dll` |
| Super Bomberman R2 | 3340354231 | Gamepad not detected | Steam Input config issue | — |
## Gamepad Issues
- **Samurai Gunn, Super Bomberman R2**: not detected → Steam Input "Force Off" / "Use Default" cycle; or `SDL_GAMECONTROLLER_ALLOW_STEAM_VIRTUAL_GAMEPAD=1`
- **Metal Slug X**: wrong speed in Neo-Geo wrapper
---
## Common Fix Recipes
### "Doesn't start" → try vcrun2019
```
protontricks <AppID> vcrun2019 d3dcompiler_47
```
### XNA 4.0 games (Duck Game, etc.)
```
protontricks <AppID> xna40
```
### DOS-era games
Proton won't work. Use **Steam Tinker Launch** → wrap with DOSBox (dosbox-staging).
### Non-Steam copy of a Steam game
Game needs `steam_api64.dll` emulator:
1. Drop in Goldberg `steam_api64.dll`
2. Add `steam_appid.txt` with the real App ID
### Cyrillic encoding issues (e.g. Discworld Noir)
Try in order:
1. `LANG=ru_RU.UTF-8 %command%`
2. `WINEDLLOVERRIDES=\"gdiplus=n,b\"`
3. Install `ttf-mscorefonts` + set Cyrillic codepage in Wine registry
### White screen / broken D3D9 (Rayman Origins, Split Second)
```
PROTON_USE_WINED3D=1 %command%
```
Or try `WINEDLLOVERRIDES=\"d3d9=b\"` or an older Proton version.
### Doom 3 BFG Edition — чёрные текстуры, краш после интро
Proton ломает текстуры — известный регресс. **Фикс:** Luxtorpeda → rbdoom-3-bfg (native Linux engine).
---
## VK Play / VK GameCenter на Bazzite
### Аккаунты VK Play
- **Основной:** `xxxellam@gmail.com` — Google, залогинен на Bazzite
- **Дополнительный:** `mallexxx@mail.ru` — подключён к VK Play
### Общая схема
VK Play версии игр запускаются через лаунчер VK GameCenter (`GameCenter.exe`) поверх Proton. Лаунчер отвечает за авторизацию и лицензирование (в т.ч. Denuvo-эмуляцию).
Известно:
- VK Play официально подтвердил совместимость Atomic Heart со Steam Deck/Proton.
- Для авторизации используется `mycomgames://` URL-схема. На HTPC без Steam Deck API может потребоваться ручной ввод логина/пароля.
- Альтернатива: Lutris с конфигом из gist.github.com/keyCat (обработчик `mycomgames://` схемы).
- Перед первым запуском может понадобиться `protontricks -555655402 vcrun2019`.
### Как добавить VK Play игру
1. Запустить VK GameCenter через Steam (GE-Proton10-34)
2. Авторизоваться в VK Play
3. Установить игру через лаунчер (Atomic Heart уже установлен)
4. После авторизации игра появится в библиотеке VK Play
### Lutris login workaround (shared prefix with Steam/Proton)
**Проблема:** Steam CEF browser не умеет обрабатывать `mycomgames://` URL-схему, необходимую для OAuth-логина VK Play. При клике "Login" — `ERR_NETWORK_IO_SUSPENDED`.
**Решение:** использовать Lutris для первичной авторизации, потом запускать игру через Steam/Proton.
### Implementation status (2026-05-28)
Все компоненты настроены через SSH (Kraken → HTPC). Последний шаг (логин) требует GUI-сеанса на HTPC.
| Component | Status | Notes |
|-----------|--------|-------|
| `d:` dosdevices symlink (→ Data) | ✅ | `/run/media/bazzite/Data` |
| `handle-vkplay-scheme` script | ✅ | `~/.local/bin/` — обрабатывает `mycomgames://` через Proton 10.0 |
| `.desktop` → MIME `x-scheme-handler/mycomgames` | ✅ | Зарегистрирован на `Vkplay-scheme-handler.desktop` |
| Lutris flatpak | ✅ | `flathub net.lutris.Lutris` |
| Lutris game config (shared prefix) | ✅ | `~/.config/lutris/games/vk-play-shared.yml` |
| `start-vk.cmd` in Proton prefix | ✅ | `drive_c/VKPlay/gamecenter/start-vk.cmd` |
| Steam shortcut VK GameCenter | ✅ | AppID=-1973339958, GE-Proton10-34 |
| Steam shortcut Atomic Heart VK | ✅ | AppID=-1973339958 (через GameCenter) |
| Atomic Heart installed (97GB) | ✅ | `/run/media/bazzite/Data/gamecenter/atomic heart/` |
**Статус (2026-06-07):** ✅ Авторизация через Lutris выполнена. Игра обновлена. Запуск проверяется.
1. Установить Lutris через flatpak:
```
flatpak install flathub net.lutris.Lutris
```
2. Создать кастомный пресет VK GameCenter в Lutris, указав **тот же Wine prefix**, что использует Steam:
```
~/.local/share/Steam/steamapps/compatdata/-1973339958/pfx/
```
3. Зарегистрировать `mycomgames://` protocol handler — поместить .desktop-файл, который ассоциирует схему с Lutris:
- Референс: https://gist.github.com/keyCat/a77b1d4d1e0f651b9d3a9818e7f739c5
4. Выполнить логин через Lutris — откроется внешний браузер, авторизация сработает, редирект `mycomgames://` попадёт в Lutris.
5. После успешного логина запускать игру через Steam — токен уже лежит в shared prefix, `mycomgames://` больше не нужен.
**Почему shared prefix:** игра (Atomic Heart, 97GB) НЕ копируется — она уже установлена в `/run/media/bazzite/Data/gamecenter/atomic heart/` через Steam-версию VK GameCenter. Lutris будет использовать тот же префикс, где уже есть dosdevices symlink `d:` → `/run/media/bazzite/Data` и все токены авторизации.
---
## How to Add a Non-Steam Game via VDF
Выполнять все одним py скриптом написанным локально и загруженным через scp!
**Шаг 0: Остановить Steam**
```
systemctl --user stop gamescope-session-plus@steam.service
```
**Шаг 1: Прочитать shortcuts.vdf backup**
AppID в shortcuts.vdf — signed int32. В config.vdf CompatToolMapping — unsigned uint32.
```python
import vdf
# read backup
with open('shortcuts.vdf.bak-eagle', 'rb') as f:
d = vdf.binary_loads(f.read())
# edit d['shortcuts']
# write
with open('shortcuts.vdf', 'wb') as f:
f.write(vdf.binary_dumps(d))
```
**Шаг 2: Добавить CompatToolMapping в config.vdf**
Unsigned appid = signed & 0xFFFFFFFF.
**Шаг 3: Проверить**
**Критически важно:**
- Редактировать ТОЛЬКО при остановленном Steam
- Делать бэкап **до** изменений
- `vdf.binary_loads` — регистрозависим: `AppName`, `Exe`, а не `appname`, `exe`
---
## VDF Troubleshooting
### shortcuts.vdf испорчен (все записи пустые)
Steam перезаписывает VDF при старте если не понимает ручные правки. Восстанавливай из бэкапа.
**Бэкапы** (в `~/.steam/steam/userdata/147839491/config/`):
| Файл | Дата | Entries | Примечание |
|------|------|---------|------------|
| `shortcuts.vdf.bak-eagle` | 23 мая 18:32 | 106 | **Последний чистый бэкап** — не тронут |
| `shortcuts.vdf.bak-launch` | 22 мая 22:25 | 108 | Старый, без Atomic Heart |
| `shortcuts.vdf.whale-restored-YYYY-MM-DD` | по ситуации | 108 | Текущее состояние после восстановления |
| `/run/media/bazzite/Data/backups/saves/shortcuts/shortcuts.vdf.YYYY-MM-DD` | daily | — | Автоматический через saves-backup.service |
Проверка бэкапа:
```python
import vdf
with open("shortcuts.vdf.bak-eagle", "rb") as f:
d = vdf.binary_loads(f.read())
named = sum(1 for e in d["shortcuts"].values() if e.get("AppName"))
print(f"{named} named entries")
```
### VDF Incident — 2026-05-27 (разбор)
**Что произошло:** при попытке добавить VK GameCenter + Atomic Heart VK через Python vdf на работающем Steam, Steam переписал файл при старте, создав 110 пустых записей-заглушек.
**Почему бэкапы тоже пустые:** все бэкапы были сделаны уже после того как Steam испортил файл. Единственный выживший — `bak-eagle` (23 мая, до начала экспериментов).
**Как нашли:** hexdump показал имена игр, но `vdf.binary_loads` не видел их — проблема в регистре ключей (`AppName`, а не `appname`).
**Как восстановили:**
1. Остановлен Steam
2. Считан `bak-eagle` (106 записей) + добавлены VK GameCenter (index 106) и Atomic Heart VK (index 107)
3. Обнаружено что config.vdf уже имеет CompatToolMapping с другими appid от предыдущих попыток
4. Перегенерация с appid, совпадающими с config.vdf
5. Удалены дублирующиеся unsigned записи из config.vdf
6. Создан `shortcuts.vdf.whale-restored-2026-05-27`
**Уроки:**
- Только при остановленном Steam
- Бэкап ДО изменений
- Проверять signed↔unsigned соответствие
- Регистр ключей в vdf.binary_loads
---
## Key Infra Notes
- **shortcuts.vdf**: `~/.steam/steam/userdata/147839491/config/shortcuts.vdf` (binary VDF)
- **config.vdf**: `~/.steam/steam/config/config.vdf` (text VDF, CompatToolMapping block)
- **Wine prefix**: `~/.local/share/Steam/steamapps/compatdata/<AppID>/pfx/`
- **protontricks**: Flatpak, needs `flatpak override --user --filesystem=/var/home/bazzite/.local/share/Steam`
- **Background jobs**: `systemd-run --user --unit=<name>`
- **GE-Proton**: extract tar.gz into `~/.steam/steam/compatibilitytools.d/`, restart Steam
### saves-backup.service
Systemd user service (`/etc/systemd/user/saves-backup.service`):
- Ежедневный rsync Steam userdata
- Копия shortcuts.vdf в `/run/media/bazzite/Data/backups/saves/shortcuts/shortcuts.vdf.YYYY-MM-DD`
- Ротация: удаление старше 30 дней
---
## Fixes Done (filesystem / config / cover-art)
- Cover art swapped: Atomic Bomberman, Discworld Noir, SBR2, FFVI, ALttP, Sunset Riders
- "Captain Commando" → "Sunset Riders"
- CompatToolMapping for all AppIDs:
- **GE-Proton10-34**: Brawlhalla, Castle Crashers, Worms WMD/WP, Duck Game, Rayman Origins, VK GameCenter, Atomic Heart VK, insaneramzes Atomic Heart
- **Proton 8.0**: Atomic Bomberman, Discworld Noir, Metal Slug X, Soldat, Red Alert 3, Split Second
- **Luxtorpeda**: Doom 3 BFG
- **Proton Experimental**: ~24 remaining games
- Doom 3 BFG → Luxtorpeda (rbdoom-3-bfg, 2026-05-27)
- Rayman Legends: Ubisoft Connect + registry fix
- Discworld Noir: symlink, Cyrillic locale, missing files, drive D: as CD-ROM
- FFX HD: English `GameSetting.ini`
- VC++ runtime + d3dcompiler DLLs copied into 6 prefixes from Windows partition
- Duck Game: XNA 4.0 framework dir copied
- Atomic Bomberman: cover art swapped (FPC native, BM95.EXE удалён)
- GE-Proton10-34 installed
## Source Assets (Windows partition)
- Ubisoft Game Launcher: `/run/media/bazzite/Windows/Program Files (x86)/Ubisoft/`
- System DLLs: `/run/media/bazzite/Windows/Windows/System32/`, `SysWOW64/`
- XNA 4.0: `/run/media/bazzite/Windows/Program Files (x86)/Microsoft XNA/`
- .NET 4.0: `/run/media/bazzite/Windows/Microsoft.NET/Framework64/v4.0.30319/`
- Discworld Noir source: `/run/media/bazzite/Data/downloads/zatmenie v2 [torrents.ru]/`
- **Discworld Noir (скачан 2026-05-29):** `/run/media/bazzite/Data/downloads/Discworld Noir.isz` (ISZ, 1.1GB, Alcohol 120%)
- **Discworld (оригинал, скопирован 2026-05-29):** `/run/media/bazzite/Data/downloads/DISCWORLD.iso` (ISO, 434MB) — с TrueNAS `/mnt/RED_2TB/backup/Downloads/Distr/games/DISCWORLD.iso`
- FFX settings: `/run/media/bazzite/Windows/Users/mallexxx/documents/square enix/...`
---
## Discworld Noir (NQ repack) — настроен ✅
**Статус:** работает — запускается, сейвы грузятся
**Источник:** `Discworld Noir.isz` (Alcohol 120%, 1.1 GB) с Яндекс.Диска — пропатченный репак с фиксом "insert disk III"
**Папка:** `/run/media/bazzite/Data/Games/discworld_noir_nq/`
- `tin3_dxd.exe` — оригинальный (560160 bytes, не Loma fix)
- `cd1/`, `cd2/` — оба диска (по 313 файлов, merged)
- `DN_Setting_*.exe`, `cw3220.dll`, `dwnoir.dll`
**Proton prefix:** `compatdata/2973247222/pfx/` (unsigned от appid `-1321720074`)
**Symlink:** `C:\Discworld Noir` → `/run/media/bazzite/Data/Games/discworld_noir_nq/`
**Registry:** `[Software\Wow6432Node\Perfect Entertainment\Discworld Noir]` — все пути `C:\Discworld Noir`
**Steam shortcut:** Index 108, Exe = Linux-путь напрямую, GE-Proton10-34
**Ключевой фикс — fstab монтирование:**
Сейвы не грузились (Load задизейблен, `sg.1` создавался но не читался). Решилось перемонтированием Data через `/etc/fstab`:
```fstab
UUID=01D99C23361E63D0 /run/media/bazzite/Data ntfs-3g uid=1000,gid=1000,fmask=113,dmask=002,noatime,exec 0 2
```
udisks2 давал неверные права для Proton I/O. После fstab NTFS стал регистрозависимым — `Games` с большой буквы, `Downloads` с большой буквы.
**Что не сработало:**
- Loma fix — спиннер / кривая палитра
- Dolomite (`ddraw.dll`) — не влияет на меню
## Original Discworld (ScummVM) — работает ✅
**Статус:** работает — запускается через Steam shortcut
**Источник:** `DISCWORLD.iso` (434 MB) с TrueNAS → распакован в `/run/media/bazzite/Data/Downloads/discworld_iso/`
**Steam shortcut:** Index 107, Exe = `scummvm.sh` → flatpak `org.scummvm.ScummVM`, CompatToolMapping не нужен (native Linux)
**Game ID:** `tinsel:dw` — ScummVM 2026.2.0, engine-qualified
**LaunchOptions:** `-f -p "/run/media/bazzite/Data/Downloads/discworld_iso/DISCWLD" tinsel:dw`
**Путь к данным:** `/run/media/bazzite/Data/Downloads/discworld_iso/DISCWLD/` — внутри `.GRA` файлы
**Что было сломано:**
1. Прописан `dw1` — ScummVM 2026.2.0 требует engine-qualified ID `tinsel:dw`
2. Путь указывал на корень `discworld_iso/` — файлы лежат в `DISCWLD/`
3. После fstab путь был с маленькой буквы `downloads` — NTFS стал регистрозависимым
## Open Questions
1. Delete `pfx/` folders for still-broken GE-Proton games (Brawlhalla, Castle Crashers, Worms WMD/WP, Duck Game)
|2. ~~FPC Atomic Bomberman~~ ✅ фикс: `sleep 5 &&` в LaunchOptions
2. **Atomic Heart VK:** test VK Play авторизацию, при необходимости `protontricks vcrun2019`
---
## FPC Atomic Bomberman — Native Linux ✅
**Не Proton.** Нативный SDL-порт (Free Pascal). Всё работает.
### Расположение
- **Папка:** `/run/media/bazzite/Data/Games/fpc_atomic/`
- **Бинарник:** `fpc_atomic` (8.9MB)
- **Steam shortcut:** Index 107, unsigned AppID `3285845152`
- **Steam LaunchOptions:** `LD_LIBRARY_PATH=/run/media/bazzite/Data/Games/fpc_atomic sleep 5 && LD_LIBRARY_PATH=/run/media/bazzite/Data/Games/fpc_atomic %command%`
### Почему sleep 5
Steam Virtual Gamepad создаётся с задержкой после старта Steam-сессии. FPC Atomic вызывает `SDL_Init` сразу при запуске и сканирует SDL-устройства. Если Virtual Gamepad ещё не появился — `ResolveGameControllerNameToIndex()` возвращает `-1` и геймпад не работает. `sleep 5` перед запуском игры даёт Steam время создать виртуальный геймпад.
### SDL2
- Библиотеки (`libbass.so`, `libsdl2.so`) лежат в папке игры
- `LD_LIBRARY_PATH` указывает на `/run/media/bazzite/Data/Games/fpc_atomic/`
- SDL2-devel не ставится на Bazzite (exclude-filtered mesa-libGLU-devel), но системная SDL2 работает
### Анимации взрывов
- `ani.zip` (xplode18-21 ANIs) — скачан через HTPC (Cloudflare на Mac блокирует geocities)
### Конфиг
- `~/.config/fpc_atomic/fpc_atomic.cfg`
- Настройки геймпада сохраняются и не сбрасываются
- `SDL_Name=Steam Virtual Gamepad`, `SDL_NameIndex=0`, `SDL_IsGameController=1`
### Артворки
Скопированы с удалённого BM95.EXE шортката (unsigned appid `2875360586` → `3285845152`):
- `3285845152_hero.png`
- `3285845152_logo.png`
- `3285845152.png`
- `3285845152p.png`
## See Also
[[personal-os-architecture]] [[obsidian-mcp-wrapper]] [[family/how-to/htpc-steam-nonsteam-shortcuts]]