Linux, свободное ПО Запуск полноэкранных игр и программ в отдельном X-сервере

Запуск полноэкранных игр и программ в отдельном X-сервере

Запуск полноэкранных игр и программ в отдельном X-сервере

Естественно, статья предназначена для пользователей Linux. Я производил все манипуляции на Ubuntu 10.04, но для других дистрибутивов особых отличий быть не должно.

А о чем собственно речь? Речь о том, что при запуске полноэкранных приложений в Linux (чаще всего речь идет об играх) обычно нет никакой возможности сворачивать/разворачивать это самое полноэкранное приложение. То есть для того, чтобы увидеть свой рабочий стол, вам необходимо полностью закрыть программу. Мало того, если вдруг игра зависла (что к сожалению иногда случается), то завершить ее работу вы сможете только из консоли.

Так вот, это досадное недоразумение можно уладить, если запускать игры и другие полноэкранные программы в отдельном x-сервере. В этом случае оба сервера будут работать независимо друг от друга и между ними можно будет легко переключаться. Настраивается это довольно просто, и ниже я расскажу, как именно.

Скажу честно, идею статьи я позаимствовал на другом сайте. Вот только там были опущены некоторые важные нюансы (настройка звука, права пользователя), о которых я скажу в этой заметке.

Итак, первым делом разрешим запускать x-сервер не только суперпользователю (иначе в игры нам придется играть из-под рута, что никак не правильно). Сделать это проще простого. Hаберите в консоли следующую команду:

sudo dpkg-reconfigure x11-common

Вы увидите настройки пакета x11-common, в которых по-умолчанию разрешено запускать X сервер только пользователям из консоли. Изменим эту опцию на вариант «Кто угодно».

Теперь настроим звук. Если не сделать нижеописанной операции, то ваши игры будут запускаться без звука, что вас вряд-ли устроит. Итак, добавим вашего пользователя в группу аудио, выполнив в консоли следующую команду (замените «username» на имя вашего пользователя):

sudo gpasswd -a username audio

Сделали? Очень хорошо, подготовительные работы окончены. Теперь приступаем к основному действу.

Для каждой игры (программы), которую вы хотите запустить в отдельном X сервере, нужно создать отдельный скрипт. Сделать это также очень просто. В исходной статье предлагается хранить скрипты в каталоге «~/.config/bin». Я последовал этим рекомендациям, хотя вы можете хранить их где вам захочется. Итак, создаем в текстовом редакторе пустой файл и добавляем в него что-то вроде этого (пример для игры «Open Arena»):

%>cat ~/.config/bin/openarena.sh
/usr/games/openarena

Точно также можно запускать игры из-под Wine, в этом случае файл будет выглядеть примерно так (пример для игры «Civilization 4»):

%>cat ~/.config/bin/civ4.sh
cd ~/.wine/drive_c/games/Civilization\ 4/Beyond\ the\ Sword
WINEDEBUG=-all wine Civ4BeyondSword.exe

Сохраните этот файл (в моем примере — в каталог «~/.config/bin»).

Наш скрипт готов, теперь осталось запустить его. Команда запуска будет выглядеть следующим образом (опять пример для «Open Arena»):

startx ~/.config/bin/openarena.sh -- :1

Эту команду можно прописывать куда угодно, например на кнопку, ярлык в меню и т.д. Правда если прописать ее в меню Gnome, то система не определить, что под «~» имеется ввиду домашний каталог пользователя, поэтому для гномовского меню нужно прописывать полный путь (замените «username» на имя вашего пользователя):

startx /home/username/.config/bin/openarena.sh -- :1

Параметр «:1» указывает, что наше приложение должно запускаться на виртуальном дисплее под номером «1» (система по-умолчанию загружается на нулевом дисплее).

В некоторых играх после таких переключений между X-серверами по центру дисплея начинает отображаться курсор. В этом случае поможет добавление в строку запуска параметра « -nocursor».

