3D-игры vs. Compiz

Не секрет, что различные игры, требующие 3D-ускорения не очень гладко идут при использовании Compiz (особенно если включено много эффектов и игра запускается в оконном режиме). Проявляется это в виде притормаживаний при отрисовке, мерцании экрана, отсуствия изображения и прочих малоприятных глазу явлений. А уж “счастливым” обладателям карточек ATI вообще хронически не везёт на этом фронте. Самым простым и логичным решением было бы отключение Compiz’а при запуске игр, что согласитесь не очень удобно. Природная лень и гугль привели меня к интересному решению этой проблемы- статье Xgame on Ubuntu Feisty Fawn [всё нижеследующее является вольным переводом этой статьи с моими дополнениями и комментариями].

Идея решения очень проста и элегентна. Специальный скрипт xgame (есть GUI к нему xgame-gtk2) создаёт новую X-сессию и уже в ней запускает игру. Соотвественно для дополнительных сессий мы можем написать свой xorg.conf.

Итак, для начала нам необходимо разрешить запуск дополнительных X-сессий:

sudo sed -i -e "s/\(allowed_users=\).*/\1anybody/" \
/etc/X11/Xwrapper.config

Затем сконфигурировать Xauth так, чтобы он увидел нашу дополнительную X-сессию:

echo "list" | xauth | grep localhost | sed -e "s/.*[ \t]\(.*\)$/add :1.0 MIT-MAGIC-COOKIE-1 \1/" > /tmp/xauth.mine
cat /tmp/xauth.mine | xauth

Сделать копию обычного файла конфигурации X.org…

sudo cp /etc/X11/xorg.conf /etc/X11/xorg_games.conf

… и отредактировать его:

sudo gedit /etc/X11/xorg_games.conf

Как минимум для повышения производительности необходимо отключить композитное расширение для нашей X-сессии, добавив следующие строчки в новый xorg_games.conf :

Section "Extensions"
Option "Composite" "Disable"
EndSection

Ну и наконец скачиваем сам скрипт Xgame и делаем его исполняемым:

# Установка версии с GUI
wget --output-document=/tmp/xgame-gtk2 http://www.xs4all.nl/~masterpe/Perl/xgame-gtk2
sudo cp /tmp/xgame-gtk2 /usr/bin/xgame-gtk2
sudo chmod +x /usr/bin/xgame-gtk2
 
# Установка консольной версии
wget --output-document=/tmp/xgame http://www.xs4all.nl/~masterpe/Perl/xgame
sudo cp /tmp/xgame /usr/bin/xgame
sudo chmod +x /usr/bin/xgame

Теперь собственно можно запустить в консоли xgame:

sudo xgame

Xgame-gtk2

Или его GUI (с настройками думаю несложно будет разобраться, лишь только назначение параметра Switch для меня осталось загадкой):

sudo xgame-gtk2

Xgame-gtk2 Xgame-gtk2 Xgame-gtk2

Для удобства можно создать значок для запуска Xgame-gtk2 на рабочем столе: иконка находится тут /usr/share/pixmaps/gnome-xterm.png. А так как запускаем мы через sudo, то команду запуска лучше сделать вида gksudo xgame-gtk2:
Xgame-gtk2

На моей машине [Athlon64 3500+, DDR-2 667 1Gb, NVIDIA 5900PCX 128 Mb | Ubuntu 8.04, 2.6.24-17] с проприетарными драйверами (v.169.12) прирост производительности при таком решении неплохой.
Из багов есть только две мелкие неприятности:
1) не всегда сразу отрисовывается картинка в дополнительной X-сессии, поэтому приходится переключатся на основную, а затем снова на дополнительную (Ctrl-Alt-F7 < -> Ctrl-Alt-F9)
2) иногда игра некорректно выходит и приходится принудительно убивать X-сессию (Ctrl-Alt-Backspace)

При запуске игр из Wine невозможно напрямую использовать Xgame. Это связано с тем, что Wine изначально запускается как фоновый процесс, а затем “засыпает”. Чтобы этого избежать надо сделать Wine “постоянным” процессом:

sudo sh -c "echo \"#\!/bin/bash
wine \\\"\\\$@\\\"
 
while [ -n \\\"\\\`ps ax | egrep -v grep | egrep wineserver | sed -e 's/[ ]*\(\d*\)[\t ]*?.*/\1/'\\\`\\\" ]; do
sleep 1s;
done\" \
&gt; /usr/bin/p-wine"
sudo chmod +x /usr/bin/p-wine

Теперь для запуска win-игр необходимо использовать скрипт p-wine, который создаётся вышеприведённой командой.
На этом всё ;)

2 комментария на “3D-игры vs. Compiz”

  • dsroot:

    В поле Switch пишем параметр запускаемой команды (мы же можем запускать не только игры в дополнительной сесии).

  • DesT:

    dsroot, да сейчас уже и нет особых проблем совместимости Compiz и игр. Но за разгадку всё равно спасибо =)

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

*