У меня проблема с подключением к 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, и он работает, если я набираю startx
Отвечает ли это на ваш вопрос? Java Не удается подключиться к оконному серверу X11, используя «localhost: 10.0» в качестве значения переменной DISPLAY
Не пойдет, но все равно спасибо




Основываясь на значении 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. Есть идеи??
Я только что получил это, это было так же просто, как написать sudo java -jar вместо java -jar, не знаю почему, но теперь это работает
Хороший! Возможно, вы захотите посмотреть, сможете ли вы запустить X как обычный пользователь, если вы беспокоитесь о том, чтобы предоставить корневой доступ к коду Java. Кроме того, sudo может сработать, потому что он изменит ваши переменные среды, такие как DISPLAY. Если sudo -E java -jar ... не работает, это, скорее всего, связано с переменными среды, опция -E сохраняет среду вне команды sudo
Похоже, вы не установили компоненты x11 своей ОС.