Java Не удается подключиться к серверу окон X11, используя localhost:10.0 в качестве значения переменной DISPLAY.

У меня есть скрипт с использованием Java для подключения к отображению X11 в порту 10.0 на локальном хосте

но я всегда получаю эту ошибку

java.lang.InternalError: Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.
    at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
    at sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.java:62)
    at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:178)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:142)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:186)
    at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:82)
    at sun.awt.X11.XToolkit.<clinit>(XToolkit.java:112)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:186)
    at java.awt.Toolkit$2.run(Toolkit.java:849)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:841)
    at ij.io.Opener.openJpegOrGif(Opener.java:367)
    at ij.io.Opener.openImage(Opener.java:220)
    at ij.io.Opener.openImage(Opener.java:249)
    at ij.io.Opener.open(Opener.java:116)
    at ij.IJ.open(IJ.java:1112)
    at ij.macro.Functions.open(Functions.java:2006)
    at ij.macro.Functions.doFunction(Functions.java:129)
    at ij.macro.Interpreter.doStatement(Interpreter.java:205)
    at ij.macro.Interpreter.doBlock(Interpreter.java:515)
    at ij.macro.Interpreter.runUserFunction(Interpreter.java:278)
    at ij.macro.Interpreter.getFactor(Interpreter.java:1200)
    at ij.macro.Interpreter.getTerm(Interpreter.java:1162)
    at ij.macro.Interpreter.getExpression(Interpreter.java:1145)
    at ij.macro.Interpreter.getBooleanExpression(Interpreter.java:881)
    at ij.macro.Interpreter.getLogicalExpression(Interpreter.java:857)
    at ij.macro.Interpreter.getBoolean(Interpreter.java:850)
    at ij.macro.Interpreter.doIf(Interpreter.java:829)
    at ij.macro.Interpreter.doStatement(Interpreter.java:217)
    at ij.macro.Interpreter.doBlock(Interpreter.java:515)
    at ij.macro.Interpreter.doStatement(Interpreter.java:241)
    at ij.macro.Interpreter.doIf(Interpreter.java:831)
    at ij.macro.Interpreter.doStatement(Interpreter.java:217)
    at ij.macro.Interpreter.doStatements(Interpreter.java:195)
    at ij.macro.Interpreter.run(Interpreter.java:99)
    at ij.macro.Interpreter.run(Interpreter.java:65)
    at ij.macro.Interpreter.run(Interpreter.java:75)
    at ij.plugin.Macro_Runner.runMacro(Macro_Runner.java:127)
    at ij.plugin.Macro_Runner.runMacroFile(Macro_Runner.java:112)
    at ij.IJ.runMacroFile(IJ.java:103)
    at ij.ImageJ.main(ImageJ.java:517)

Я перепробовал все, чтобы решить эту проблему, как:

export DISPLAY=:10.0
export DISPLAY=localhost:10.0

Я пробовал также порт 0.0, но я всегда получаю ту же ошибку

после попытки xhost

xhost +local:all
xhost:  unable to open display ""
xhost:  unable to open display ":10.0"

Как я могу это исправить, я подумал, что X-сервер не работает, поэтому я попытался startx его говорит, что работает в этом порту

моя система Ubuntu Server Edition 10.04

34 ответа

Решение

Эта команда помогла мне решить проблему:

export DISPLAY=:0

Вам необходимо указать -Djava.awt.headless=true параметр во время запуска.

Удалить переменную DISPLAY

unset DISPLAY

Это помогает в большинстве случаев (например, запуск серверов приложений или других инструментов на основе Java) и позволяет избежать изменения всего этого количества командных строк.

Также может быть удобно добавить его в.bash_profile для выделенного пользователя сервера приложений / инструментов.

Я думаю, что вы работаете в режиме sudo. Пожалуйста, перейдите в режим пользователя и попробуйте снова

В случае, если кто-нибудь попытается запустить автоматические модульные тесты через maven-surefire-plugin на CI(jenkins,..) и получит вышеупомянутую ошибку, обязательно обновите конфигурацию верного плагина:

<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-surefire-plugin</artifactId>
     <version>${maven-surefire-plugin.version}</version>
     <configuration>
            <systemPropertyVariables>
                <java.awt.headless>true</java.awt.headless>
            </systemPropertyVariables>
      </configuration>
</plugin>

Это исправит это:

/usr/bin/java -Djava.awt.headless=true $Your_program

Для меня вход в систему как -Y вместо -X работал.

Если у вас ненадежный X11, как показано ниже, попробуйте вместо этого флаг -Y (если вы доверяете хосту):

Предупреждение: не удалось установить ненадежную пересылку X11: данные ключа xauth не созданы

Это устранило мою проблему

xhost +

но имейте в виду, что xhost + полностью деактивирует аутентификацию и позволяет каждому получить доступ ко всем приложениям на вашем экране.

xhost +si:localuser:root похоже, работает аналогично при правильной аутентификации.

Если вы пытаетесь экспортировать отображение с помощью su, но это все равно не работает. Это то, что у меня сработало. Попробуйте перенаправление X11 для пользователей sudo.

Подключите удаленный хост с помощью опции -X с ssh.

# ssh -X root@remote-host

Теперь перечислите набор кукол для текущего пользователя.

# xauth list $DISPLAY
    node01.thegeekdiary.com/unix:10  MIT-MAGIC-COOKIE-1  dacbc5765ec54a1d7115a172147866aa
