ZenWay - Linux сегодня!
  • Главная
  • Форум
  • Контакты
  • Архив
  • Гостевая книга
×
Поиск по сайту
ГлавнаяHужное/полезноеИзучаем LinuxДополнительные материалыЗапуск игр в новой X-сессии

Запуск игр в новой X-сессии

Дополнительные материалы, Изучаем Linux, Hужное/полезноеПросмотров: 14922Комментарии: 129 апреля 2009 г.
Games / Python / Script / Wine / Учебные материалы / Эмулятор

Уж не знаю, актуальна ли ещё эта тема, наброски писал ещё полтора года назад...

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

Так вот, более менее решил собрать в одном месте то, что знаю по запуску игр в Linux. Один из важных моментов, который часто хочется легко осуществлять - запуск игры в отдельных иксах. Это бывает очень удобно. Легко вернуться в рабочие иксы и продолжить работу или ответить в jabber/icq, не проблема, если зависнут иксы с игрой, да и бывает что глюки всякие всплываю, чего не наблюдается в чистых иксах. Ещё мне жутко не нравится, когда колбасит панель и хлам на раб столе из-за смены разрешения.

 
В общем, мотивация ясна, но как же это сделать просто, чтобы оно стоило того? Как-то на просторах Интернет попался простенький скрипт на Python. Простенький и достаточно гениальный. Всё, что требуется теперь, что написать:

 

$ game ЧТО_ВЫПОЛНИТЬ
где game - название скрипта, а за ним следует то, что нужно запускать в отдельных иксах. Скажем:
$ game wine heroes3.exe

Вот код скрипта game:

#!/usr/bin/python

import os, sys, time, signal      

XORG_DELAY = 0

if len(sys.argv) == 1 or (len(sys.argv)==2 and sys.argv[1].startswith('-x:')):
        print >>sys.stderr, "Usage: %s [-x:id] app [args]" % sys.argv[0]
        sys.exit(2)

if sys.argv[1].startswith('-x:'):
        xid = int(sys.argv[1].split(':')[1])
        argv = sys.argv[2:]
else:
        xid = 1
        argv = sys.argv[1:]

pid = os.fork()
if pid == 0:
        # Xorg child
        print " * Staring X11 on :%d" % xid
        sys.stdin.close()
        sys.stdout.close()
        sys.stderr.close()
        os.execvp('Xorg', ['/usr/bin/Xorg', ':%d' % xid])
else:
        print " * Waiting for X11 to finish starting (%d seconds)" % XORG_DELAY
        time.sleep(XORG_DELAY)
        cmd = 'env DISPLAY=":' + str(xid) + '" ' + ' '.join(argv)
        print " * Starting %s" % cmd
        os.system(cmd)
        print " * Application done, terminating spawned X11"   
        os.kill(pid, signal.SIGTERM)
        os.wait()

 

Что он делает? Открывает Х-сессию (номер которой можно задавать через -x:№), выжидает время, указанное в XORG_DELAY (в оригинальном скрипте стояло 8 секунда!! Зачем??) и запускает то, что передаётся ему в виде параметров. Если ничего не запускается или игра при запуске падает, то и иксы тут же захлопываются. Выходите вы из игры и иксы сами завершают свою работу. Довольно удобно!

Для работы скрипта потребовалось сделать:

$ sudo chmod +s /usr/bin/Xorg

И так после кажого обновления иксов.

Автор: vovans
Еще записи по теме
Qt5 Configuration Tool
Qt5 Configuration Tool
Systemd для администраторов (Леннарт Поттеринг)
Systemd для администраторов (Леннарт Поттеринг)
AllTray
AllTray
Как убрать меню в GTK-приложениях?
Как убрать меню в GTK-приложениях?
PexifTool
PexifTool
Wakefull
Wakefull

Комментариев: 12 RSS

1Offoffoff06-07-2010 05:28

А что бы не менять права на Xorg?

2.07-12-2010 13:02

Прекрасно работает и без изменения прав на хорг.

3leg0las23-10-2011 13:15

