Запуск приложений с графическим интерфейсом (DISPLAY) на терминале ноутбука jupyter - Linux

Мы запускаем ноутбук jupyter на сервере Ubuntu и используем терминальную функцию jupyter. Это хорошо для запуска CLI, но когда нам нужно запустить приложение на основе графического интерфейса (например, xclock), появляется сообщение Can't Open Display.

Если мы запустим ту же команду GUI, взяв сеанс pytty с Windows jumpserver и установив переменную DISPLAY, то она будет работать нормально (т.е. приложение с графическим интерфейсом отображается правильно)

(base) sandeep:/data$ xclock
Error: Can't open display:

В идеале он должен работать, если мы установим правильную переменную среды DISPLAY. Однако, какое должно быть правильное значение DISPLAY в случае терминала для ноутбуков jupyter, кто-нибудь может предложить, пожалуйста.


person Sandeep Bhutani    schedule 08.05.2019    source источник


Ответы (1)


Сценарий: на локальном компьютере вы хотите открыть записную книжку Juniper, работающую на удаленном компьютере, и управлять ею. Мы сделаем это, открыв туннель SSH. Этот туннель будет перенаправлять порт, используемый удаленно запущенным экземпляром Jupyter, на порт на локальном компьютере, где к нему можно будет получить доступ в браузере, как к локально запущенному экземпляру Jupyter.

На удаленном компьютере запустите сервер записных книжек Jupyter:

remote_user@remote_host$ Jupyter notebook --no-browser --port=8889

Обычно Jupyter открывает браузер для отображения доступных записных книжек, но нам это не нужно, поэтому мы используем параметр --no-browser. Мы также меняем порт на 8889 только для того, чтобы показать, как это делается.

На локальном компьютере запустите туннель SSH:

local_user@local_host$ ssh -N -f -L localhost:8888:localhost:8889 remote_user@remote_host

Первая опция -N сообщает SSH, что никакие удаленные команды не будут выполняться, и полезна для переадресации портов. Вторая опция -f приводит к тому, что SSH переходит в фоновый режим, поэтому локальный терминал, поддерживающий туннель, остается пригодным для использования. Последняя опция -L перечисляет конфигурацию переадресации портов (удаленный порт 8889 на локальный порт 8888).

Теперь откройте браузер на локальном компьютере и введите в адресной строке

localhost:8888

который отображает ваш удаленно запущенный сервер ноутбуков Jupyter.

Чтобы закрыть SSH-туннель на локальном компьютере, найдите процесс и вручную завершите его:

local_user@local_host$ ps aux | grep localhost:8889
local_user 18418  0.0  0.0  41488   684 ?        Ss   17:27   0:00 ssh -N -f -L localhost:8888:localhost:8889 remote_user@remote_host
local_user 18424  0.0  0.0  11572   932 pts/6    S+   17:27   0:00 grep localhost:8889
local_user@local_host$ kill -15 18418

В качестве альтернативы вы можете запустить туннель без опции -f. После этого процесс останется на переднем плане и может быть остановлен с помощью ctrl-c.

На удаленном компьютере завершите работу сервера Jupyter с помощью ctrl-c ctrl-c.

person Alfredo Cedeno    schedule 22.05.2019