Найти тему
TechrooM

Unable to load module vguimatsurface.so! Half-Life 2 под Linux

При запуске нативной версии HL2 на Linux Вы можете столкнуться со следующей ошибкой:

Unable to load module vguimatsurface.so!

Всему виной отсутсвие ряда 32-х битных библиотек, необходимых для корректной работы игры. Чтобы найти каких библиотек недостает, следует выполнить команду находясь в каталоге с игрой:
LD_LIBRARY_PATH=bin ldd bin/vguimatsurface.so | grep 'not found'

В выводе будет список библиотек, которые не смог найти линковщик, их нам и надо поставить. Дальше, с помощью dpkg, ищем в составе каких пакетов лежат заветные библиотеки (помним, что исполняемый файл игры 32-х битный, проверить это можной с помощью команды file), например:

dpkg -S libplc4.so

Далее устанавливаем заветный пакет с помощью apt-get или aptitude:

apt-get install libnspr4:i386

На Linux Mint 20.3 не хватило следующих пакетов:

libfontconfig1:i386 libfreetype6:i386 libgtk2.0-0:i386 libpangocairo-1.0-0:i386 libgdk-pixbuf2.0-0:i386 libcairo2:i386 libpango-1.0-0:i386 libfreetype6:i386 libfontconfig1:i386 libglib2.0-0:i386 libxi6:i386 libasound2:i386 libxrender1:i386 libdbus-1-3:i386 libcups2:i386 libnss3:i386 libnspr4:i386

На этом проблемы не заканчиваются, не хватает двух пакетов, которых нет в репозитории дистрибутива libpng12-0_1.2.54 и libpng12-0_1.2.54, они есть, но версия библиотек не соответствует.

Первый вариант: можно скачать библиотеки с http://security.ubuntu.com/, второй собрать из исходников :D. Выбираем первый вариант:

http://security.ubuntu.com/ubuntu/pool/main/libp/libpng/libpng12-0_1.2.54-1ubuntu1_i386.deb

http://security.ubuntu.com/ubuntu/pool/main/libg/libgcrypt11/libgcrypt11_1.5.3-2ubuntu4_i386.deb


Из-за невозможности удовлетворить зависимости, распаковываем пакеты с помощью
dpkg применяя "силу":

dpkg --unpack --force-all ./libpng12-0_1.2.54-1ubuntu1_i386.deb

Далее повторно проверяем найдены ли все зависимости:

LD_LIBRARY_PATH=bin ldd bin/vguimatsurface.so | grep 'not found'

Если нет, то обновляем кэш динамического линквщика вызовом
ldconfig с правами root.

Когда все зависимости удовлетворены, настало время запускать, но если у Вас гибридная графика, то по умолчанию рабочий стол и др. приложения использую интегрированное ядро, понять так ли это не сложно, вызываем glxinfo -B и получаем вывод вида:

Вывод glxinfo -B
Вывод glxinfo -B

где производитель и рендер говорят о том, что у нас используется графика от Intel.

Начиная с Linux Mint 18 в состав дистрибутива входит аплет, который позволяет выбирать графический ускоритель. Минус в том, что надо перезапускать ссесию, да и второй минус аплет не всегда корректно работает (у меня на LM 20.3 иксы зависаю насмерть). Для того, чтобы запустить приложение из консоли и не только и явно сказать ему, что использовать надо GPU от Nvidia перед выполнением команды, на запуск объявляем две переменные окружения:

__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia

В моем случае HL2 комплектовался скриптом для запуска, в нем данную команду можно поместить непосредственно в строке, где запускается бинарник hl2_linux.

-3

Запускаем скрипт и процесс пошел.

Чтобы убедится, что процесс работает с дискретным GPU можно запустить монитор ресурсов:

nvidia-smi -l 1

nvidia-smi -l 1
nvidia-smi -l 1


П.С.

При сохранении настроек процесс упал, но при перезапуске все настройки нормально сохранилось.

П.С.С.

Deb пакеты, если сайт ubuntu недоступен.

libgcrypt11_1.5.3-2ubuntu4_i386.deb

libpng12-0_1.2.54-1ubuntu1_i386.deb