최신 정보
개발자 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 X
Ubuntu에서). 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.
$DISPLAY
이 잘못되었습니다. 다음과 같아야:0.0
합니다. 당신은 설정 마$DISPLAY
에서~/.bash_profile
나~/.profile
자신?