Вопрос Как я могу использовать pygi Webkit при установке безгласного сервера?


У меня есть набор сценариев, которые работают на моем ноутбуке, который отлично работает до тех пор, пока я загружаюсь в X-сеанс, но если я запускаю установку без головного сервера, я получаю множество критических ошибок из Gtk. Я уверен, что решение - использовать xvfb, но я не могу найти рабочий пример.

Помощь была оценена.


1
2017-11-24 16:57


происхождения




ответы:


Я последовал за Эта статья для запуска тестовой среды на основе Firefox на сервере в начале этого года. Xvfb-материал довольно прост, нам просто нужно убедиться, что вы отключили управление доступом, чтобы X не получил все расправы. Что-то вроде этого должно заставить вас идти:

sudo apt-get install xvfb
sudo Xvfb :10 -ac
export DISPLAY=:10
# run your gubbins

Хотя вы должны отметить, что это не будет предоставлять все, что есть в реальной настольной сессии. Если вы когда-либо попадаете в эту ситуацию (где вам нужен реальный рабочий стол), возможно, стоит выделить это на виртуальную машину поверх сервера. Немного менее неэффективны, но мили более портативны.

Отредактируйте от Авраама:
Я закончил использовать методологию, но я хотел ее в задаче управления python. Моя реализация сделала то же самое, но это выглядело следующим образом:

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()

2
2017-11-24 17:56



Спасибо @Oli. Ты спасатель. Позвольте мне попробовать, прежде чем принять, чтобы посмотреть, работает ли это в моем env. - RobotHumans
Кроме того, если вам просто нужно запустить один скрипт, xvfb-run -a script запустит скрипт в сеансе, без необходимости вручную указывать DISPLAY или надеяться, что вы выберете тот, который не конфликтует с существующими экранами (в случае, если вам нужно запустить несколько вещей в xvfb). - dobey
Я управляю командами управления django с основанием подоболочки, поэтому это не совсем просто. Я больше надеялся на импорт python-beast-mode-xvfb; python-beast-mode-xvfb.instance (экземпляр webkit) или что-то в этом роде, но все в порядке. - RobotHumans
@hbdgaf Как так? Terminate не уничтожает потоки потомков, поэтому может случиться, что X разворачивается и становится сиротой (но жив). docs.python.org/dev/library/... - Oli♦
Неважно. Это сработало. Я убил запуск в середине, чтобы что-то устранить. Когда вы начинаете голый и позволяете ему запускать xvfb, работайте при этом. - RobotHumans