我有一套可以在笔记本电脑上运行的脚本,只要我启动到 X 会话,它们就可以正常工作,但如果我在无头服务器安装上运行,Gtk 就会出现大量严重故障。我确信解决方案是使用 xvfb,但我找不到一个可行的示例。
非常感谢您的帮助。
答案1
我跟着本文用于在今年早些时候在服务器上运行基于 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()