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

  •   09.05.2010
  •   31 комментарий
  •   Linux, Игры

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

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

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

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

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

Итак, первым делом разрешим запускать 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-сервера также автоматически завершается и вы переключаетесь обратно на рабочий стол.

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

Вот и все!


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

31 комментарий на «“Запуск полноэкранных игр и программ в отдельном X-сервере”»

  1. Спасибо за толковую статью, но есть вопросец…
    Пытаюсь подобным образом запустить CoD4, ругается на звук miles, что мол не установлены дрова…
    При этом в основном сеансе Хов все вроде работает…
    Не подскажете как победить? 🙂

  2. А зачем создавать каталог ./config/bin и сохранять туда скрипты?
    Можно ведь просто на кнопке или в меню прописать команду:
    startx /usr/games/open arena -- :1
    Разве нет?

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

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

  3. а как можно запустить в отдельном x-сервере приложение, установленное через PlayOnLinux ?

  4. Рвётся интернет соединение для нового Х-сервера, когда возвращаешься в основной.
    Т.е. например, запускаешь Counter Strike 2D, играешь на каком-нибудь интернет-сервере, переключаешься основной Х-сервер на минуту (например, музыку другую захотелось включить), возвращаешься в игру, а тебя уже на сервере нет.
    При этом интернет-соединение для приложений, работающих основном Х-сервере, работает нормально (IRC, ICQ, DC++ — соединения не теряют).
    Интернет подключен через VPN (PPTP), Ubuntu 10.04, Gnome. Только у меня такой баг? Это можно как-нибудь вылечить?

    • У меня не рвется ничего. Сейчас вот специально проверил на «Urban Terror». Переключался туда-сюда несколько раз, соединение не теряется.

  5. А как остановить\вырубить повисшую игру? Как ребутнуть\отключить этот :1 дисплей иксов?

  6. У меня почему-то на новом иксе (:1) запускается игра, а звук от неё работает только когда переключаюсь на старый (:0)

  7. Еще один вопрос.
    Когда я запускаю Team Fortress 2, по центру экрана появляется курсор, и в :0, и в :1.
    Подскажите, что делать.

    • Ну так об этом же в статье написано:

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

  8. Народ помогите кто чем может. Судя по всему не запускается игра в отдельных иксах после патча и переустановки собственно системы. До этого все отлично работало, все делал по инструкции, имел возможность если чо прыгать на рабочий стол и отвечать на почту и звонки по alt+f7 и назад по alt+f6. Теперь любая комбинация не показывает даже приглашение ввести логин, а просто черное окно (alt+f1 и тд, только alt+f7 в игру возвращает). Случайно нажал alt+tab и попал на рабочий стол, а игра зависла. Чо делать, куды копать??!!
    Заранее спасибо.

  9. %>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

    любуюсь черным экраном

      • 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.

        • Ну так вам в одном сообщении сразу говорится и о причине проблемы:

          Server is already active for display 1

          … и о методе ее решения:

          If this server is no longer running, remove /tmp/.X1-lock and start again.

          Говоря по-русски: удалите файл /tmp/.X1-lock и запустите сервер заново.

          • Удалил, запустил:

            _XSERVTransSocketINETCreateListener: …SocketCreateListener() failed
            _XSERVTransMakeAllCOTSServerListeners: 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.

          • По каким-то причинам новый X-сервер пытается запуститься дважды. По каким именно причинам — не знаю. Можете попробовать покопаться в указанном логе, быть может он прольет свет на проблему…

          • указанный лог:
            [ 96307.192] _XSERVTransSocketINETCreateListener: …SocketCreateListener() failed
            [ 96307.193] _XSERVTransMakeAllCOTSServerListeners: 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

  10. Запускаю так WarCraft 3 — Х-ы запускаются, заставка варика тоже, но через 1-2 мин Х-ы падают. Вот лог:

    ALSA lib pcm_pulse.c:100 8:(_snd_pcm_pul se_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

  11. Итак, попробовал описанное. Ubuntu 11.04.
    Hedgewars — без звука вообще =( правда использую PulseAudio
    Steam — CStrike — пытается запуститься в новых иксах, но потом что то идёт не так и она запускается в текущих =(

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *