У меня есть набор сценариев, который работает на моем ноутбуке и работает нормально, пока я загружаюсь в сеанс X, но если я работаю на установке без сервера, я получаю множество критических сбоев от Gtk. Я уверен, что решение состоит в том, чтобы использовать xvfb, но я не могу найти работающий пример.
Помощь приветствуется.
Я следовал этой статье для запуска тестовой среды на основе Firefox на сервере ранее в этом году. Xvfb-штука довольно проста, нам просто нужно убедиться, что контроль доступа отключен, чтобы X не получал всю нагрузку. Нечто подобное должно заставить вас начать:
sudo apt-get install xvfb
sudo Xvfb :10 -ac
export DISPLAY=:10
# run your gubbins
Хотя вы должны заметить, что это не обеспечит все, что есть в реальном сеансе рабочего стола. Если вы когда-нибудь попадете в такую ситуацию (где вам нужен настоящий рабочий стол), возможно, стоит разделить это на виртуальную машину поверх сервера. Чуть менее неэффективно, но намного более портативно.
Редактировать от Авраама:
Я закончил, используя методологию, но я хотел ее в задаче управления питоном. Моя реализация сделала то же самое, но это выглядело так:
from django.core.management.base import BaseCommand, CommandError
import subprocess, os
from multiprocessing import Process
def run():
sub = Process(target=subprocess.call, args=(('Xvfb', ':10', '-ac',), ))
sub.start()
env = os.environ.copy()
env['DISPLAY'] = ":10"
tasks = ('random','management','commands','thatneedDISPLAY:X')
for task in tasks:
p = subprocess.call(['python','manage.py',task],env=env)
sub.terminate()
class Command(BaseCommand):
def __init__(self):
BaseCommand.__init__(self)
args = 'none'
help = '''Run all daily tasks.'''
def handle(self, *args, **options):
run()