«Нет переменной X11 DISPLAY» - что это значит?


103

Я пытаюсь установить Java-приложение на свой Linux-компьютер (Slackware).

Я получил следующую ошибку и не понимаю ее.

Не могли бы вы посоветовать мне, как подойти к проблеме? Спасибо.

Вот что я получаю: (Я вижу, что необходимо установить некоторую переменную X11 DISPLAY , но какое значение ей следует присвоить и как?)

~$ java -jar gate-5.0-beta1-build3048-installer.jar
- ERROR -

java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
at java.awt.GraphicsEnvironment.checkHeadless(Graphic sEnvironment.java:159)
at java.awt.Window.<init>(Window.java:407)
at java.awt.Frame.<init>(Frame.java:402)
at net.sourceforge.mlf.metouia.borders.MetouiaDotsBuf fer.<init>(MetouiaDotsBuffer.java:105)
at net.sourceforge.mlf.metouia.borders.MetouiaDots.<i nit>(MetouiaDots.java:66)
at net.sourceforge.mlf.metouia.borders.MetouiaToolBar Border.<init>(MetouiaToolBarBorder.java:49)
at net.sourceforge.mlf.metouia.MetouiaLookAndFeel.ini tComponentDefaults(MetouiaLookAndFeel.java:241)
at javax.swing.plaf.basic.BasicLookAndFeel.getDefault s(BasicLookAndFeel.java:130)
at javax.swing.plaf.metal.MetalLookAndFeel.getDefault s(MetalLookAndFeel.java:1591)
at javax.swing.UIManager.setLookAndFeel(UIManager.jav a:537)
at javax.swing.UIManager.setLookAndFeel(UIManager.jav a:581)
at com.izforge.izpack.installer.GUIInstaller.loadLook AndFeel(GUIInstaller.java:373)
at com.izforge.izpack.installer.GUIInstaller.<init>(G UIInstaller.java:116)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newI nstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Construc tor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:30
at com.izforge.izpack.installer.Installer.main(Instal ler.java:62)

У меня та же проблема, он отлично работает на консоли, но когда я использую eclipse, он выдает такое же исключение, я даже помещаю эти строки кода: Process proc_exporting = Runtime.getRuntime (). exec ("sudo export DISPLAY =: 0.0") ; все еще не работает
hb.Sara

3
Ни один из ответов не дает информации, необходимой для решения этой проблемы при удаленном подключении к консоли через puTTY. Любой ответ, касающийся SSH, на самом деле не объясняет, как заставить его работать. Кто-нибудь знает вопрос, касающийся этого?

Ответы:


122

Если вы находитесь на основном дисплее, то

export DISPLAY=:0.0

или если вы используете csh или tcsh

setenv DISPLAY :0.0

перед запуском вашего приложения.

На самом деле, я удивлен, что он не устанавливается автоматически. Вы пытаетесь запустить это приложение с неграфического терминала? Если нет, изменили ли вы стандартные .profile, .login, .bashrc или .cshrc?

Обратите внимание, что установка DISPLAY на: 0.0 предполагает, что вы сидите за главным дисплеем, как я уже сказал, или, по крайней мере, что основной дисплей вошел в систему с вашим идентификатором пользователя. Если он не вошел в систему или это другой идентификатор пользователя, это не удастся.

Если вы входите с другой машины, и вы находитесь на главном дисплее этой машины и на ней работает X, то вы можете использовать «ssh -X hostname» для подключения к этому хосту, и ssh перенаправит отображение X назад . ssh также обеспечит правильность установки переменной среды DISPLAY (при условии, что она не испорчена в различных точечных файлах, о которых я упоминал выше). В сеансе «ssh -X» переменная среды DISPLAY будет иметь значение типа «localhost: 11.0», которое будет указывать на сокет, который ssh ​​туннелирует в ваш локальный ящик.


Привет, большое спасибо, первый у меня сработал. Да, запускаю с неграфического терминала.
user42155

Похоже, он хочет получить доступ к графическому дисплею. Будьте осторожны, не запускайте его, когда графический дисплей недоступен или принадлежит другому идентификатору пользователя.
Пол Томблин,

3
обратите внимание, что это сработало, потому что вы находитесь / были на консоли. если бы вы были на другом терминале, вам нужно было бы запустить X-сервер на терминале, а затем установить среду, указывающую на ваш компьютер (например, export DISPLAY = 'hostname of pauls terminal': 0.0)
KevinDTimm

