Невозможно открыть дисплей - ошибка

Я нашел проблему. Что-то было не так с графикой.

Я отключил драйвер NVIDIA «nouveau», выполнив эту инструкцию GRUB2
. И хотя я действительно видел странную пустую строку и красную точку при запуске, тогда это продолжалось в графической среде! :)
Тогда я мог бы установить последние версии драйверов NVIDIA, используя
https://wiki.debian.org/NvidiaGraphicsDrivers#Debian_8_.22Jessie.22

1
18.09.2018, 03:43
1 ответ

Предположим, что у вас два хоста:

  • hostA имеет дисплей, который вы хотите использовать
  • hostB имеет приложение, которое вы хотите запустить

Во-первых, вы регистрируетесь на хосте А и запускаете на нем xhost +hostB, чтобы разрешить хосту Б доступ к дисплею хоста А. Затем вы входите в hostB, запускаете на нем DISPLAY=hostA:0 ; export DISPLAYи запускаете свое приложение.

Также обратите внимание, :это старые -полностью незашифрованные соединения X11, которые обычно отключены по умолчанию в современных дистрибутивах Linux. Если вы хотите использовать эти команды, вам, возможно, придется сначала что-то сделать на hostA, чтобы настроить его сервер X11 для прослушивания входящих соединений по протоколу TCP, а не только через локальные сокеты UNIX.

(Долгое время это делалось путем добавления параметра -nolisten TCPв командную строку X-сервера, и вам нужно было удалить этот параметр, чтобы использовать незашифрованные соединения X11. Современные серверы Xorg X могут изменить смысл этих параметров :, вам может потребоваться добавить явный параметр -listen TCP, чтобы включить не -локальные незашифрованные соединения X11.)

В системе Linux/Unix DISPLAY=:0.0относится к дисплею X11, доступному через сокет UNIX /tmp/.X11-unix/X0, поэтому это первый (и обычно единственный )локальный сервер X11. В системе Windows такого механизма нет.

Механизм сокетов UNIX используется только тогда, когда он доступен в локальной системной архитектуре и часть имени хоста переменной DISPLAY представляет собой пустую строку. Если указано имя хоста, даже если оно «localhost», используется TCP-соединение.

Если используется TCP-соединение, DISPLAY=hostname:X.Yотносится к серверу X11, прослушивающему hostnameчерез TCP-порт (X+6000 ).

При запуске сервера X11 на базе Windows --, возможно, коммерческого, например Reflection X, бесплатного, например VcXsrv или классического Xming ,по умолчанию он начнет прослушивать TCP-порт 6000, как только он будет запущен. Современные версии могут по умолчанию прослушивать localhostтолько в целях безопасности; классическая альтернатива прослушивает все IP-адреса, которые есть в системе.

Современный безопасный способ использования X11 — это пересылка X11 на основе SSH -. Когда вы запускаете клиент SSH с включенной переадресацией X11, он подключается к локальному серверу X11 на узле клиента SSH, используя любой доступный механизм. Он передаст это соединение любому хосту, к которому вы подключаетесь, используя безопасный подканал в соединении SSH.

Затем демон sshdна удаленном узле начнет прослушивание свободного TCP-порта (, обычно в диапазоне 6010+ ), устанавливает DISPLAY=localhost:X.0(, где X = выбранный номер порта -6000 ), а также взаимодействует с клиентом SSH для автоматической настройки файлов cookie xauthдля вас, если этого требует сервер X11 на стороне клиента SSH.

Что касается сервера X11 на клиентском хосте, входящий трафик X11 исходит от локального клиентского процесса SSH, поэтому команда xhostобычно не требуется на клиентском хосте SSH.

В результате:вам не нужно ни устанавливать DISPLAYвручную, ни вообще использовать команду xhost. Просто убедитесь, что ваш локальный сервер X11 работает, включите переадресацию X11 в вашем SSH-клиенте, подключитесь к удаленному хосту с помощью SSH и запустите любую программу с графическим интерфейсом X11. Окна этой программы просто появятся на вашем локальном дисплее. Это просто работает.

Это может стать откровением для тех, кто привык к классическому стилю настройки соединений X11.

Более 15 лет назад я показал это сварливому старому администратору базы данных, которому иногда приходилось идти в серверную, чтобы установить Oracle, поскольку брандмауэры не разрешали классические незашифрованные -соединения X11.

Он обнял меня.

4
27.01.2020, 23:18

Теги

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