Имеется Arch Linux со Steam (см. Arch Linux: установка Steam).
Имеется Civilization V – моя любимейшая игра (хотя в стимовской версии наиграно всего 778 часов).
Драйвера NVIDIA, большинство игр работают без проблем, даже World Of Tanks, а вот Цивилизация не хотела запускаться никак.
Проблема существует давно, но как-то всё не доходили руки зафиксить, т.к. на компе всё-равно есть Win 10 второй системой, а играю крайне редко.
Проблема и решение не специфичны для Arch Linux, и решение должно работать на любой Linux-системе.
Собственно ошибки при запуске выглядят так:
[simterm]
... 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
[/simterm]
Помню, что когда пытался запустить её в первый раз, ещё только после установки 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:
[simterm]
$ 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 ...
[/simterm]
Переходим в каталог игры:
[simterm]
$ cd .local/share/Steam/steamapps/common/Sid\ Meier\'s\ Civilization\ V
[/simterm]
Переименовываем все файлы видео .mov
в .mov_bak
:
[simterm]
$ for m in `find . -name \*.mov -type f`; do mv "$m" "$m"_bak; done
[/simterm]
Собственно, вот они:
[simterm]
$ 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
[/simterm]
И запускаем игру:
Готово.