вторник, 23 мая 2017 г.

Как запустить Steam без STEAM_RUNTIME

Steam — это сервис игр для ПК, точно такой же, как PlayStation Network для PS или Xbox Live для xbox. На Linux Steam появился не так давно, поэтому иногда нужно где-то что-то дипиливать. В этой статье я расскажу, как заставить Steam запускаться без своего runtime.
steam не archlinux без рантайма стима


Зачем это вообще нужно и что такое steam-runtime? Изначально Steam писали под Ubuntu 12.04, а при появлении более свежих версий Ubuntu чтобы у людей не возникало проблем, компания Valve решила сделать костыль в виде Steam-runtime. Это набор библиотек, взятых из Ubuntu 12.04, которые Steam скачивает себе при установке и использует их при запуске игр. Это должно решать проблемы с бинарной совместимостью, однако на деле из-за этого наоборот иногда возникают проблемы.
Некоторые базовые утилиты, которые присутствуют в Steam Runtime очень часто конфликтуют с новыми версиями других библиотек, которые установлены в Arch Linux (например, с драйверами, особенно с открытым ATI драйвером). Поэтому становится невозможно запустить игру из Steam — она сразу же вылетает. Кроме того, в тех устаревших библиотеках могут быть не реализованы важные функции, например, версия OpenAL из steam runtime не поддерживает HRTF и звук 7.1.
Чтобы Steam запустился в режиме использования системных библиотек (а не из steam runtime) нужно запускать его так:
$ STEAM_RUNTIME=0 steam
Однако в таком случае он жалуется:
/home/$USER/.local/share/Steam/steam.sh: line 710: LD_LIBRARY_PATH: unbound variable
Изменить steam.sh не получится, потому что Steam при запуске проверяет этот файл и если он изменён, восстанавливает первоначальную версию. Поступим следующим образом: откроем файл /etc/environment на редактирование и добавим строку:
LD_LIBRARY_PATH= # it is for steam.sh to work
Не забудьте перезагрузиться после данного действия (для применения переменной).
Теперь поставим необходимые библиотеки. Самое неприятное то, что Steam это 32-битное приложение, поэтому библиотеки придётся ставить 32-битные, и это поглотит много ресурсов. Я проверял командой pkgfile какие пакеты содержат нужные файлы:
Список пакетов для установки
lib32-gdk-pixbuf2
lib32-gtk2
libnm-glib
lib32-nspr
lib32-nss
lib32-openal
lib32-pango
lib32-systemd
lib32-libxcomposite
lib32-libxinerama
[свернуть]
Тем не менее, было видно, что до каких-то библиотек steam всё равно не сможет достучаться, несмотря на то, что эти .so уже содержатся в установленных пакетах. Я посмотрел этот список, выполнив команды
$ cd ~/.local/share/Steam/ubuntu12_32
$ LD_LIBRARY_PATH=".:${LD_LIBRARY_PATH}" ldd $(file *| sed '/ELF/!d;s/:.*//g' )|grep 'not found'|sort|uniq
Вот они:
libdbus-glib-1.so.2 => not found
libgconf-2.so.4 => not found
libnm-glib.so.4 => not found
libnm-util.so.2 => not found
libudev.so.0 => not found
Оказывается, некоторые пакеты в Arch слишком новые для Steam=). И dbus среди них, а также libnm и некоторрые другие, а каких-то уже вообще нет. Попробуем подключить удобный репозиторий alucryd-multilib. Открываем /etc/pacman.conf и добавляем его:
[alucryd-multilib]SigLevel = PackageOptional
Server = http://pkgbuild.com/~alucryd/$repo/x86_64

Этот репозиторий содержит мета-пакет (пакет, который просто зависит от других пакетов, а в себе ничего не несёт) steam-libs. Установив его, пакетный менеджер сам подтянет зависимости, которые описал alucryd. На момент, когда я его ставил, steam-libs содержал следующие зависимости:
зависимости steam-libs
lib32-at-spi2-atk
lib32-at-spi2-core
lib32-colord
lib32-cracklib
lib32-dbus-glib
lib32-dconf
lib32-gconf
lib32-glew1.10
lib32-glib-networking
lib32-gtk3
lib32-js17
lib32-json-glib
lib32-libepoxy
lib32-libgusb
lib32-libjpeg6-turbo
lib32-libnm-glib46
lib32-libpng12
lib32-libproxy
lib32-libsoup
lib32-libtirpc
lib32-libudev0
lib32-libvpx
lib32-libxkbcommon
lib32-libxml2
lib32-libxmu
lib32-libxt
lib32-ncurses
lib32-pam
lib32-polkit
lib32-readline
lib32-rest
[свернуть]
Несмотря на то, что это неподписанные пакеты, им можно доверять. Имейте в виду, что некоторых зависимостей нужной версии может не быть в репозиториях Arch.
Также, установим lib32-libgcrypt15-git и libgcrypt15-git из AUR — эти пакеты предоставляют последний код, основанный на libgcrypt API версии 11, который необходим Steam’у для доступа к вашему инвентарю, достижениям и т.д.
Вот теперь запускаем
$ STEAM_RUNTIME=0 steam
Ура! Работает!

Комментариев нет:

Отправить комментарий