@kevindtimm, хороший момент - я собираюсь включить информацию @Mikeage о ssh -X в свой ответ.
Пол Томблин

1
Если вам нужно запустить автоматизированную задачу, которая требует подключения к X-серверу, вы можете посмотреть xvfb, который создает виртуальный X-сервер. Это очень полезно для некоторых тестов партии или запуска тестов.
Wichert Akkerman

10

Вы запускаете это из среды X11? Вы можете использовать окно терминала, но оно должно быть внутри X (либо после графического входа в систему, либо после запуска startx).

Если вы уже находитесь в графической среде, попробуйте export DISPLAY =: 0 для bash-подобных оболочек (bash, sh и т. Д.) Или setenv DISPLAY: 0 для оболочек на основе C (csh, tcsh и т. Д.)

Если вы подключились с другой машины через SSH, вы используете опцию -X для отображения графического интерфейса на машине, на которой вы сидите (при условии, что там работает X-сервер (например, xming для Windows, и ваш стандартный Linux X сервер).


Привет, я использую startx.
user42155

Ах да, Slackware. Он все еще такой же barebone-комплект, каким был, когда я последний раз пользовался им 10 лет назад?
Пол Томблин

Он по-прежнему запускается по умолчанию на уровне выполнения 3. Конечно, если вы укажете ему запускаться на уровне выполнения 5, вы получите красивое меню входа в KDM, если вы установили KDE.
Adam Jaskiewicz

Спасибо! на CentOS и SSH (шпатлевка) используется: export DISPLAY=:0
jacktrades

8

вы должны включить перенаправление X11 в вашем PuTTy

для этого откройте PuTTy, перейдите в Connection => SSH => Tunnels и установите флажок Enable X11 forwarding.

Также sudo на сервер и экспортируйте указанную ниже переменную, здесь IP - это IP вашего локального компьютера.

export DISPLAY=10.75.75.75:0.0

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


4

Еще одна проблема, которая может быть проблемой в случае, аналогичном описанному, - X не пересылается и $ DISPLAY не устанавливается, если программа xauth не установлена ​​на удаленной стороне. Вы можете увидеть, что он ищет его, когда вы запускаете "ssh -Xv ip_address", и, если он не найден, не работает, чего не будет, если вы не включите подробный режим (ошибка IMO). Обычно вы можете найти xauth в пакете с тем же именем.


3

Очень просто, была такая же проблема, тогда я загрузил и установил приложение, которое помогло бы отображать, а затем исправил ошибку.

Загрузите это приложение xming:

http://sourceforge.net/project/downloading.php ?

Установите, затем используйте настройки по этой ссылке:

http://www.geo.mtu.edu/geoschem/docs/putty_install.html или выполните следующие действия:

Установка / настройка PuTTy и Xming

После того, как PuTTy и Xming будут загружены на компьютер, установите их согласно соответствующим инструкциям.

Настройка Xming

После установки Xming запустите приложение под названием XLaunch и убедитесь, что настройки такие, как показано:

  • выберите Записи по умолчанию в окнах Параметры отображения, нажмите Далее
  • нажмите "Далее" в окне "Тип сеанса".
  • нажмите «Далее» в окне «Дополнительные параметры» (флажок «Обратите внимание на буфер обмена» установлен)
  • сохраните конфигурацию и нажмите, чтобы закончить.

Настройка PuTTy

После установки PuTTy дважды щелкните значок PuTTy на рабочем столе и настройте, как показано:

Это показывает создание профиля входа и его сохранение.

  • В ssh -> X11 установите флажок, чтобы включить пересылку X11.
  • в текстовом поле местоположения отображения X введите localhost: 0.0

сохраните профиль, затем подключитесь удаленно к серверу для тестирования.

Ура !!!


Пожалуйста, включите важную информацию из ссылок в самом ответе, потому что со временем они могут исчезнуть, что сделает ответ бесполезным.
plamut

2

Есть много способов сделать это. Сделал что-то ниже удобное для меня и всегда нормально работает.

  1. На удаленном сервере обязательно установите xorg-x11-xauth, xorg-x11-font-utils, xorg-x11-fonts.
  2. Запустите сервер Xming на локальном рабочем столе
  3. В putty, перед ssh на сервер, включите пересылку X11 и установите местоположение отображения на localhost: 0.0
  4. На сервере создается файл .Xauthority, и обратите внимание, что переменная DISPLAY уже установлена.

    список $ xauth

    $ xauth добавить

Чтобы проверить это, введите xclock или xeyes

Примечание . Чтобы сменить пользователя, скопируйте файл .Xauthority в домашний каталог соответствующего пользователя, а также экспортируйте переменную DISPLAY от этого пользователя.


0

У меня была такая же проблема в Ubuntu 14.04.01, когда я пытался установить JDK 8 и Netbeans, если я запускаю скрипт внутри терминала Byobu (возможно, с экранами происходит то же самое).

Просто выйдите из Byobu и (в графическом терминале) запустите сценарий.


0

Первоначальная проверка.

1) Когда вы экспортируете ДИСПЛЕЙ на другой компьютер, убедитесь, что вы ввели команду xhost +на этом компьютере. Эта команда позволяет другой машине экспортировать свой ДИСПЛЕЙ на этой машине. Могут быть ограничения безопасности, просто знайте об этом. Надо проверять ssh -X MachineIPне потребуется xhost +?