В принципе, можно было бы обойтись одной командой без запуска дополнительного скрипта, но я читал, что такой вариант работает не со всеми играми. В любом случае, создать скрипт из двух строчек не такая уж сложная задача.

По аналогии можно повторить те же операции для любой другой игры или программы.

Все, после запуска игры она автоматически загрузится в новом X-сервере. Для того, чтобы переключиться обратно на основной дисплей, достаточно нажать комбинацию клавиш «Ctrl+Alt+F7». Обратно в игру — комбинацией «Ctrl+Alt+F8». Комбинации привожу для Ubuntu Linux, возможно в некоторых других дистрибутивах будут незначительные отличия.

После выхода из игры работа X-сервера также автоматически завершается и вы переключаетесь обратно на рабочий стол.

Приятные бонусы касательно звука:
Во-первых, можно переключившись на основной дисплей использовать глобальный регулятор громкости, во-вторых звук работает в обоих серверах, а это значит, что можно одновременно играть в игры и слушать музыку или подкасты.

Вот и все!

Понравилась статья? Подпишитесь на
обновления блога по RSS или E-mail:
Комментарии 
 
+2 # Vufer 10.07.2010 01:39
Спасибо за толковую статью, но есть вопросец...
Пытаюсь подобным образом запустить CoD4, ругается на звук miles, что мол не установлены дрова...
При этом в основном сеансе Хов все вроде работает...
Не подскажете как победить? :)
Ответить | Ответить с цитатой | Цитировать
 
 
+2 # Vufer 10.07.2010 03:00
Проблема решена: достаточно было рестартнуть алсу :)
Ответить | Ответить с цитатой | Цитировать
 
 
+2 # artem 04.08.2010 20:28
А зачем создавать каталог ./config/bin и сохранять туда скрипты?
Можно ведь просто на кнопке или в меню прописать команду:
startx /usr/games/openarena -- :1
Разве нет?
Ответить | Ответить с цитатой | Цитировать
 
 
+1 # zhart 05.08.2010 07:20
artem, в принципе вы правы, но такой подход предлагался в статье, из которой я взял идею, поэтому я решил оставить также, тем более что создать промежуточный скрипт совсем несложно. Цитирую:
Цитата:
Почему я записываю путь к бинарнику в промежуточный шелл-скрипт, вместо того чтобы сразу скормить его startx? По неведомым для меня (пока?) причинам, это работает не со всеми играми.
Ответить | Ответить с цитатой | Цитировать
 
 
+1 # artem 10.08.2010 16:18
Действительно... Nexuiz так только со скриптом запускается. :)
Ответить | Ответить с цитатой | Цитировать
 
 
0 # Эдуард 18.09.2011 21:48
У меня он отлично запускается без скрипта - startx nexuiz -- :1
Ответить | Ответить с цитатой | Цитировать
 
 
0 # roman 29.08.2010 20:29
а как можно запустить в отдельном x-сервере приложение, установленное через PlayOnLinux ?
Ответить | Ответить с цитатой | Цитировать
 
 
0 # zhart 31.08.2010 07:55
Точно так же, как и любое другое Wine-приложение.
См. в статье пример для игры «Civilization 4».
Ответить | Ответить с цитатой | Цитировать
 
 
0 # Эдуард 02.10.2011 20:27
Запустите в отдельном Х-сервере сам PlayOnLinux:

startx playonlinux -- :1


