ssh -X не работает на Yosemite

Больше не может использовать X11 с ssh. Установите XQuartz2.7.7. Вход в систему с X11 через ssh дает предупреждения

  

Предупреждение: ненадежная настройка переадресации X11 не выполнена: данные ключа xauth не сгенерированы   Предупреждение: нет данных xauth; используя фальшивые данные аутентификации для пересылки X11.

В моей собственной системе echo $DISPLAY дает

  

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

Однако, когда я пытаюсь использовать xauth generate $DISPLAY . trusted, я получаю сообщение об ошибке

  

xauth: (argv): 1: плохое отображаемое имя "/private/tmp/com.apple.launchd.GuewxwWwKS/org.macosforge.xquartz:0" в команде "добавить"

Любые идеи в том, как это исправить?

16 голосов | спросил stakSmashr 30 Jam1000000amFri, 30 Jan 2015 04:51:05 +030015 2015, 04:51:05

1 ответ


20

UPDATE

Разработчик Джереми Хаддлстон Секвойя объявил вчера , что эта проблема решается в XQuartz 2.7.8_beta2 :

  

XQuartz 2.7.8_beta2 доступен для загрузки.

     

Вы можете увидеть http://xquartz.macosforge.org/trac/wiki/X112.7.8 для   полный набор изменений, но наиболее примечательными являются:

     

1) xauth теперь правильно разбирает путь сокета Yosemite launchd $ DISPLAY
  2) libGL обновлен до Mesa 10.4.4
  3) Различные эксплойты были зафиксированы на xorg-сервере, freetype и libpng
  4) Исправлена ​​ошибка, предотвращающая автоматическое обновление в некоторых случаях.

Отчет об ошибке закрыт и помечен как фиксированный:

  

введите описание изображения здесь>> </p>
</blockquote>

<p> Если вы не можете (или не хотите) устанавливать бета-версию, вы все равно можете использовать обходное решение, которое я объясняю ниже. </p>

<hr>
<p> <strong> ANSWER </STRONG> </p>

<p> <strong> Анализ </strong> </p>

<p>  (прокрутите вниз для раздела обходной путь)  </p>

<p> Моя первая мысль была «неправильная переменная <code>---- +: = 0 =: + ----</code>». Но это не так. </p>

<p> Как выясняется, на OS X 10.10 Yosemite (и <a href= назад к 10.8 Mountain Lion ) переменная DISPLAY сохраняет DISPLAY:

launchd

вместо знакомого отображаемого имени:

/private/tmp/<socket name>

(Я добавил некоторую информацию о формате hostname:displaynumber.screennumber в конце этого ответа.)

Это означает, что hostname:displaynumber.screennumber должен знать, как справиться с этим особым воплощением xauth, а в Mavericks это произошло, но сокет, используемый в Yosemite, имеет другой путь (точнее: DISPLAY вместо /private/tmp/com.apple.launchd.XXXX) и /private/tmp/launch-XXXX.

Эта ошибка была сообщена команде XQuartz 18 ноября 2014 года (3 месяца назад) ( http : //xquartz.macosforge.org/trac/ticket/2068 ):

  

Программа xauth имеет код как в gethost.c, так и в parsedpy.c для просмотра   для имен $ DISPLAY, начинающихся с «/tmp /launch», и для   локальный сокет. Однако, похоже, местоположение изменилось, $ DISPLAY   теперь начинается с "/private/tmp/com.apple.launchd", поэтому код, который   поиск /tmp /launch не ломает его. (...)

В соответствии с описанием ошибки это должно быть разрешено в 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=f990dd936b5fd1a40290bb88cde517a0ac38f823 ):

xauth

Итак, это только вопрос времени, пока этот патч не попадет в следующий выпуск XQuartz.

Обход

(проверено на OS X 10.10.2 Yosemite.)

Добавить

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

to 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:

введите описание изображения здесь>> </p>

<hr>
<p> Для странного, традиционно, отображаемое имя X-сервера имеет эту форму (от <code>---- +: = 18 =: + ----</code> на Ubuntu):
Отображаемое имя сервера X имеет следующую форму: </p>

<pre><code>---- +: = 19 = + ----</code></pre>

<p>, где: </p>

<pre><code>---- +: = 20 = + ----</code></pre></body></html>

ответил jaume 12 FebruaryEurope/MoscowbThu, 12 Feb 2015 18:57:08 +0300000000pmThu, 12 Feb 2015 18:57:08 +030015 2015, 18:57:08

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132