2) Иногда JCONSOLEне отображается весь процесс, так как этот процесс JVM может работать с другим пользователем, а вы экспортируете ДИСПЛЕЙ с другим пользователем. так что лучше следоватьCD_DIR>sudo ./jconsole

3) В БЫЛО (ВЕБСФЕРА); jconsole не сможет подключить свой процесс Java-сервера, на этот раз просто перейдите по ссылке, а затем попробуйте подключить ее. Это сработало для меня. Возможно, эта страница инициализирует некоторые переменные, чтобы позволить jconsole подключаться к этому серверу.

Консоль WAS> Серверы приложений> server1> Определение процесса> Виртуальная машина Java


Я столкнулся с той же проблемой с машиной AIX (где доступен только интерфейс командной строки, нет интерфейса DISPLAY). Я решил, установив

Клиент NX для Windows

Шаг 1: Через эту машину Windows я подключился к ящику unix, где доступна консоль GUI.
Шаг 2: SSH в систему AIX из этого окна UNIX.
Шаг 3: установите DISPLAY как «export DISPLAY = UNIXMACHINE: NXClientPORTConnectedMentionedOnTitle»
Шаг 4: Теперь, если мы запустим какие-либо программы, требующие DISPLAY; он будет запущен на этом компьютере UNIX.

VNC

Если вы установили VNC в UNIX-бокс, где доступен дисплей; тогда Windows и NX Client не требуются. Шаг 1: Используйте VNC для подключения к Unix-серверу, где доступна консоль GUI.
Шаг 2: SSH в систему AIX из этого окна UNIX.
Шаг 3: установите DISPLAY как «export DISPLAY = UNIXMACHINE: VNCPORT»
Шаг 4: Теперь, если мы запустим какие-либо программы, требующие DISPLAY; он будет запущен на этом компьютере UNIX.

ELSE

Шаг 1: подключитесь по SSH к системе AIX из этого окна UNIX.
Шаг 2: установите DISPLAY как «export DISPLAY = UNIXMACHINE: VNCPORT»
Шаг 3: Теперь, если мы запустим какие-либо программы, требующие DISPLAY; он будет запущен на этом компьютере UNIX.


0

Для тех, кто пытается заставить приложение X Window работать из Windows из Linux:

Что сработало для меня, так это настроить сервер xming на моем компьютере с Windows, установить параметр пересылки X11 в замазке, когда я подключаюсь к хосту linux, и вставил свой IP-адрес Windows с портом отображения, а затем переменную отображения с моим IP-адресом Windows: 0.0

Не забудьте добавить IP-адрес хостов linux в файл X0.hosts, чтобы сервер xming принимал трафик с этого хоста. Мне потребовалось время, чтобы понять это.


-3

Не забудьте выполнить «host +» на своем «домашнем» устройстве отображения, и когда вы отправляете ssh на машину, вы выполняете «ssh -x hostname»


14
Я настоятельно рекомендую не использовать "xhost +", поскольку он эффективно отключает всю безопасность на вашем X-сервере. ssh достаточно умен, чтобы использовать xauth для автоматической настройки аутентификации X11, поэтому нет необходимости использовать xhost.
Wichert Akkerman

Это должен быть комментарий, а не сообщение. То, что вы не можете комментировать, не означает, что вы должны делать плохой пост.
Elliot A.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.