16 votos

ssh -X no funciona en Yosemite

No puedes usar X11 con ssh. Han XQuartz2.7.7 instalado. Se inicia la sesión con X11 a través de ssh da las advertencias

Advertencia: no son de confianza reenvío por X11 error de instalación: xauth datos de la clave no se genera Advertencia: No xauth de datos; el uso de falsa autenticación de datos para el reenvío por X11.

En mi propio sistema, echo $DISPLAY da

/privado/tmp/com.apple.launchd.GuewxwWwKS/org.macosforge.xquartz:0

Sin embargo, cuando trato xauth generate $DISPLAY . trusted, me sale el error

xauth: (argv):1: mal nombre para mostrar "/private/tmp/com.apple.launchd.GuewxwWwKS/org.macosforge.xquartz:0" en el comando "agregar"

Alguna idea de cómo solucionar este problema?

20voto

Phill Puntos 126

Actualización

Desarrollador Jeremy Huddleston Sequoia anunció ayer que este problema está resuelto en XQuartz 2.7.8_beta2:

XQuartz 2.7.8_beta2 está disponible para su descarga.

Usted puede ver http://xquartz.macosforge.org/trac/wiki/X112.7.8 para un conjunto completo de cambios, pero la mayoría de los noteworth son:

1) xauth ahora analiza correctamente el Yosemite launchd $DISPLAY zócalo de la ruta
2) libGL ha sido actualizado a la Mesa 10.4.4
3) Diversas hazañas fueron fijadas en xorg-server, freetype, y libpng
4) Un error que impedía que las actualizaciones automáticas en algunos casos se ha solucionado

El informe de error es cerrado y marcado como solucionado:

enter image description here

Si usted no puede (o no quiere) instalar la beta, usted todavía puede utilizar la solución explico a continuación.


Análisis

(desplácese hacia abajo para la sección de solución)

Mi primer pensamiento fue: "la DISPLAY variable está mal".

Pero no lo es. Como resulta que, en OS X 10.10 Yosemite (y de vuelta a 10.8 Mountain Lion) DISPLAY variable almacena un launchd zócalo de la ruta de acceso en lugar de la conocida pantalla de nombre de:

hostname:displaynumber.screennumber

(He añadido algo de información acerca de la hostname:displaynumber.screennumber formato al final de esta respuesta.)

Esto requiere que xauth sabe cómo lidiar con un enchufe de valor de la ruta, y como de Mavericks, lo hizo. Por desgracia, el socket utilizado en Yosemite tiene una ruta de acceso diferente (más precisamente: /private/tmp/com.apple.launchd.XXXX en lugar de /private/tmp/launch-XXXX), y xauth rompe.

Este bug fue reportado a la XQuartz equipo el 18 de Noviembre de 2014 (hace 3 meses) (http://xquartz.macosforge.org/trac/ticket/2068):

El programa xauth tiene el código en ambos gethost.c y parsedpy.c a mirar por $VISUALIZACIÓN de nombres que comienzan con "/tmp/iniciar", y para tratar de que como un socket local. Sin embargo, el lugar parece haber cambiado, $DISPLAY ahora comienza con "/private/tmp/com.apple.launchd", por lo que el código que se buscando /tmp/lanzamiento no cogerlo. (...)

De acuerdo a la descripción del problema para ser resuelto en XQuartz 2.7.8, que es de 4 meses de retraso (véase el proyecto de hoja de ruta de la página en http://xquartz.macosforge.org/trac/roadmap).

El parche que corrige el problema que se cometió el 31 Dic 2014 a las freedesktop.org proyecto (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;
(...)

Así que es sólo cuestión de tiempo que este parche encuentra su camino en XQuartz la próxima versión.

Solución

(probado en OS X 10.10.2 Yosemite.)

Agregar:

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"

a ~/.bashrc e iniciar una nueva ventana de Terminal o de la fuente (. ~/.bashrc) en la actual sesión de Terminal.

Esta solución enlaces simbólicos en el zócalo de la ruta a /tmp/launch-XXX (por ejemplo ln -fs /private/tmp/com.apple.launchd.GuewxwWwKS /private/tmp/launch-GuewxwWwKS) y comienza ssh:

enter image description here


De man X en Ubuntu: El servidor X de la pantalla de nombre tiene esta forma:

hostname:displaynumber.screennumber

donde:

   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.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X