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