ssh -X는 요세미티에서 작동하지 않습니다


16

더 이상 ssh와 함께 X11을 사용할 수 없습니다. XQuartz2.7.7이 설치되어 있어야합니다. ssh를 통해 X11로 로그인하면 경고가 표시됩니다

경고 : 신뢰할 수없는 X11 전달 설정에 실패했습니다 : xauth 키 데이터가 생성되지 않음 경고 : xauth 데이터가 없습니다. X11 전달에 가짜 인증 데이터 사용

내 자신의 시스템에서 echo $DISPLAY제공

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

그러나 시도 할 때 xauth generate $DISPLAY . trusted오류가 발생합니다.

xauth : (argv) : 1 : "add"명령의 잘못된 표시 이름 "/private/tmp/com.apple.launchd.GuewxwWwKS/org.macosforge.xquartz:0"

이 문제를 해결하는 방법에 대한 아이디어가 있습니까?


2
에서 표시 한 표시 이름 $DISPLAY이 잘못되었습니다. 다음과 같아야 :0.0합니다. 당신은 설정 마 $DISPLAY에서 ~/.bash_profile~/.profile자신?
jaume

2
-Y대신 옵션 을 사용할 때 차이 가 -X있습니까? 서버에서 어떤 운영 체제를 사용하고 있습니까? 그리고 : Mac $DISPLAY에서 무언가를 설정하는 /tmp/것은 완전히 정상입니다.
Asmus 2019

@jaume 내 $ DISPLAY 변수를 설정하지 않았습니다. 그러나 수동으로 변경하면 문제가 해결 된 것으로 보입니다. 나는 아직도 그것이 그것이 어떻게 된 것인지 확신합니다.
stakSmashr

그동안 터미널을 다시 시작 했습니까? 이것은 과거에 이상한 환경 변수 문제에 도움이되었습니다…
Asmus

@ Asmus 이전에는 터미널을 다시 시작하고 컴퓨터를 여러 번 재부팅하여 아무 소용이 없었습니다. OS X 10.10.2를 사용하고 있습니다. 내가 한 일은 DISPLAY=:0.0~와 같은 일을하는 것이었고 효과가있었습니다. 나는 이것을 내 .bash_profile
stakSmashr에

답변:


20

최신 정보

개발자 Jeremy Huddleston Sequoia 이 문제가 XQuartz 2.7.8_beta2 에서 해결 되었다고 어제 발표했습니다 .

XQuartz 2.7.8_beta2는 다운로드 할 수 있습니다.

전체 변경 사항에 대해서는 http://xquartz.macosforge.org/trac/wiki/X112.7.8 을 볼 수 있지만 대부분의 메모는 다음과 같습니다.

1) xauth가 Yosemite에서 시작한 $ DISPLAY 소켓 경로를 올바르게 구문 분석합니다.
2) libGL이 Mesa 10.4.4로 업데이트되었습니다.
3) xorg-server, freetype 및 libpng에서 다양한 악용이 수정되었습니다.
4) 경우에 따라 자동 업데이트를 방해하는 버그가 있습니다. 고정되었다

버그 보고서 가 닫히고 수정 된 것으로 표시됩니다.

여기에 이미지 설명을 입력하십시오

베타 버전을 설치할 수 없거나 설치하고 싶지 않은 경우 아래에서 설명하는 해결 방법을 계속 사용할 수 있습니다.


대답

분석

(해결 방법 섹션 아래로 스크롤)

나의 첫번째 생각은 " DISPLAY변수가 틀렸다"는 것이었다 . 그러나 그렇지 않습니다.

결과적으로 OS X 10.10 Yosemite (및 10.8 Mountain Lion으로 돌아 가기 )에서 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중단됩니다.

이 버그는 2014 년 11 월 18 일 (3 개월 전) ( http://xquartz.macosforge.org/trac/ticket/2068 ) 에 XQuartz 팀에보고되었습니다 .

xauth 프로그램에는 gethost.c 및 parsedpy.c에 "/ tmp / launch"로 시작하는 $ DISPLAY 이름을 찾고이를 로컬 소켓으로 취급하는 코드가 있습니다. 그러나 위치가 변경된 것 같습니다. $ DISPLAY는 이제 "/private/tmp/com.apple.launchd"로 시작하므로 / tmp / launch를 찾는 코드가이를 찾지 못합니다. (...)

버그 설명에 따르면 XQuartz 2.7.8에서 4 개월 늦게 해결됩니다 ( http://xquartz.macosforge.org/trac/roadmap 의 프로젝트 로드맵 페이지 참조 ).

이 문제를 해결하는 패치는 2014 년 12 월 31 일 freedesktop.org 프로젝트 ( 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;
(...)

따라서 이번 패치가 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.

여기에 이미지 설명을 입력하십시오


궁금한 점은 전통적으로 X 서버의 표시 이름은 다음 형식입니다 ( man XUbuntu에서). 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.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.