Я делаю так и всё пучком
Ответить | Ответить с цитатой | Цитировать
 
 
0 # valero 03.09.2010 21:26
Рвётся интернет соединение для нового Х-сервера, когда возвращаешься в основной.
Т.е. например, запускаешь Counter Strike 2D, играешь на каком-нибудь интернет-сервере, переключаешься основной Х-сервер на минуту (например, музыку другую захотелось включить), возвращаешься в игру, а тебя уже на сервере нет.
При этом интернет-соединение для приложений, работающих основном Х-сервере, работает нормально (IRC, ICQ, DC++ - соединения не теряют).
Интернет подключен через VPN (PPTP), Ubuntu 10.04, Gnome. Только у меня такой баг? Это можно как-нибудь вылечить?
Ответить | Ответить с цитатой | Цитировать
 
 
0 # zhart 04.09.2010 17:44
У меня не рвется ничего. Сейчас вот специально проверил на «Urban Terror». Переключался туда-сюда несколько раз, соединение не теряется.
Ответить | Ответить с цитатой | Цитировать
 
 
0 # drsmoll 14.10.2010 12:13
Ubuntu 10.04
при попытке запустить
$startx xterm -- :1
получаем:
(EE) Device USB Device: failed to initialize for relative axes.
аналогично
$ X :1
(EE) Device USB Device: failed to initialize for relative axes.
xorg.conf:
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/input/mice"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection
Ответить | Ответить с цитатой | Цитировать
 
 
0 # Serg 19.05.2011 23:22
А как остановить\выру бить повисшую игру? Как ребутнуть\отклю чить этот :1 дисплей иксов?
Ответить | Ответить с цитатой | Цитировать
 
 
0 # zhart 19.05.2011 23:41
Я обычно в таких случаях завершаю через «htop» зависший процесс.
Ответить | Ответить с цитатой | Цитировать
 
 
0 # Yuri 15.08.2011 21:47
У меня почему-то на новом иксе (:1) запускается игра, а звук от неё работает только когда переключаюсь на старый (:0)
Ответить | Ответить с цитатой | Цитировать
 
 
0 # zhart 16.08.2011 12:10
В звуковых опциях игры выберите «Alsa» (если там есть такая возможность).
Ответить | Ответить с цитатой | Цитировать
 
 
0 # Yuri 16.08.2011 13:32
Она и была выбрана
Ответить | Ответить с цитатой | Цитировать
 
 
0 # zhart 16.08.2011 13:39
Тогда не знаю, обычно с Alsa проблем нет.
А такие проблемы только с одной игрой, или со всеми?
Ответить | Ответить с цитатой | Цитировать
 
 
0 # Yuri 16.08.2011 13:58
Странно, уже работает нормально.
А если звук из игры в :1 работает в обоих иксах, это нормально?
Ответить | Ответить с цитатой | Цитировать
 
 
0 # zhart 16.08.2011 14:06
Цитирую Yuri:
А если звук из игры в :1 работает в обоих иксах, это нормально?

У меня тоже так, и меня это не смущает.
Точно так же как не смущает и то, что звук с основного дисплея работает в игре на :1. Наоборот, мне именно такой режим и нужен, поскольку я часто совмещаю игры с прослушиванием подкастов.
Ответить | Ответить с цитатой | Цитировать
 
 
0 # Yuri 26.08.2011 08:32
Еще один вопрос.
Когда я запускаю Team Fortress 2, по центру экрана появляется курсор, и в :0, и в :1.
Подскажите, что делать.
Ответить | Ответить с цитатой | Цитировать
 
 
0 # zhart 26.08.2011 10:39
Ну так об этом же в статье написано:
Цитата:
В некоторых играх после таких переключений между X-серверами по центру дисплея начинает отображаться курсор. В этом случае поможет добавление в строку запуска параметра « -nocursor».
Ответить | Ответить с цитатой | Цитировать
 
 
0 # lapson 08.09.2011 17:32
Народ помогите кто чем может. Судя по всему не запускается игра в отдельных иксах после патча и переустановки собстна системы До этого все отлично работало, все делал по инструкции, имел возможность если чо прыгать на рабочий стол и отвечать на почту и звонки по alt+f7 и назад по alt+f6. Теперь любая комбинация не показывает даже приглашение ввести логин, а просто чОрное окно (alt+f1 и тд, только alt+f7 в игру возвращает). Случайно нажал alt+tab и попал на рабочий стол, а игра зависла. Чо делать куды копать??!!
Заранее спасибо
Ответить | Ответить с цитатой | Цитировать
 
 
0 # yura 22.09.2011 20:50
%>cat ~/.config/bin/diablo2.sh
cd ~/.wine/drive_c/Games/Diablo\ II\ -\ Lord\ of\ Destruction
WINEDEBUG=-all wine Diablo\ II.exe -direct

