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 |
Или его GUI (с настройками думаю несложно будет разобраться, лишь только назначение параметра Switch для меня осталось загадкой):
sudo xgame-gtk2 |
Для удобства можно создать значок для запуска Xgame-gtk2 на рабочем столе: иконка находится тут /usr/share/pixmaps/gnome-xterm.png. А так как запускаем мы через sudo, то команду запуска лучше сделать вида gksudo 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\" \ > /usr/bin/p-wine" sudo chmod +x /usr/bin/p-wine |
Теперь для запуска win-игр необходимо использовать скрипт p-wine, который создаётся вышеприведённой командой.
На этом всё



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