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?
Antwort
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
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. –
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.
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.
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.
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.
Login, Benutzer wechseln & Login in ein anderes Konto, zurück zum ersten Konto und "zuletzt gestartete Gnome-Session" ist nicht mehr aktiv. – Dima
@Dima Guter Punkt. Ich habe meine Antwort geändert, um Prozesse auf den aktuellen Benutzer zu beschränken. – Nick
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
- 1. Wie erstelle ich einen Alias für die aktuelle Sitzung?
- 2. Wie bekomme ich die aktuelle Sitzung, wenn ich MapperFactoryBean verwende?
- 3. Javascript - Wie setze ich die Variable 'this' für eine Funktion
- 4. Wie setze ich die env-Variable für PHP?
- 5. Wie setze ich den Standardwert für die Variable?
- 6. Wie setze ich die aktuelle Seite "aktiv" in PHP
- 7. Wie ich meine App unterstütze Retina Display
- 8. Wie mache ich meine Variable sicher für die Datenbankeinfügung?
- 9. Kann ein Oracle-Trigger für die aktuelle Sitzung deaktiviert werden?
- 10. Wie setze ich automatisch "npm start" in nodejs?
- 11. Wie kann ich die Login-URL für eine DotNetNuke-Site zurückgeben, wenn meine aktuelle Sitzung nicht bei DNN registriert ist?
- 12. Wie setze ich den Standardwert für eine Variable in C#?
- 13. Wie setze ich meine Sidekiq Zähler zurück?
- 14. Wie setze ich Kommas in meine Produktattribute?
- 15. Assembly - Wie setze ich eine boolesche Variable
- 16. ASP.NET: Beendet Response.Redirect() die aktuelle Sitzung?
- 17. Wie setze ich die Variable in einer PHP-Datei?
- 18. Wie setze ich die Date-Variable auf null in VB.NET
- 19. Wie setze ich Umgebungsvariablen von Sub-Makefiles auf das Root-Makefile oder meine aktuelle Shell?
- 20. Wie bekomme ich die aktuelle URL der Seite [0]
- 21. Wie setze ich eine Variable auf das aktuelle Datum und das Datum-1 in Linux?
- 22. Wie kann ich das aktuelle Benutzer-Token für die physische Sitzung abrufen?
- 23. Wie setze ich den Cookie-Ablauf auf Sitzung in C#
- 24. Ändern der PATH-Umgebungsvariable für die Sitzung
- 25. Wie setze ich Regeln für den Server?
- 26. Wie kann ich feststellen, wo meine Emacs-Sitzung angezeigt wird?
- 27. Setze Variable in Jinja
- 28. wie ich automatisch meine Anwendung in Android
- 29. Wie kann ich meine Datenbank Datensätze automatisch
- 30. Setze die Variable in der Befehlsausgabe
Fragen wie diese sind mehr über Betriebssysteme als die Programmierung und Serverfault.com ist, wo sie hingehen. – SpliFF
Es scheint, wenn vncserver gestartet wurde, wird die DISPLAY-Variable automatisch in der neuen VNC-Sitzung gesetzt, zumindest funktioniert das für mich. –
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