Проверьте свой /etc/resolv.conf
и убедитесь, что у вас правильный DNS.
Краткое объяснение происходящего:
Пересылка X через ssh
создает локальный сокет протокола X -на удаленной машине (abc2 ), точно так же, как X-сервер на удаленной машине, а затем пересылает проводной протокол X через ssh -туннель к исходной машине (abc1 ). Локальный сокет определяется как localhost:10.0
.
OTOH, дисплей abc1:0.0
использует старый сетевой протокол X и ожидает, что X-сервер на abc1 будет прослушивать правильные порты. Это отключено по умолчанию в современных системах, потому что это очень небезопасно.
Итак, если ваша ситуация такова, что вы действительно хотите, чтобы приложение, работающее на abc2, использовало X-сервер, работающий на abc1, самый простой способ — запустить X-сервер на abc1 без опции -nolisten
. Для этого вам нужно узнать, как X-сервер запускается (обычно менеджером дисплея, например, xdm/gdm/kdm/lightdm ), и изменить вызов запуска.
Следующее, что вам нужно сделать, это включить управление доступом. В изолированной сети просто используйте xhost +
и разрешите все соединения; в противном случае вы можете использовать xauth
и добавить текущий магический файл cookie MIT. Детали немного зависят от того, как именно настроен X-сервер на ваших машинах.
Если вы входите локально в abc1
, это может быть неважно для вас... но если вы используете переадресацию SSH X11 для подключения со своей рабочей станции к abc1
, вы также можете запустить вложенный X-сервер в abc1
для захвата входящего соединения с abc1:0.0
и передачи его на локальный X-сервер вашей рабочей станции в защищенном туннеле SSH X11.
В RHEL/CentOS 6 для этого необходимы RPM-пакеты xorg-x11-xserver-Xnest
илиxorg-x11-xserver-Xephyr
(более новой реализации, которые могут работать лучше ).
В основном:
abc1
в состоянии по умолчанию, когда он не прослушивает TCP-соединения abc1
Xnest
или Xephyr
в фоновом режиме на abc1
с соответствующими параметрами, чтобы заставить их слушать наabc1:0.0
Ссылаясь на комментарий @roaima к вопросу :, даже со старыми X-приложениями жесткое программирование параметра DISPLAY в приложении всегда было крайне неприятным делом.
Весьма вероятно, что вместо этого переменная DISPLAY установлена в каком-то конфигурируемом месте. Например, это может быть указано в сценарии входа в систему учетной записи пользователя, которая используется для запуска приложения. Но если модификация считается модификацией приложения,тогда вам придется использовать предложенные обходные пути.