Этот скрипт позволил обойти регрессию с xinput2 на новых версиях wine`а (старше 1.3.16 где-то) бага тут: //bugs.winehq.org/show_bug.cgi?id=27419. Мод HD для 3-х хиросов, 1920x1080, фулскрин - все замечательно работает

4tamat at myttk dot ru04-02-2015 22:23

А это вообще безопасно suid в Xorg? Но у меня без него не взлетело.

5svet05-02-2015 21:33

эта инструкция была актуальна 5 и более лет назад,какие могут быть замечания? ))

Но как пример имеет право на жизнь и до сих пор.

6Basil16-09-2015 07:16

Весьма полезно и... РА-БО-ТА-ЕТ !

7Basil05-03-2016 03:10

Сообщает:

game firefox

File "/usr/local/bin/game", line 16

print " * Staring X11 on :%d" % xid

^

SyntaxError: Missing parentheses in call to 'print'

- что можно/нужно сделать ?

Спасибо.

8vovans05-03-2016 18:56

Нужно выполнять сей скрипт под вторым питоном.

То есть, в самом начале указывать примерно так:

#!/usr/bin/python2

В третьем питоне вывод print заворачивается в скобки, то есть 16-я строка должна выглядеть примерно так:

print(" * Staring X11 on :%d") % xid

Вообще, можно попробовать поудалять строки с print, но сомневаюсь я что-то, что это без прочих правок будет работать на python 3.

9Basil06-03-2016 09:26

Благодаря за отзывчивость, попробовал дописать "2" и получил:

SyntaxError: Non-ASCII character '\xc2' in file /usr/local/bin/game on line 30, but no encoding declared; see //python.org/dev/peps/pep-0263/ for details

--- ежели помнить, что строк в скрипте лишь 29 - забавно

Эх...

10gray06-03-2016 12:42

Basil, где-то чёто лишнее вставил, вероятно в строке 29, возможно русский символ в комментарии или типа того

как вариант использовать # -*- coding: utf-8 -*- в заголовке, но в данном скрипте оно не нужно и лучше найти проблему, а ещё лучше переписать на питон3

11Basil06-03-2016 16:26

"а ещё лучше переписать на питон3" --- золотые слова :) только вот не писатель я :(

И совет: "использовать # -*- coding: utf-8 -*- в заголовке" я уже испробовал - ФигВам называется...

12vovans06-03-2016 22:50

Ну, я всё же попробовал бы всё удалить после последнего символа. Мало ли, может мусор тка какой, которого не видно. И сделал бы одну пустую строку. Хотя, подозреваю, всё это уже проделано. Не знаю, к сожалению нет возможности сейчас проверить работоспособность скрипта. Но раньше я его точно использовал и играл таким образом )

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

Используйте нормальные имена.

Вы можете войти под своим логином или зарегистрироваться на сайте.

(обязательно)

Рубрики
  • Hовости
  • Изучаем Linux
  • Обзоры Linux ПО
    • Hужное/полезное
    • Аудио и видео ПО
    • Графика
    • Офисное ПО
    • Интернет ПО
    • Образовательные
    • Игры
    • Администрирование
    • Системные утилиты
    • Прочие
    • Shareware / Demo
  • Дистрибутивы
  • Дополнительные материалы
Последние комментарии
AbiWord
  • Святой_Мученик_Linux » Некорректно отображает картинки в майкросовтовски х файлах doc. Картинки позиционируются одна на другую, поверх текста. В...
  • vs » К сожалению, AbiWord давно протух и толку от него ровно 0. Даже больше вреда. Сейчас...
tarsnap
  • Анонимус » В тексте опечатка "для использования для использования"
DarGUI / KDar
  • WinGamer » Можно ли забекапить всю систему windows этим архиватором?
cfiles
  • Дмитрий » так эт самое, а как например переименовать папку?
Profanity
  • zon » проше научится свой клиент написать чем разобратся куда что клацать для отправки получения месаг.
  • vovans » Тут не нужно ничего "клацать". Достаточно пару раз на хоткеи посмотреть.
noteshrink
  • Аноним » Теперь есть плюсовая (не пайтон) версия: //github. com/ ImageProcessing - ElectronicPublications /noteshrink-c/ releases
Page dewarp
  • Аноним » Теперь есть плюсовая (не пайтон) версия: //github. com/ ImageProcessing - ElectronicPublications /pagedewarp/ releases
Strawberry Music Player
  • Rododendron » А как добавить радиостанции в плеер? Нигде найти не могу.
Форум
[18/11/2022 11:54:52]
vscode and c/c++
[31/08/2022 12:25:53]
Tor Browser
[26/08/2022 07:57:14]
Музыкальный калейдоскоп
[22/05/2022 15:45:40]
Стратегии RTS
[30/03/2022 09:05:20]
Заметки с синхронизацией
[01/03/2022 20:15:05]
Говорильня (дискуссионный клуб)
[13/02/2022 11:44:28]
[РЕШЕНО] права на запись в примонтированный образ диска (raw.img)
[07/02/2022 13:22:01]
Конвертировать текст набаранный в неправильной раскладке
[04/02/2022 20:35:22]
Редактор тегов
Облако меток
2D338 3D241 ALSA68 ASCII120 Android1 Arch Linux38 Audio416 Backup80 Benchmark78 Bluetooth2 C++969 CD48 Console1318 DJ-система17 DVD47 Debian28 DjVu22 Enlightenment19 FFmpeg191 FLTK29 FPS40 FREE155 FTP18 FVWM21 Fluxbox40 GIMP24 GNU26 GPS22 GTK1302 GUI801 Gambas11 Games686 Gentoo3 Gnome349 Gstreamer133 HDD122 HDR7 HTML62 Hex-редактор14 ICQ17 IP-сети25 IP-телефон22 IRC31 ISO39 IceWM22 ImageMagick56 JACK99 Jabber35 Java308 JavaScript115 KDE209 LAN29 LXDE37 LaTeX66 Live-CD70 Live-DVD55 Live-USB53 Lua61 MATE32 MEncoder31 MIDI91 MMORPG12 Mail42 Markdown53 Mono53 Mplayer75 MySQL2 OSS9 Open Source14 OpenGL301 Openbox89 P2P51 PDF133 PHP12 Pascal17 Perl102 Phonon27 PulseAudio17 Python759 QT894 RAW34 RPG101 RSS53 RTS42 Roguelike70 Ruby19 Rust15 SDL312 SVG39 Screencast32 Screenshot61 Script78 Slackware66 TOR17 TOX3 Tk39 Torrent67 Ubuntu69 VLC16 Vala64 Web629 WebKit72 WebUI34 WiFi47 Window Maker16 Wine8 XMPP35 Xfce70 Xine14 YouTube80 video4linux27 wxWidgets108 Автоматизация31 Администрирование335 Анонимная сеть47 Антивирус14 Апплет120 Аркада235 Архиватор11 Астрономия36 Аудио конвертер70 Аудио редактор50 Аудиоплеер184 Безопасность243 Бизнес-приложение4 Браузер87 Бродилка203 Бухгалтерия11 Веб-камера36 Видео148
© Zen Way, 2023. Работает на MaxSite CMS | Время: 0.1132 | SQL: 15 | Память: 8.74MB | Вход