[2026-06-07] native non-Steam pitfalls — mount namespace, stderr, libmp3lame
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user