MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
game Х-сессия
19.10.2013
12:43
Раздел: linux - wine

$ 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

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

← Содержание ...
 
MyTetra Share v.0.35
Яндекс индекс цитирования