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

У меня проблема с подключением к X11 и переменной DISPLAY

Я работаю с файлом Java в своем Raspberry Pi Zero, который использует JFrame, и я хочу, чтобы окно, созданное JFrame, отображалось на мониторе, подключенном к моей малине, но я продолжаю получать это исключение. Есть идеи? Я работаю с Java OpenJDK версии "1.8.0_312"

Exception in thread "main" java.awt.AWTError: 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:65)
    at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:115)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:74)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at java.awt.GraphicsEnvironment.createGE(GraphicsEnvironment.java:103)
    at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:82)
    at java.awt.Window.initGC(Window.java:475)
    at java.awt.Window.init(Window.java:495)
    at java.awt.Window.<init>(Window.java:537)
    at java.awt.Frame.<init>(Frame.java:420)
    at javax.swing.JFrame.<init>(JFrame.java:233)
    at Prueba.main(Prueba.java:5)

Я попытался запустить xterm или xhost, чтобы убедиться, что все работает нормально, но у меня возникла следующая проблема:

No protocol specified
xterm: Xt error: Can't open display: :0

Я использую Putty в качестве своего SSH-клиента.

Похоже, вы не установили компоненты x11 своей ОС.

Jens 05.04.2023 18:19

Я установил X11, и он работает, если я набираю startx

jlan 05.04.2023 18:25

Не пойдет, но все равно спасибо

jlan 06.04.2023 10:46
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
204
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Основываясь на значении localhost:10.0 для DISPLAY, кажется вероятным, что вы подключаетесь к Raspberry Pi через SSH, и ваш SSH-клиент пытается выполнить переадресацию X (позволяя удаленным программам открывать окна на вашем локальном компьютере). Отключите переадресацию X в вашем SSH-клиенте или установите для переменной DISPLAY другое значение, чтобы избежать этого. Я бы попробовал export DISPLAY=:0 в качестве отправной точки для тестирования.

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

Если это удастся, проверьте переменную DISPLAY, которая работает для другой программы (echo $DISPLAY), и попробуйте использовать любое установленное там значение. (например, export DISPLAY=:0)

Обратите внимание, что отображаемые номера X обычно соответствуют номеру TCP-порта, который прослушивает X-сервер. Номер дисплея на 6000 меньше номера порта, поэтому дисплей 0 прослушивает порт 6000, дисплей 10 прослушивает порт 6010. Это означает, что вы можете использовать команду наподобие netstat -tlp, чтобы вывести список программ, которые прослушивают определенные порты, и проверить, прослушивает ли что-нибудь на порт 6010, соответствующий localhost:10.0 в вашей переменной DISPLAY. Если процесс, прослушивающий 6010, является ssh, ваш клиент пытается обеспечить переадресацию X.

Также обратите внимание, что в большинстве систем X-серверы имеют механизм аутентификации, который предотвращает подключение пользователей, не начавших сеанс. (дополнительную информацию см. в файле XAuthority) Обычно пользователь root может открывать окна на любом X-сервере, поэтому, возможно, стоит попробовать как пользователь root для тестирования.

Спасибо! «Экспорт DISPLAY =: 0» не будет работать, так как я продолжаю получать одно и то же исключение. Когда я пытаюсь запустить xterm или xhost, у меня возникает та же проблема: «Не указан протокол xterm: ошибка Xt: невозможно открыть дисплей: : 0». Только что проверил, что ssh не прослушивает порт 6010. Есть идеи??

jlan 06.04.2023 09:30
Ответ принят как подходящий

Я только что получил это, это было так же просто, как написать sudo java -jar вместо java -jar, не знаю почему, но теперь это работает

Хороший! Возможно, вы захотите посмотреть, сможете ли вы запустить X как обычный пользователь, если вы беспокоитесь о том, чтобы предоставить корневой доступ к коду Java. Кроме того, sudo может сработать, потому что он изменит ваши переменные среды, такие как DISPLAY. Если sudo -E java -jar ... не работает, это, скорее всего, связано с переменными среды, опция -E сохраняет среду вне команды sudo

M Virts 10.04.2023 18:27

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