2009-06-29 6 views
10

Ich sehe, dass $ Display auf localhost gesetzt ist: 0,0 Wenn ich über einen VNC-Server laufe dies möglicherweise nicht korrekt ist, gibt es eine Möglichkeit, automatisch einzustellen es in meinem Anmeldeskript?

+1

Fragen wie diese sind mehr über Betriebssysteme als die Programmierung und Serverfault.com ist, wo sie hingehen. – SpliFF

+1

Es scheint, wenn vncserver gestartet wurde, wird die DISPLAY-Variable automatisch in der neuen VNC-Sitzung gesetzt, zumindest funktioniert das für mich. –

+0

Sie sollten beschreiben, auf welcher Maschine Sie sich anmelden und wo die VNC-Server laufen. Alle in einer vncserver-Umgebung erstellten Shells haben bereits die korrekte DISPLAY-Variable. Es klingt, als ob Sie sich remote bei einem Remote-Host anmelden und versuchen, Apps auf einem bereits laufenden X-Server zu starten. Dein Anmeldeskript weiß nicht, mit welchem ​​VNC-Server es sich mit mehr verbinden sollte als wir. – codeDr

Antwort

8

Verwenden Sie Bash? Wechseln Sie in Ihrem Basisverzeichnis zur Datei .bashrc, und legen Sie die Variable fest, und exportieren Sie sie anschließend.

ANZEIGE = localhost: 0.0; Export DISPLAY

Sie können/etc/bashrc verwenden, wenn Sie es für alle Benutzer tun möchten.

Sie auch ~ aussehen wollen können/.bash_profile und/etc/profile

EDIT:

function get_xserver() 
{ 
    case $TERM in 
     xterm) 
      XSERVER=$(who am i | awk '{print $NF}' | tr -d ')''(')  
      XSERVER=${XSERVER%%:*} 
      ;; 
     aterm | rxvt)   
      ;; 
    esac 
} 

if [ -z ${DISPLAY:=""} ]; then 
    get_xserver 
    if [[ -z ${XSERVER} || ${XSERVER} == $(hostname) || \ 
     ${XSERVER} == "unix" ]]; then 
     DISPLAY=":0.0"   # Display on local host. 
    else 
     DISPLAY=${XSERVER}:0.0 # Display on remote host. 
    fi 
fi 

export DISPLAY 
+0

Wenn ich dies in meine bashrc einfüge, wird es nicht mit vncserver arbeiten, weil es andere Anzeigen wie localhost: 1.0 usw. erzeugt, also brauche ich eine etwas allgemeinere Lösung. –

0

Sie werden Ihrem VNC-Client sagen müssen, um den richtigen $ DISPLAY zu exportieren Sobald Sie sich angemeldet haben. Wie Sie das tun, hängt wahrscheinlich von Ihrem VNC-Client ab.

1

Ich vermute hier, basierend auf Fragen, die ich in der Vergangenheit gehabt haben, die ich lösen hat:

  • Sie auf Maschine B zu einem VNC-Server zu verbinden, zeigt es auf einen VNC-Client Maschine A
  • Sie starten eine Konsole (xterm oder gleichwertig) auf Maschine B und verwenden diese zum Verbinden mit Maschine C
  • möchten Sie eine X-basierte Anwendung auf Maschine C starten, damit sie auf dem VNC-Server angezeigt wird auf Maschine B, so dass Sie es auf Maschine A sehen können.

Ich endete mit zwei Lösungen. Meine ursprüngliche Lösung basierte auf der Verwendung von rsh. Seitdem haben die meisten unserer Server ssh installiert, was dies vereinfacht hat.

Mit rsh, habe ich eine Tabelle von Maschinen vs OS vs benutzerdefinierte Optionen zusammengestellt, die diesen Prozess in Perl führen würde. Bourne-Shell war nicht ausreichend, und wir haben keine Bash auf Sun- oder HP-Rechnern (und hatten zu diesem Zeitpunkt keine Bash auf AIX - AIX 5L war noch nicht out). Die Korn-Shell war auch keine Option, da die meisten unserer Linux-Boxen kein pdksh installiert haben. Aber wenn Sie diese Einschränkungen nicht beachten, können Sie die Idee in ksh oder bash implementieren, denke ich.

Wie auch immer, ich würde im Grunde 'rsh $ machine -l $ user "$ cmd"' ausführen, wo $ machine war natürlich die Maschine, die ich anmeldete, $ user, ähnlich offensichtlich (obwohl wenn ich ging In "root" hatte dies einige Abweichungen, da wir aus Gründen, die ich nicht vollständig verstehe, mehrere Wurzeln auf einigen Maschinen haben, und $ cmd war im Grunde "DISPLAY = $ DISPLAY xterm", wenn ich zum Beispiel konsole startete, $ cmd wäre "konsole --display = $ DISPLAY". Da $ DISPLAY lokal ausgewertet wurde (wo es richtig eingestellt ist) und nicht wörtlich über rsh übergeben wird, wäre die Anzeige immer korrekt eingestellt.

Ich musste auch sicherstellen, dass niemand etwas Dummes wie Reset DISPLAY tat, wenn es bereits eingestellt war.

Jetzt verwende ich einfach ssh, stellen Sie sicher, dass X11Forwarding auf Ja auf dem Server (sshd_config) festgelegt ist, und dann kann ich nur ssh an die Maschine, X-Befehle über das Kabel verschlüsselt gehen, und es wird immer Gehe zurück zum richtigen Ort.

1

Ihr vncserver hat eine Konfigurationsdatei, die die Anzeigenummer bestimmt. Um dies automatisch zu tun, besteht eine Lösung darin, diese Datei zu analysieren, die Nummer zu extrahieren und sie korrekt zu setzen.Ein einfacher (besser) ist es, diese Display-Nummer in einem Config-Skript zu setzen und sowohl in Ihrer VNC-Server-Konfiguration als auch in Ihren Init-Skripten zu verwenden.

7

Hier ist etwas, das ich gerade aufgetankt habe. Es untersucht die Umgebung des zuletzt gestarteten "gnome-session" -Prozesses (DISPLAY wird korrekt eingestellt, wenn VNC einen Sitzungs-/Fenstermanager startet). Ersetzen Sie "gnome-session" durch den Namen des Prozesses, den Ihr VNC-Server beim Start startet.

PID=`pgrep -n -u $USER gnome-session` 
if [ -n "$PID" ]; then 
    export DISPLAY=`awk 'BEGIN{FS="="; RS="\0"} $1=="DISPLAY" {print $2; exit}' /proc/$PID/environ` 
    echo "DISPLAY set to $DISPLAY" 
else 
    echo "Could not set DISPLAY" 
fi 
unset PID 

Sie sollten nur in der Lage sein, dass in der Datei .bashrc fallen zu lassen.

+0

Login, Benutzer wechseln & Login in ein anderes Konto, zurück zum ersten Konto und "zuletzt gestartete Gnome-Session" ist nicht mehr aktiv. – Dima

+0

@Dima Guter Punkt. Ich habe meine Antwort geändert, um Prozesse auf den aktuellen Benutzer zu beschränken. – Nick

+0

Ich musste Ihre Awk-Zeile ändern zu: 'Export DISPLAY = $ (cat/proc/$ PID/Umgebung | Zeichenketten | awk 'BEGIN {FS =" = ";} $ 1 ==" ANZEIGE "{print $ 2; exit} ') ' Dann hat es funktioniert. – isaaclw

Verwandte Themen