GÜNCELLEME
Geliştirici Jeremy Huddleston Sequoia dün bu sorunun XQuartz 2.7.8_beta2'de çözüldüğünü açıkladı :
XQuartz 2.7.8_beta2 indirilebilir.
Tam bir değişiklik kümesi için http://xquartz.macosforge.org/trac/wiki/X112.7.8 adresini görebilirsiniz , ancak en dikkat çekici olanları şunlardır:
1) xauth şimdi doğru Yosemite $ EKRAN soket yolunu launchd ayrıştırır
2) libGL Mesa 10.4.4 için güncellendi
Çeşitli patlatır xorg-server, freetype ve libpng'yi düzeltilmiştir 3)
Bir hata bazı durumlarda otomatik güncellemeler önlenmesi) 4'tür düzeltildi
Hata raporu kapatıldı ve düzeltildi olarak işaretlendi:
Beta sürümünü yükleyemiyorsanız (veya yüklemek istemiyorsanız), yine de aşağıda açıkladığım geçici çözümü kullanabilirsiniz.
CEVAP
analiz
(geçici çözüm bölümü için aşağı kaydırın)
İlk düşüncem " DISPLAY
değişken yanlış" idi. Ama değil.
Anlaşıldığı gibi, OS X 10.10 Yosemite'de (ve 10.8 Mountain Lion'a geri döndüğünde ) DISPLAY
değişken bir launchd
soket yolunu depolar :
/private/tmp/<socket name>
tanıdık görünen ad yerine:
hostname:displaynumber.screennumber
( hostname:displaynumber.screennumber
Bu cevabın sonuna biçim hakkında bazı bilgiler ekledim .)
Bu xauth
, DISPLAY
değişkenin bu özel enkarnasyonu ile nasıl başa çıkılacağını bilmek zorunda olduğu anlamına gelir ve Mavericks'ten itibaren öyle oldu, ancak Yosemite'de kullanılan soketin farklı bir yolu var (daha doğrusu: /private/tmp/com.apple.launchd.XXXX
yerine /private/tmp/launch-XXXX
) ve xauth
kırılıyor.
Bu hata 18 Kasım 2014'te (3 ay önce) XQuartz ekibine bildirildi ( http://xquartz.macosforge.org/trac/ticket/2068 ):
Xauth programında gethost.c ve parsedpy.c dosyalarında "/ tmp / launch" ile başlayan $ DISPLAY adlarını aramak ve bunu yerel bir soket gibi ele almak için kod bulunur. Ancak, konum değişmiş gibi görünüyor, $ DISPLAY şimdi "/private/tmp/com.apple.launchd" ile başlıyor, bu nedenle / tmp / launch araması yapan kod onu yakalamıyor. (...)
Hata açıklamasına göre, 4 ay geciken XQuartz 2.7.8'de çözülecektir ( http://xquartz.macosforge.org/trac/roadmap adresindeki proje yol haritası sayfasına bakın ).
Sorunu çözen yama 31 Aralık 2014 tarihinde freedesktop.org projesine ( 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;
(...)
Yani bu yama XQuartz'ın bir sonraki sürümüne geçene kadar sadece bir zaman meselesi.
Geçici çözüm
(OS X 10.10.2 Yosemite üzerinde test edilmiştir.)
Ekle:
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"
için ~/.bashrc
ve ya yeni bir Terminal penceresi veya kaynak onu (başlangıç . ~/.bashrc
geçerli Terminal oturumda).
Bu takma ad önce soket yolunu /private/tmp/launch-XXX
(örneğin ln -fs /private/tmp/com.apple.launchd.GuewxwWwKS /private/tmp/launch-GuewxwWwKS
) işaretler ve sonra başlar ssh
:
Meraklı, geleneksel olarak, X sunucusunun görünen adı şu şekildedir ( man X
Ubuntu'dan): X sunucusunun görünen adı şu forma sahiptir:
hostname:displaynumber.screennumber
nerede:
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
yanlış. Böyle bir şey olmalı:0.0
. Belirlediğiniz Do$DISPLAY
içinde~/.bash_profile
veya~/.profile
kendiniz?