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

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

Дополнительные материалы, Изучаем Linux, Hужное/полезноеПросмотров: 15538Комментарии: 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
Еще записи по теме
TLPUI
TLPUI
MountManager
MountManager
OnionShare
OnionShare
Trimage
Trimage
NTFS-3G + Ntfsprogs
NTFS-3G + Ntfsprogs
Zenwalk установка приложений. Часть №3
Zenwalk установка приложений. Часть №3

Комментариев: 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
  • Дистрибутивы
  • Дополнительные материалы
Последние комментарии
AzPainter
  • Crocodilero » Ну вот же: //github.com/ Symbian9/ azpainter/wiki/ Packaging- statusУже давно неактуально, нет такого пользователя и репозитория.Ре позиторий разработчицы, а также готовые...
Карты (Gnome Maps)
  • O_Dik » Как добавить спутниковые карты? Или откуда их можно скачать?
Трансляция потока с веб-камеры с помощью ffserver
  • vovans » Беда :(FFmpeg's FFServer feature has been removed from the main release.You'll have to bring up...
MusE - Linux Music Editor
  • Аноним » я её скачал. Ни инстукции, ни мануалов. удалил
  • vovans » Разумно. Тут или понимаешь что делать, или до свидания. Вот так вот ворваться с нуля...
  • BigOrange » мануал официальный самый что ни наесть официальный//muse- sequencer. github.io/docs/ intro.htmlещё разработчики советуют этот форум// linuxmusicians. com/viewforum. php?f=61
WHDD
  • Александр » Привет)Ни кто мне не может подсказать, пожалуйста, в чем у меня проблема: хочу проверить флешку...
  • илья » Привет)Ни кто мне не может подсказать, пожалуйста, в чем у меня проблема: хочу проверить флешку...
fbless
  • totiks » Очень понравилась эта утилита, написал простенький скрипт для выбора книжек с помощью peco , чтоб...
FreetuxTV
  • Алиса » Попробуйте //github. com/yuki-iptv/ yuki-iptv
Форум
[12/02/2025 16:49:16]
openSUSE Tumbleweed, zypper ref, Segmentation fault (core dumped)
[10/02/2025 22:04:59]
Говорильня (дискуссионный клуб)
[23/01/2024 04:13:36]
Утилита запуска команд в трее
[26/07/2023 11:17:45]
Музыкальный калейдоскоп
[16/07/2023 12:24:19]
LFS
[17/04/2023 10:14:08]
Тестовая бродилка на Си с ChatGPT
[18/11/2022 11:54:52]
vscode and c/c++
[31/08/2022 12:25:53]
Tor Browser
[22/05/2022 15:45:40]
Стратегии RTS
Облако меток
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 MMORPG12 Mail42 Markdown53 Midi91 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, 2025. Работает на MaxSite CMS | Время: 0.0833 | SQL: 15 | Память: 8.58MB | Вход