Kann X11 nicht mehr mit ssh verwenden. Habe XQuartz2.7.7 installiert. Die Anmeldung mit X11 über ssh gibt die Warnungen aus
Warnung: Einrichtung der nicht vertrauenswürdigen X11-Weiterleitung fehlgeschlagen: Xauth-Schlüsseldaten nicht generiert Warnung: Keine xauth-Daten; Verwendung gefälschter Authentifizierungsdaten für die X11-Weiterleitung.
In meinem eigenen System echo $DISPLAY
gibt
/private/tmp/com.apple.launchd.GuewxwWwKS/org.macosforge.xquartz:0
Wenn ich es jedoch versuche xauth generate $DISPLAY . trusted
, bekomme ich den Fehler
xauth: (argv):1: falscher Anzeigename „/private/tmp/com.apple.launchd.GuewxwWwKS/org.macosforge.xquartz:0“ im „add“-Befehl
Irgendwelche Ideen, wie man das beheben kann?
AKTUALISIEREN
Entwickler Jeremy Huddleston Sequoia gab gestern bekannt , dass dieses Problem in XQuartz 2.7.8_beta2 behoben ist :
XQuartz 2.7.8_beta2 steht zum Download bereit.
Unter http://xquartz.macosforge.org/trac/wiki/X112.7.8 finden Sie eine vollständige Reihe von Änderungen, aber die bemerkenswertesten sind:
1) xauth parst jetzt korrekt den Yosemite launchd $DISPLAY Socket-Pfad
2) libGL wurde auf Mesa 10.4.4 aktualisiert
3) Diverse Exploits wurden in xorg-server, freetype und libpng behoben
4) Ein Fehler hat in einigen Fällen automatische Updates verhindert behoben worden
Der Fehlerbericht wird geschlossen und als behoben markiert:
Wenn Sie die Beta nicht installieren können (oder wollen), können Sie trotzdem die Problemumgehung verwenden, die ich unten erkläre.
ANTWORTEN
Analyse
(scrollen Sie nach unten für den Abschnitt zur Problemumgehung)
Mein erster Gedanke war "die DISPLAY
Variable ist falsch". Aber es ist nicht.
Wie sich herausstellt, speichert die Variable unter OS X 10.10 Yosemite (und zurück zu 10.8 Mountain Lion ) einen Socket-Pfad:DISPLAY
launchd
/private/tmp/<socket name>
anstelle des bekannten Anzeigenamens:
hostname:displaynumber.screennumber
hostname:displaynumber.screennumber
(Ich habe am Ende dieser Antwort einige Informationen zum Format hinzugefügt .)
Das bedeutet, dass xauth
man mit dieser speziellen Inkarnation der DISPLAY
Variable umgehen muss, und ab Mavericks tat es das auch, aber der in Yosemite verwendete Socket hat einen anderen Pfad (genauer: /private/tmp/com.apple.launchd.XXXX
statt /private/tmp/launch-XXXX
) und xauth
bricht ab.
Dieser Fehler wurde dem XQuartz-Team am 18. November 2014 (vor 3 Monaten) gemeldet ( http://xquartz.macosforge.org/trac/ticket/2068 ):
Das xauth-Programm enthält sowohl in gethost.c als auch in parsedpy.c Code, um nach $DISPLAY-Namen zu suchen, die mit "/tmp/launch" beginnen, und dies als lokalen Socket zu behandeln. Der Speicherort scheint sich jedoch geändert zu haben, $DISPLAY beginnt jetzt mit "/private/tmp/com.apple.launchd", sodass der Code, der nach /tmp/launch sucht, es nicht abfängt. (...)
Laut Fehlerbeschreibung soll er in XQuartz 2.7.8 behoben werden, das 4 Monate zu spät ist (siehe Projekt-Roadmap-Seite unter http://xquartz.macosforge.org/trac/roadmap ).
Der Patch, der das Problem behebt, wurde am 31. Dezember 2014 an das Projekt freedesktop.org übergeben ( http://cgit.freedesktop.org/xorg/app/xauth/commit/parsedpy.c?id=f990dd936b5fd1a40290bb88cde517a0ac38f823 ):
diff --git a/parsedpy.c b/parsedpy.c
index c591b77..7365224 100644
--- a/parsedpy.c
+++ b/parsedpy.c
@@ -42,6 +42,9 @@ in this Software without prior written authorization from The Open Group.
#include <X11/Xauth.h> /* for FamilyLocal */
#include <X11/Xmu/SysUtil.h>
+#include <sys/stat.h>
+#include <sys/syslimits.h>
+
#if defined(UNIXCONN) || defined(LOCALCONN)
#define UNIX_CONNECTION "unix"
#define UNIX_CONNECTION_LENGTH 4
@@ -158,8 +161,32 @@ parse_displayname (const char *displayname,
if (!host) return False;
- if(strncmp (host, "/tmp/launch", 11) == 0) {
- family = FamilyLocal;
+ {
+ /*
+ * If using launchd socket, remove the screen number from the end
+ * of $DISPLAY and check if it is a path to a socket.
+ */
+ char path[PATH_MAX];
+ struct stat sbuf;
(...)
Es ist also nur eine Frage der Zeit, bis dieser Patch den Weg in das nächste Release von XQuartz findet.
Problemumgehung
(getestet auf OS X 10.10.2 Yosemite.)
Hinzufügen:
alias ssh="ln -fs $(echo $DISPLAY | sed 's:\(/private/tmp/com\.apple\.launchd\.[^/]*\)/.*:\1:') $(echo $DISPLAY | sed 's:/private/tmp/com\.apple\.launchd\.\([^/]*\)/.*:/private/tmp/launch-\1:'); ssh"
zu ~/.bashrc
und starten Sie entweder ein neues Terminalfenster oder beziehen Sie es ( . ~/.bashrc
) in Ihre aktuelle Terminalsitzung.
Dieser Alias verknüpft zuerst den Socket-Pfad mit /private/tmp/launch-XXX
(zum Beispiel ln -fs /private/tmp/com.apple.launchd.GuewxwWwKS /private/tmp/launch-GuewxwWwKS
) und beginnt dann mit ssh
:
Für Neugierige hat der Anzeigename des X-Servers traditionell diese Form (ab man X
Ubuntu): Der Anzeigename des X-Servers hat diese Form:
hostname:displaynumber.screennumber
wo:
hostname
The hostname specifies the name of the machine to which the display is physically
connected. If the hostname is not given, the most efficient way of communicating
to a server on the same machine will be used.
displaynumber
The phrase "display" is usually used to refer to a collection of monitors that
share a common set of input devices (keyboard, mouse, tablet, etc.). Most worksta‐
tions tend to only have one display. Larger, multi-user systems, however, fre‐
quently have several displays so that more than one person can be doing graphics
work at once. To avoid confusion, each display on a machine is assigned a display
number (beginning at 0) when the X server for that display is started. The display
number must always be given in a display name.
screennumber
Some displays share their input devices among two or more monitors. These may be
configured as a single logical screen, which allows windows to move across screens,
or as individual screens, each with their own set of windows. If configured such
that each monitor has its own set of windows, each screen is assigned a screen num‐
ber (beginning at 0) when the X server for that display is started. If the screen
number is not given, screen 0 will be used.
Jaume
$DISPLAY
ist falsch. Es sollte so etwas wie sein:0.0
. Setzen Sie ein$DISPLAY
oder~/.bash_profile
sich~/.profile
selbst?Asmus
-Y
Option anstelle von verwenden-X
? Welches Betriebssystem verwendet Ihr Server? Und: Auf einem Mac ist es völlig normal$DISPLAY
, etwas eingestellt zu haben ./tmp/
Stapelzertrümmerer
Asmus
Stapelzertrümmerer
DISPLAY=:0.0
, und es funktionierte. Ich habe dies zu meinem .bash_profile hinzugefügtAsmus
$DISPLAY
manuell einstellen. Schauen Sie sich an, wasman ssh
über die X11-Weiterleitung gesagt wird:The user should not manually set DISPLAY.
Dies ist ein potenzielles Sicherheitsrisiko!Stapelzertrümmerer
$DISPLAY
im bash_profile nicht funktioniert. Das Symptom ist wie folgt: ssh mit dem Original$DISPLAY=/private/tmp/com.apple.launchd.GuewxwWwKS/org.macosforge.xquartz:0
startet X11, aber es gibt den Fehler und die X11-Weiterleitung funktioniert nicht. Beenden Sie ssh und setzen Sie$DISPLAY
auf zurück:0.0
, versuchen Sie es erneutssh -X
und es funktioniertJaume
The user should not manually set DISPLAY
inman ssh
) erwähnt, gilt für den Computer, mit dem Sie sich verbinden . Der Grund dafür ist, dass die DISPLAY-Variable auf dem Remote-Computer für Sie so eingestellt wird, dass der X11-Verkehr die verschlüsselte Verbindungssh
durchläuft .ssh
Undman ssh
warnt Sie: Verändern Sie es nicht! Aber Sie müssen DISPLAY auf Ihrem Mac einstellen, damit es funktioniert. Fügen Sie diese Zeile zu~/.bash_profile
: hinzuexport DISPLAY=:0.0
, testen Sie sie und melden Sie sich zurück.Stapelzertrümmerer
~/.bash_profile
immer noch der Fehler "Setup fehlgeschlagen" angezeigt. Allerdings, wie ich oben erwähnt habe, ist eine interessante Sache, dass, wenn ich einfachDISPLAY
das Gleiche lasse, dh. behalte es bei/private/tmp/com.apple.launchd.crAjK9o5ak/org.macosforge.xquartz:0
, machessh -X
, beende ssh und führe es dann ausexport DISPLAY=:0.0
oder einfachDISPLAY=:0.0
, X11 funktioniert mit ssh und ich kann GUI-Anwendungen vom Server ausführenJaume
export DISPLAY=:0.0
Zeile hinzugefügt~/.bash_profile
haben, müssen Sie ein neues Terminalfenster öffnen, damit die Änderungen wirksam werden. Alternativ müssen Sie es. ~/.bash_profile
in Ihrer aktuellen Shell ausführen, um es zu beziehen. Hast du das gemacht? Wenn es immer noch nicht funktioniert, können Siealias ssh="DISPLAY=:0.0; ssh"
hinzufügen~/.bashrc
.Stapelzertrümmerer
Jaume
Stapelzertrümmerer
Jaume
Jaume
Jaume
Stapelzertrümmerer