$ 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
И так после кажого обновления иксов.