понедельник, 1 декабря 2014 г.

Проблема запуска Minecraft на Linux с установленным OSS

После обновления Minecraft до версии 1.6 появилась проблема при запуске игры с установленным OSS по умолчанию. Как выяснилось, проблема была в библиотеке OpenAL, которая поставлялась вместе с этой версией игры. Простая замена ни к чему не привела, т.к. при запуске лаунчера все файлы игры распаковывались откуда-то из архива и заменялись. Поэтому я написал свой скрипт для запуска, который вы можете посмотреть здесь. Для этого скрипта следует создать директорию, в которой будут рабочие библиотеки (libopenal.so или libopenal64.so) можно взять в системной директории вашего дистрибутива или создать символические ссылки к ним.
Данный подход имеет один большой минус -- подобный запуск не позволяет играть на серверах с проверкой лицензии. Собственно, этот способ запуска является "пиратским". Поэтому пришла в голову идея заменять файлы библиотек прямо во время запуска, но после того, как они созданы лаунчером. Подобная идея описывается здесь, но я поступил гораздо проще, я взял из указанного скрипта лишь одну строчку и получил следующий скрипт:
#/bin/bash
MC_BASE_PATH=~/.minecraft
OPENAL=/usr/lib/i386-linux-gnu/libopenal.so.1
OPENAL64=/usr/lib/x86_64-linux-gnu/libopenal.so
CURRENT=$(inotifywait -q -r -e CREATE $MC_BASE_PATH/versions/)
DIR=$(echo $CURRENT | cut -d ' ' -f 3)
DIR=$(echo $CURRENT | cut -d ' ' -f 1)$DIR
echo "Created dir: $DIR"
if [ -e "$DIR/libopenal64.so" ]
then
    ln -sf $OPENAL64 "$DIR/libopenal64.so"
    echo "OpenAL was replaced"
    exit
fi
echo "OpenAL not foud"
Суть в том, что лаунчер при запуске создаёт временную папку в versions с нативными библиотеками, а при завершении работы игры удаляет её. Сразу же после создания папки скрипт заменяет в ней файлы на символические ссылки на системные библиотеки. Я оставил только замену 64-битной версии библиотеки, если система 32-битная, то следует заменять libopenal.so. Также я указал прямой путь к системным библиотекам -- переменные OPENAL и OPENAL64, для других дистрибутивов пути могут быть другие.
Я убрал проверку создания файлов, т.к. у меня команда inotifywait срабатывала только при создании папки, это работает на Debian wheezy, на остальных системах возможно она будет срабатывать и при создании файлов, поэтому я сделал проверку на наличие файла. То, что выводит команда inotifywait можно посмотреть, введя следующую команду, находясь в папке ~/.minecraft:
while true; do inotifywait -r -q -e create versions; done
После чего запускаем лаунчер, запускаем игру и выходим из неё. Затем останавливаем этот бесконечный скрипт, нажав Ctrl-C.

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

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