X-Ausgabe umleiten

5922
Adam Matan

Ich habe ein kleines Programm, das einige Elemente eines Webservices überprüft. Das Programm zeigt die Grafikausgabe und die Ergebnisse der Kommandozeile.

Ich habe versucht, dieses Programm so zu automatisieren, dass es regelmäßig auf einem Server in meinem Büro ausgeführt wird. Problem ist, funktioniert es nur, wenn ich X aktiviert habe - entweder direkt auf dem Server oder via SSH -X.

Nach Google habe ich Xvfb ausprobiert, was mir eine ziemlich kryptische Fehlermeldung ergab:

Xvfb :1 -screen 0 1600x1200x32  Fatal server error: Server is already active for display 1 If this server is no longer running, remove /tmp/.X1-lock and start again. 

Irgendwelche Ideen, wie man es laufen lässt? Ich suche eigentlich das X-Äquivalent von &>/dev/null...

3

4 Antworten auf die Frage

3
Arjan

In Ubuntu gibt es echo $DISPLAYwahrscheinlich nach :0.0, wenn Sie sagen, dass Ihre Ubuntu-Sitzung Anzeige 0 verwendet. Dies sollte eine andere Zahl für Sie übrig lassen. Sollte :1also in Ordnung gewesen sein, es sei denn, es Xvfblaufen noch einige Tests aus einem vorherigen Test? (Oder wie bei den Fehlerzuständen /tmp/.X1-lock: Wenn nicht eine temporäre Datei nach einem früheren Test nicht entfernt wurde.) Aber: Wenn Sie nicht herausfinden können, was Anzeige 1 verwendet, sollte dies auch für eine andere höhere Zahl gelten.

Ein kurzer Test in frischem Ubuntu 9.10:

# Einmal installieren, falls erforderlich: sudo apt-get install xvfb sudo apt-get install imagemagick  # Führen Sie Xvfb im Hintergrund auf Anzeige 1 aus Xvfb: 1 &  # Xclock im Hintergrund ausführen, auf Anzeige 1 ANZEIGE =: 1 x Uhr &  # Machen Sie eine Bildschirmaufnahme des Fensters mit dem Namen Xclock ANZEIGE =: 1 Importfenster Xclock current-time.png  # Stoppen Sie xclock töte `pidof xclock '  # Stoppen Sie Xvfb töte `pidof Xvfb`

Dadurch sollte eine Datei erstellt werden, current-time.pngdie die aktuelle Uhrzeit anzeigt. Geht das für dich?

Du solltest die PIDs mit `cmd & cmd_pid = $!` Speichern und sie gezielt töten, um zu vermeiden, dass unschuldige Zuschauer herausfallen. l0b0 vor 10 Jahren 0
3
Jonny Best

I had a similar problem and while Alex Morega's answer is fine, I liked this one better:

After installing xvfb, you can solve that in a single line: "xvfb-run <command>", where <command> is your program.

Source

1
Alex Morega

Sie könnten eine VNC-Anzeige erstellen. VNC ist für Remote-Desktops gedacht: Auf der Serverseite wird eine virtuelle X-Anzeige erstellt, die im Arbeitsspeicher wiedergegeben wird (es ist nicht einmal eine Videokarte erforderlich), und Sie können über einen VNC-Client eine Remote-Verbindung herstellen.

Das Ubuntu-Paket wird vnc4serverim Universum benannt. Sie können eine Anzeige mit dem folgenden Befehl starten:

vnc4server :10 

Wenn Sie es zum ersten Mal ausführen, werden Sie nach einem Kennwort gefragt. Da Sie jedoch keine Remote-Verbindung zum Display herstellen müssen, können Sie alles eingeben. Beachten Sie, dass hierdurch ein Port auf Ihrem Computer geöffnet wird (in diesem Beispiel 5910), über den eine Verbindung zu diesem neuen X-Display hergestellt werden kann. Eine Firewall ist daher ratsam.

Führen Sie nun das cron-Skript DISPLAY=:10.0in seiner Umgebung aus und es sollte die VNC-Anzeige verwendet werden.

0
brandstaetter

Es sieht so aus, als ob Ihr Server in Runlevel 5 (X11 aktiv) läuft. Was Sie vielleicht wollen, ist ein Runlevel ohne das, also versuchen Sie 3, Xvfb auszuführen. (vorausgesetzt, Sie führen kein Ubuntu aus. In diesem Fall kann dies hässlich werden.)

Vielen Dank. Ich benutze eigentlich Ubuntu und versuche es mit 3: "Schwerwiegender Serverfehler: Bildschirm 0 konnte nicht hinzugefügt werden". Adam Matan vor 14 Jahren 0
Ja, Ubuntu hat eine seltsame Konfiguration für die Runlevel. Der Standard-Runlevel ist 2, denke ich, und es scheint keinen Runlevel ohne X11 zu geben. Wenn Sie sich bezüglich der Runlevels nicht sicher sind, informieren Sie sich in den Dokumenten. brandstaetter vor 14 Jahren 0
@brandstaetter: In Debian und Ubuntu sind die Runlevels 2-5 identisch (System bootet zu Runlevel 2). Runlevel 1 ist der Einzelbenutzer "Wiederherstellungsmodus", kein X dort. quack quixote vor 14 Jahren 0
Vielen Dank. Es gibt jedoch keinen Multi-User-Modus ohne X11, noch :( brandstaetter vor 14 Jahren 0