Eu segui este artigo para executar um Firefox baseado em testes em um servidor no início deste ano. O Xvfb-stuff é bastante simples, só precisamos nos certificar de desativar os controles de acesso para que o X não fique todo arrogante. Algo como isso deve fazer você ir:
sudo apt-get install xvfb
sudo Xvfb :10 -ac
export DISPLAY=:10
# run your gubbins
Embora você deva observar que isso não fornecerá tudo o que uma sessão de desktop real possui. Se você entrar nessa situação (onde precisa de um desktop real), talvez valha a pena separar isso em uma máquina virtual no topo do servidor. Um pouco menos ineficiente, mas com quilômetros mais portáteis.
Edite de Abraão:
Eu acabei usando a metodologia, mas eu queria em uma tarefa de gerenciamento de python. Minha implementação fez a mesma coisa, mas parecia mais com isso:
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()