startx ~/.config/bin/Diablo2.sh -- :1

любуюсь черным экраном
Ответить | Ответить с цитатой | Цитировать
 
 
0 # zhart 22.09.2011 20:55
Запуск из консоли наверняка многое разъяснит.
Ответить | Ответить с цитатой | Цитировать
 
 
0 # yura 22.09.2011 21:14
Fatal server error:
Server is already active for display 1
If this server is no longer running, remove /tmp/.X1-lock
and start again.


Please consult the The X.Org Foundation support
at wiki.x.org
for help.

ddxSigGiveUp: Closing log
XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":1"
after 7 requests (7 known processed) with 0 events remaining.
Ответить | Ответить с цитатой | Цитировать
 
 
0 # zhart 23.09.2011 08:38
Ну так вам в одном сообщении сразу говорится и о причине проблемы:
Цитата:
Server is already active for display 1

... и о методе ее решения:
Цитата:
If this server is no longer running, remove /tmp/.X1-lock and start again.

Говоря по-русски: удалите файл «/tmp/.X1-lock» и запустите сервер заново.
Ответить | Ответить с цитатой | Цитировать
 
 
0 # yura 23.09.2011 17:10
удалил, запустил:
_XSERVTransSock etINETCreateLis tener: ...SocketCreateLis tener() failed
_XSERVTransMake AllCOTSServerLi steners: server already running

Fatal server error:
Cannot establish any listening sockets - Make sure an X server isn't already running

Please consult the The X.Org Foundation support
at wiki.x.org
for help.
Please also check the log file at "/var/log/Xorg.1.log" for additional information.
Ответить | Ответить с цитатой | Цитировать
 
 
0 # zhart 23.09.2011 18:18
По каким-то причинам новый X-сервер пытается запуститься дважды. По каким именно причинам — не знаю. Можете попробовать покопаться в указанном логе, быть может он прольет свет на проблему...
Ответить | Ответить с цитатой | Цитировать
 
 
0 # yura 23.09.2011 18:23
указанный лог:
[ 96307.192] _XSERVTransSock etINETCreateLis tener: ...SocketCreateLis tener() failed
[ 96307.193] _XSERVTransMake AllCOTSServerLi steners: server already running
[ 96307.193]
Fatal server error:
[ 96307.193] Cannot establish any listening sockets - Make sure an X server isn't already running
[ 96307.194]
Please consult the The X.Org Foundation support
at wiki.x.org
for help.
[ 96307.194] Please also check the log file at "/var/log/Xorg.1.log" for additional information.
[ 96307.194]
[ 96307.194] ddxSigGiveUp: Closing log
Ответить | Ответить с цитатой | Цитировать
 
 
0 # alex 13.02.2012 17:09
Запускаю так WarCraft 3 - Х-ы запускаются, заставка варика тоже, но ч\з 1-2 мин Х-ы падают. Вот лог:
ALSA lib pcm_pulse.c:1008:(_snd_pcm_p ulse_open) Unknown field handle_underrun

waiting for X server to shut down XIO: fatal IO error 11 (Ресурс временно недоступен) on X server ":1.0"
after 14 requests (14 known processed) with 0 events remaining.
ddxSigGiveUp: Closing log
Ответить | Ответить с цитатой | Цитировать
 
 
0 # faiwer 03.04.2012 19:03
Итак, попробовал описанное. Ubuntu 11.04.
Hedgewars - без звука вообще =( правда использую PulseAudio
Steam - CStrike - пытается запуститься в новых иксах, но потом что то идёт не так и она запускается в текущих =(
Ответить | Ответить с цитатой | Цитировать
 
 
0 # faiwer 03.04.2012 19:05
блин забыл подписаться (изза капчи, ненавижу их)
Ответить | Ответить с цитатой | Цитировать
 
Добавить комментарий


Защитный код
Обновить