ssh -X Yosemite पर काम नहीं करता है


16

अब ssh के साथ X11 का उपयोग नहीं कर सकते। XQuartz2.7.7 स्थापित किया है। S11 के माध्यम से X11 के साथ लॉग इन करना चेतावनी देता है

चेतावनी: अविश्वसनीय X11 अग्रेषण सेटअप विफल: xauth कुंजी डेटा उत्पन्न नहीं हुआ चेतावनी: कोई xauth डेटा नहीं; X11 अग्रेषण के लिए नकली प्रमाणीकरण डेटा का उपयोग करना।

मेरे अपने सिस्टम में, echo $DISPLAYदेता है

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

हालांकि, जब मैं कोशिश करता xauth generate $DISPLAY . trustedहूं, मुझे त्रुटि मिलती है

xauth: (argv): 1: खराब प्रदर्शन नाम "/ pStreet/tmp/com.apple.launchd.GuewxwWwKS/org.macosforge.xquartz" में "कमांड जोड़ें"

इसे ठीक करने के बारे में कोई विचार?


2
द्वारा प्रदर्शित नाम $DISPLAYगलत है। यह कुछ ऐसा होना चाहिए :0.0। क्या आप $DISPLAYमें ~/.bash_profileया ~/.profileअपने आप में सेट ?
jaume

2
जब आप -Yइसके बजाय विकल्प का उपयोग करते हैं तो क्या इससे कोई फर्क पड़ता है -X? आपका सर्वर किस ऑपरेटिंग सिस्टम का उपयोग कर रहा है? और: किसी $DISPLAYचीज़ में आपका सेट होना /tmp/मैक पर पूरी तरह से सामान्य है।
Asmus

@jaume मैं अपना $ DISPLAY वैरिएबल सेट नहीं करता। हालाँकि, मैन्युअल रूप से इसे बदलने से यह निश्चित हो गया है। मुझे अब भी यकीन है कि यह किस तरह खत्म हो रहा था।
stakSmashr

क्या आपने इस बीच अपने टर्मिनल को फिर से शुरू किया? इसने मुझे अतीत में अजीब पर्यावरण चर समस्याओं के साथ मदद की ...
अस्मस

@Asmus मैंने पहले भी टर्मिनल को पुनः आरंभ किया था और साथ ही साथ कंप्यूटर को बिना किसी लाभ के कई बार रिबूट किया था। मैं OS X 10.10.2 का उपयोग कर रहा हूं। मैंने जो कुछ किया वह सब कुछ पसंद आया DISPLAY=:0.0और यह काम कर गया। मैंने इसे अपने
.bash_profile

जवाबों:


20

अपडेट करें

डेवलपर जेरेमी हडलस्टोन सेकोइया ने कल घोषणा की कि इस समस्या को XQuartz 2.7.8_beta2 में हल किया गया है :

XQuartz 2.7.8_beta2 डाउनलोड के लिए उपलब्ध है।

आप परिवर्तनों के एक पूरे सेट के लिए http://xquartz.macosforge.org/trac/wiki/X112.7.8 देख सकते हैं , लेकिन अधिकांश उल्लेखनीय हैं:

1) xauth अब सही ढंग से योसेमाइट लॉन्च किए गए $
डिसप्ले सॉकेट पाथ को 2 देता है) libGL को Mesa 10.4.4
3 में अपडेट किया गया है। विभिन्न कारनामों को xorg-server, freetype, और libbng
4 में ठीक किया गया था) कुछ मामलों में स्वत: अपडेट को रोकने वाला बग तय हो गया है

बग रिपोर्ट बंद है और तय के रूप में चिह्नित है:

यहाँ छवि विवरण दर्ज करें

यदि आप बीटा को स्थापित नहीं कर सकते हैं (या नहीं करना चाहते हैं), तो आप अभी भी नीचे बताए गए वर्कअराउंड का उपयोग कर सकते हैं।


उत्तर

विश्लेषण

(वर्कअराउंड सेक्शन के लिए नीचे स्क्रॉल करें)

मेरा पहला विचार था " DISPLAYचर गलत है"। लेकिन ऐसा नहीं है।

जैसा कि यह पता चला है, ओएस एक्स 10.10 योसेमाइट (और 10.8 माउंटेन शेर पर ) DISPLAYचर स्टोर launchdसॉकेट पथ:

/private/tmp/<socket name>

परिचित प्रदर्शन नाम के बजाय:

hostname:displaynumber.screennumber

(मैंने hostname:displaynumber.screennumberइस उत्तर के अंत में प्रारूप के बारे में कुछ जानकारी जोड़ी है ।)

इसका मतलब है कि यह xauthजानना है कि DISPLAYचर के इस विशेष अवतार से कैसे निपटना है , और मावेरिक्स के रूप में, यह किया, लेकिन योसेमाइट में इस्तेमाल किए गए सॉकेट का एक अलग रास्ता है (अधिक सटीक: /private/tmp/com.apple.launchd.XXXXइसके बजाय /private/tmp/launch-XXXX), और xauthटूट जाता है।

इस बग को XQuartz टीम को 18 नवंबर 2014 (3 महीने पहले) ( http://xquartz.macosforge.org/trac/ticket/2068 ) पर सूचित किया गया था :

Xauth प्रोग्राम के पास $ DISPLAY नामों को देखने के लिए gethost.c और parsedpy.c दोनों में कोड है जो "/ tmp / लॉन्च" से शुरू होता है, और एक स्थानीय सॉकेट के रूप में व्यवहार करने के लिए। हालाँकि, स्थान बदल गया लगता है, $ DISPLAY अब "/pStreet/tmp/com.apple.launchd" से शुरू होता है, इसलिए जो कोड / tmp / लॉन्च की तलाश कर रहा है वह इसे पकड़ नहीं पाता है। (...)

बग विवरण के अनुसार इसे XQuartz 2.7.8 में हल किया जाना है, जो 4 महीने देर से है (देखें प्रोजेक्ट रोडमैप पेज http://xquartz.macosforge.org/trac/roadmap पर )।

समस्या को ठीक करने वाला पैच 31 दिसंबर 2014 को freedesktop.org प्रोजेक्ट ( http://cgit.freedesktop.org/xorg/app/xauth/commit/parsedpy.c?id=f990dd9bb5fd1a40290bb88cde517a0ac38f823 ) पर तैयार किया गया था:

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;
(...)

इसलिए यह केवल समय का सवाल है जब तक कि यह पैच XQuartz की अगली रिलीज में अपना रास्ता नहीं ढूंढ लेता।

वैकल्पिक हल

(OS X 10.10.2 Yosemite पर परीक्षण किया गया।)

जोड़ें:

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"

करने के लिए ~/.bashrcऔर या तो एक नया टर्मिनल विंडो या यह स्रोत (शुरू . ~/.bashrcअपने वर्तमान टर्मिनल सत्र में)।

यह उपनाम पहले सॉकेट पथ /private/tmp/launch-XXX(उदाहरण के लिए ln -fs /private/tmp/com.apple.launchd.GuewxwWwKS /private/tmp/launch-GuewxwWwKS) को सहलाता है और फिर शुरू होता है ssh:

यहाँ छवि विवरण दर्ज करें


जिज्ञासु के लिए, पारंपरिक रूप से, एक्स सर्वर के प्रदर्शन नाम का यह रूप ( man Xउबंटू से) पड़ा है : एक्स सर्वर के प्रदर्शन नाम का यह रूप है:

hostname:displaynumber.screennumber

कहाँ पे:

   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.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.