# echo $DSIPLAY
    localhost:10.0

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

# sudo su - [user]
# xauth add node01.thegeekdiary.com/unix:10  MIT-MAGIC-COOKIE-1  dacbc5765ec54a1d7115a172147866aa

Снова экспортируйте отображение из шага 2 для пользователя sudo. Попробуйте выполнить команду xclock, чтобы убедиться, что клиентские приложения x работают должным образом.

# export DISPLAY=localhost:10.0

источник: https://www.thegeekdiary.com/how-to-set-x11-forwarding-export-remote-display-for-users-who-switch-accounts-using-sudo/

После нескольких дней тщетных усилий по установке Glassfish на Raspberry Pi 2 с безголовой Fedora 22, ниже работал без сучка и задоринки

 unset DISPLAY
java -Djava.awt.headless=true -jar glassfissh-installer-v2ur2-b04-linux.jar

получил мою помощь отсюда

Во-первых: запустить XQuartz

Второе: ssh -X user @ ip_address

...: начать свой процесс

если вы ssh, а затем запустите XQuartz, вы получите эту ошибку

Сначала сделайте это либо в фазе сборки Jenkins, если используете, либо установите в /etc/profile:

unset DISPLAY
export DISPLAY=:0

затем установите это свойство либо в коде Java, либо с помощью maven: -Djava.awt.headless=false

Я использовал Xming и получил похожую ошибку. Для решения проблемы были предприняты следующие шаги:

  1. При запуске Xming установите флажок без контроля доступа.
  2. В шпатлевке выполнялась следующая команда: DISPLAY=XXX.XXX.XXX.XX:0.0; export DISPLAY

замещать XXX.XXX.XXX.XX с вашим IP-адресом.

Проверьте , установлена ​​ли переменная $DISPLAY или нет, с помощью следующей команды:

echo $DISPLAY

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

экспорт DISPLAY=:0.0

в замазке также есть расположение отображения x как: 0,0

Решаемые. Я просто выйду из системы и войду через xorg!

Michael-O дал полезный подход для решения проблемы. Другой способ решить эту проблему - запустить сервер с консолью Putty.

Для Ubuntu 17.10 Установите виртуальный фрейм-буфер X (xvfb)

apt install xvfb

И добавил эти строки в файл /etc/profile...

# Start the X virtual frame buffer (Xvfb)
if [ -f /usr/X11R6/bin/Xvfb ]; then
/usr/X11R6/bin/Xvfb :1 -screen 0 1366x768x32
fi

# Set the DISPLAY variable for the X virtual frame buffer (Xvfb)
export DISPLAY=localhost:1.0

В моем случае в моей машине не осталось места, и я столкнулся с той же проблемой. Иногда это может быть космическая проблема. Проверьте пространство в вашей среде Linux/Unix и убедитесь, что на вашем компьютере достаточно места.

Я решил эту проблему, войдя в систему с помощью Xorg. По умолчанию я использовал Wayland. Похоже, что Wayland устраняет большинство недостатков дизайна Xorg, у него есть свои проблемы.

У меня была такая же проблема на сервере Linux, над которым я работал. Подключение java к дисплею X11 работало на головном узле, но не на любом другом. После обращения к администратору выяснилось, что текущая версия нашей системы планирования заданий (SLURM) не поддерживает пересылку X11. Им пришлось обновить SLURM (новые версии SLURM поддерживают его), чтобы он заработал.

Если вы запускаете код из Jenkins, может помочь включение опции "Запустите Xvfb перед сборкой и выключите ее после". Это помогло мне.

Я столкнулся с той же ошибкой с вами, когда я запускаю команду jconsole на удаленном компьютере. Я хочу изменить параметр в jconsole, который запускается на удаленном хосте Linux, я могу войти на хост с помощью secureCRT, терминал выдает эту информацию об ошибке. К счастью, когда вы используете шпаклевку, это нормально. Weird....

Я просто не вышел из системы до запуска./studio.sh Все готово.

В моем случае эта ошибка не была связана с портом DISPLAY. Я пытался загрузить XML в Windchill (PLM-программу) и получил только указанную выше ошибку на терминале. В лог -файле я обнаружил сообщение о том, что мой XML-файл поврежден. Может быть, у кого-то есть похожая проблема, и он может использовать этот ответ.

Единственный способ заставить его работать - запустить скрипт с шаблоном. например, sudo ./glassfish-3.1.2.2-unix.sh -s template

Это устанавливает Glassfish в тихом режиме. http://docs.oracle.com/cd/E18930_01/html/821-2427/ghmva.html

Моя проблема была в брандмауэре. Временно отключил.

[РЕДАКТИРОВАТЬ] И имя хоста сервера указывало на другой IP. Установите просто localserver.strace xclock помог отладить эту проблему.

Перейдите к другому пользователю и попробуйте, кроме root. меня устраивает.

запуск ниже cmd исправил мою проблему. работает для моего случая

unset DISPLAY

В моем случае у меня была именно эта ошибка, когда я запускал IDE Jetbrains, такие как Pycharm, IntelliJ IDEA...

Я набрал это в том же терминале, который использовал для запуска IDE для решения проблемы:

      export DISPLAY=:1

Затем я запустил IDE с того же терминала, выполнив командуpycharmи это сработало как шарм.

Результат обеих IDE:

  1. экспортировать локальный хост:1

  2. -Djava.awt.headless=истина

Другие вопросы по тегам