Имеется Arch Linux со Steam (см. Arch Linux: установка Steam).
Имеется Civilization V – моя любимейшая игра (хотя в стимовской версии наиграно всего 778 часов).
Драйвера NVIDIA, большинство игр работают без проблем, даже World Of Tanks, а вот Цивилизация не хотела запускаться никак.
Проблема существует давно, но как-то всё не доходили руки зафиксить, т.к. на компе всё-равно есть Win 10 второй системой, а играю крайне редко.
Проблема и решение не специфичны для Arch Linux, и решение должно работать на любой Linux-системе.
Собственно ошибки при запуске выглядят так:
...
Game update: AppID 8930 "", ProcID 1463098, IP 0.0.0.0:0
Starting app 8930
>>> Adding process 1463098 for game ID 8930
GameAction [AppID 8930, ActionID 2] : LaunchApp changed task to WaitingGameWindow with ""
ERROR: ld.so: object '/home/setevoy/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/setevoy/.local/share/Steam/ubuntu12_64/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS64): ignored.
GameAction [AppID 8930, ActionID 2] : LaunchApp changed task to Completed with ""
>>> Adding process 1463099 for game ID 8930
...
[0427/121055.396740:ERROR:frame_sink_video_capturer_impl.cc(206)] Invalid resolutions constraints: 0x0 must not be greater than 0x0; and also within media::limits.
Game removed: AppID 8930 "", ProcID 1463099
...
Uploaded AppInterfaceStats to Steam
Exiting app 8930
Помню, что когда пытался запустить её в первый раз, ещё только после установки Steam – гуглил ошибки “from LD_PRELOAD cannot be preloaded“, и гугление ни к чему не привело.
Но сегодня вдруг обратил таки внимание на строку:
[0427/121055.396740:ERROR:frame_sink_video_capturer_impl.cc(206)] Invalid resolutions constraints: 0x0 must not be greater than 0x0; and also within media::limits.
Что привело к вот этому обсуждению, от 22 фев. 2018 (!)
Собственно решение – просто убрать видеоролик, который запускается заставкой при загрузке игры, так как из-за того, что ядер всего 4, и у каждого один поток – падает BinkPlayer, см. Civ5-LinuxPatch.md:
lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
Address sizes: 39 bits physical, 48 bits virtual
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
...
Переходим в каталог игры:
cd .local/share/Steam/steamapps/common/Sid\ Meier\'s\ Civilization\ V
Переименовываем все файлы видео .mov
в .mov_bak
:
for m in `find . -name \*.mov -type f`; do mv "$m" "$m"_bak; done
Собственно, вот они:
find . -name *_bak
./steamassets/civ5_opening_movie_en_us.mov_bak
./steamassets/civ5_opening_movie_fr_fr.mov_bak
./steamassets/civ5_opening_movie_de_de.mov_bak
./steamassets/assets/dlc/expansion2/civ5xp2_opening_movie_en_us.mov_bak
./steamassets/assets/dlc/expansion/civ5xp_opening_movie_en_us.mov_bak
И запускаем игру:

Готово.