[2026-06-07] native non-Steam pitfalls — mount namespace, stderr, libmp3lame

This commit is contained in:
Alexey Martemyanov
2026-06-07 15:19:12 +06:00
parent 9ca9c06b2d
commit c8043eefe4
@@ -4,6 +4,59 @@
**Steam должен быть выключен** перед записью shortcuts.vdf. Если Steam работает — он перезапишет файл из памяти при следующем запуске.
## Подводные камни native Linux shortcut'ов (Worms W.M.D case)
### Проблема: Steam не видит `/run/media/system/Data/`
Steam, запущенный через `gamescope-session-plus`, работает в изолированном mount namespace. Путь `/run/media/system/Data/` (btrfs-подраздел) может быть **не виден** Steam-процессу.
**Симптом:** нажимаешь Play → `chdir` в логах есть, `exit code 0` мгновенно, игра не стартует. `/tmp/worms_stderr.log` не создаётся — значит `run.sh` даже не запустился.
**Причина:** Steam проверяет существование `exe` файла перед запуском native shortcut. Если файл не найден — `steam-launch-wrapper` завершается с кодом 0 без ошибки. Для Proton shortcut'ов эта проверка не делается — Steam передаёт путь внутрь Proton.
**Решение:** не указывать `exe` на `/run/media/system/Data/...`. Вместо этого:
1. Создать symlink в `/home/bazzite/`:
```bash
ln -sf /run/media/system/Data/Games/.../run.sh /home/bazzite/game_name.sh
```
2. В VDF прописать `exe = /home/bazzite/game_name.sh`, `StartDir = /home/bazzite/`.
3. `/home/bazzite/` виден из любого mount namespace.
### Проблема: `run.sh` глушит stderr
Многие native Linux игры (особенно старые MojoSetup-инсталляторы) имеют в `run.sh`:
```sh
exec ./binary 2>/dev/null "$@"
```
`2>/dev/null` скрывает все ошибки. Steam логи не показывают stderr дочернего процесса.
**Решение:** убрать `2>/dev/null` из `run.sh`. Если нужно дебажить — перенаправить в файл:
```sh
exec ./binary 2>/tmp/game_stderr.log "$@"
```
### Проблема: старая `libmp3lame.so.0` без нужного символа
Старые native игры тащат свою `libmp3lame.so.0` (2019-2020), в которой нет символа `lame_encode_buffer_interleaved_int`. Системная `libsndfile.so.1` (Fedora 43) требует этот символ.
**Симптом:** `symbol lookup error: /lib64/libsndfile.so.1: undefined symbol: lame_encode_buffer_interleaved_int`
**Причина:** линковщик загружает игровую `libmp3lame.so.0` из `data/lib/` (старая, без символа), а `libsndfile.so.1` из `/lib64/` — и находит уже загруженную старую копию.
**Решение:** заменить игровую `libmp3lame.so.0` на системную:
```bash
cp /lib64/libmp3lame.so.0 /run/media/system/Data/Games/.../data/lib/libmp3lame.so.0
```
### Статус Worms W.M.D (native Linux)
- **Версия:** MojoSetup-инсталлятор с rutracker (Worms W.M.D [239.583366] [Native])
- **Путь:** `/run/media/system/Data/Games/Worms W.M.D Native/Worms W.M.D/`
- **Symlink:** `/home/bazzite/worms_wmd.sh → .../run.sh`
- **Steam shortcut:** entry 109, appid = -364361099 (unsigned: 3930606197)
- **LaunchOptions:** `%command%`
- **Статус:** ✅ запускается
## Остановка Steam (Bazzite game session)
```bash