Это старая версия документа.


HOW-TO Ускорение игр под X

Автор – Димитрий Бойчев (Dimitar Boichev)

Приходилось ли вам играть в оконном режиме из-за того, что не могли переключиться по alt-tab в другое окно, в котором вас ждал вызов Skype/Jabber/и т.д.? Приходилось ли вам вообще отказываться от игры из-за крайне низкой скорости прорисовки (FPS)? А не бывало ли вам обидно, когда в двухмониторной системе мышка убегала на другой монитор вместо того, чтобы прокрутить карту в StarCraft? Если бывало что-то похожее, то самое время освоить новую технологию: запуск игр в отдельном сеансе (X-session)!

Я попытался выяснить, как решить три вышеописанных проблемы, и обнаружил, что игры, запущенные в новом сеансе, работают быстрее. Counter Strike Source 640×480 с качеством LOW тормозил так, словно был запущен c NORMAL, но когда я запустил его в отдельном сеансе, он «летал» в режиме 1024×748 NORMAL. Слишком хорошо, чтобы быть правдой? Отнюдь! Позвольте объясниться.

Первое, что надо сделать, это запустить новый сеанс Х-сервера, для чего надо открыть терминал, запустить nano от имени администратора (посредством sudo) и поправить файл Xwrapper.config:

sudo nano /etc/X11/Xwrapper.config

nano – это простой текстовый редактор, работающий в консоли.

Чтобы узнать больше о /etc/X11/Xwrapper.config, откройте консоль и выполните:

man Xwrapper.config

Открыв Xwrapper.config, найдите строку «allowed_users=console» и измените ее на «allowed_users=anybody». Чтобы сохранить изменения, нажмите Ctrl+X; nano спросит, действительно ли вы хотите сохранить внесённые изменения, нажмите Y, далее редактор выведет имя файла, в который будет сохранён текст, в этой строке просто нажмите Enter – мы же хотим заменить старый файл.

Теперь мы можем запускать дополнительные Х-серверы из-под уже работающего X-сервера, но для этого не помешает перезапустить уже запущенный сервер. Я не уверен, что этот шаг необходим, но он не повредит. После перезапуска сервера настроим игры для запуска в отдельном сеансе. Сначала убедитесь, что игры запускаются не в «виртуальном рабочем столе»: запустите winecfg или откройте

Программы — Wine — Configure Wine.

Если на закладке «Приложения» упомянут EXE-файл вашей игры, щелкните по нему и откройте закладку «Графика», там не должно быть галочки в пункте «Эмулировать виртуальный рабочий стол». Если она там есть, то игра будет запущена в верхнем правом углу монитора, а это совсем не то, что нам нужно.

После этого я написал несколько сценариев для запуска нужных мне игр в отдельном сеансе. То есть я могу запустить их как в основном, так и в отдельном Х-сервере. Если вы не знаете, как писать сценарии оболочки, вот пример (для игры StarCraft и пользователя cherva. Не забудьте исправить параметры под свою обстановку):

Откройте текстовый редактор, например GEdit для GNOME или KWrite для KDE, и наберите:

#!/bin/bash
X :2 -ac -terminate -config only_one_monitor.conf &

sleep 2
DISPLAY=:2 nice -20 env WINEPREFIX="/home/cherva/.wine" wine "C:\Games\Starcraft\Starcraft.exe" 

Х — это команда запуска нового сеанса Х-сервера.

-ac — запрещает контроль доступа на уровне узлов, разрешая доступ с любого узла и позволяя любому узлу изменять список управления доступом. Используйте очень осторожно! Этот параметр обычно используется для проведения дистанционного тестирования.

-terminate — заставляет сервер отключиться после завершения запущенной в нем программы.

-config — использовать отдельный файл конфигурации для Х-сервера (помните проблемы с прокруткой в StarCraft?). Файл only_one_monitor.conf — по сути тот же самый /etc/X11/xorg.conf, из которого удалены настройки для второго монитора, так что мышка, подведённая к краю монитора, останется в пределах этого монитора, и игровое поле StarCraft будет прокручиваться. Остальные подробности можно прочесть по адресу: http://linux.die.net/man/1/xserver

Далее команда sleep 2 задерживает выполнение сценария на 2 секунды, чтобы дать новому Х-серверу достаточно времени для запуска.

DISPLAY=:2 — запустить следующую команду в нашем новом Х-сервере, а не в основном.

nice -20 — запустить процесс с наивысшим приоритетом (для большей производительности), далее указан запускаемый процесс: обычная команда, которую Wine формирует при создании ярлыка для программы в меню или на рабочем столе.

env WINEPREFIX — каталог настроек wine.

wine — собственно команда запуска эмулятора Wine. «C:\Games\Starcraft\Starcraft.exe» — запускаемая игра.

Набрав сценарий, сохраните его в какой-нибудь каталог. Затем откройте этот каталог в файловом менеджере (Nautilus или еще каком). Найдите сохранённый файл: нам надо сделать его исполняемым, для чего щёлкните по нему правой кнопкой мышки и выберите «Свойства». Перейдите на вкладку «Права» и поставьте галочку в строке «Позволять выполнение файла как программы». Закройте окно «Свойства» и откройте сценарий двойным щелчком. На Ubuntu вам будет предложено выбрать желаемое действие:

«Запустить в терминале / Показать / Отменить / Запустить».

Выбирайте «Запустить» и наслаждайтесь FPS >20, прокруткой в стратегиях и отсутствием проблем с переключением между окнами. Если вам понадобится вернуться в изначальный Х-сервер, нажмите Ctrl+Alt+F7, а оттуда в игру — Ctrl+Alt+F9 (или иногда — Ctrl+Alt+F8). Имейте в виду: я не бог весть какой знаток Linux, так что могут быть и другие способы сделать то же самое, но у меня и так работает, чему я очень рад.