ssh -X Yosemite üzerinde çalışmıyor


16

X11 artık ssh ile kullanılamaz. XQuartz2.7.7'yi yükleyin. Ssh ile X11 ile giriş yapmak uyarılar verir

Uyarı: güvenilmeyen X11 yönlendirme kurulumu başarısız oldu: xauth anahtarı verisi oluşturulmadı Uyarı: xauth verisi yok; X11 iletimi için sahte kimlik doğrulama verilerini kullanma.

Kendi sistemde, echo $DISPLAYverir

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

Ancak, denediğimde xauth generate $DISPLAY . trustedhatayı alıyorum

xauth: (argv): 1: "add" komutunda bozuk görünen ad "/private/tmp/com.apple.launchd.GuewxwWwKS/org.macosforge.xquartz:0"

Bunu nasıl düzeltebileceğine dair bir fikrin var mı?


2
Tarafından döndürülen görünen ad $DISPLAYyanlış. Böyle bir şey olmalı :0.0. Belirlediğiniz Do $DISPLAYiçinde ~/.bash_profileveya ~/.profilekendiniz?
jaume

2
-YBunun yerine seçeneği kullandığınızda bir fark yaratır -Xmı? Sunucunuz hangi işletim sistemini kullanıyor? Ve: $DISPLAYsetinizi bir şeye /tmp/yerleştirmek bir Mac'te normaldir.
Asmus

@jaume Kendi $ DISPLAY değişkenimi ayarlamıyorum. Ancak, elle değiştirmek sorunu çözmüş görünüyor. Hala nasıl olduğundan eminim.
stakSmashr

Bu arada Terminalinizi yeniden başlattınız mı? Bu geçmişte garip çevre değişken sorunları ile bana yardımcı oldu ...
Asmus

@Asmus daha önce Terminal'i yeniden başlattım ve boşuna bilgisayarı defalarca yeniden başlattım. OS X 10.10.2 kullanıyorum. Tüm yaptığım gibi bir şey yapmaktı DISPLAY=:0.0ve işe yaradı. Bunu benim .bash_profile
stakSmashr

Yanıtlar:


20

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:

resim açıklamasını buraya girin

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 " DISPLAYdeğ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 ) DISPLAYdeğişken bir launchdsoket yolunu depolar :

/private/tmp/<socket name>

tanıdık görünen ad yerine:

hostname:displaynumber.screennumber

( hostname:displaynumber.screennumberBu cevabın sonuna biçim hakkında bazı bilgiler ekledim .)

Bu xauth, DISPLAYdeğ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.XXXXyerine /private/tmp/launch-XXXX) ve xauthkı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 ~/.bashrcve ya yeni bir Terminal penceresi veya kaynak onu (başlangıç . ~/.bashrcgeç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:

resim açıklamasını buraya girin


Meraklı, geleneksel olarak, X sunucusunun görünen adı şu şekildedir ( man XUbuntu'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.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.