Java Không thể kết nối với máy chủ cửa sổ X11 bằng cách sử dụng 'localhost: 10.0' làm giá trị của biến DISPLAY


93

Tôi có một tập lệnh sử dụng java để kết nối để hiển thị X11 trong cổng 10.0 tại localhost

nhưng tôi luôn gặp lỗi này

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)

Tôi đã thử mọi cách để giải quyết vấn đề này như:

export DISPLAY=:10.0
export DISPLAY=localhost:10.0

Tôi cũng đã thử cổng 0.0 nhưng tôi luôn gặp lỗi tương tự

sau khi thử xhost

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

Làm thế nào tôi có thể sửa lỗi này Tôi nghĩ rằng Máy chủ X không chạy vì vậy tôi đã thử startxnó nói rằng nó đang chạy ở cổng đó

hệ thống của tôi là phiên bản máy chủ Ubuntu 10.04

Câu trả lời:


35

Lệnh này đã giúp tôi giải quyết vấn đề:

export DISPLAY=:0

40
unset DISPLAYgiúp tôi (với export DISPLAY=:0tôi đã nhận lỗiCan't connect to X11 window server using ':0'
beluchin

1
Nơi mà bạn đã đặt nó
Spektakulatius

1
đôi khi - nó sẽ không hoạt động trên linux thì tốt hơn là cài đặt Xvfb với apt và chạy nó trên bất kỳ màn hình nào như: Xvfb: 1 và sau đó đặt biến trong giai đoạn xây dựng - export DISPLAY =: 1 -> điều này hoàn toàn hoạt động.
Pankaj Kumar Katiyar 22/09/18


57

Bạn cần chỉ định -Djava.awt.headless=truetham số tại thời điểm khởi động.


Cảm ơn rất nhiều nhưng tôi phải chỉ định điều này chính xác ở đâu?
Elteroooo

1
Ngoại lệ trong chuỗi "main" java.awt.He adlessException tại java.awt.GraphicsEnosystem.checkHeadless (GraphicsEnosystem.java:1 73)
Elteroooo

Bạn đang điều hành một người quản lý bảo mật? Nếu vậy, bạn có thể phải cấp quyền cho.
Michael-O

1
nhờ vấn đề là X Server đang chạy ở cổng khác
Elteroooo

1
Chương trình của người hỏi muốn thực hiện ij.io.Opener.openJpegOrGif, chúng ta có thể đoán rằng có thể yêu cầu GUI. Vì vậy, không đầu sẽ dẫn đến lỗi khác: java.awt.HeadlessException.
Nicolas Raoul

40

Xóa biến DISPLAY

unset DISPLAY

Điều này giúp ích trong hầu hết các trường hợp (ví dụ: khởi động máy chủ ứng dụng hoặc các công cụ dựa trên java khác) và tránh sửa đổi tất cả nhiều dòng lệnh đó.

Cũng có thể thoải mái khi thêm nó vào .bash_profile cho người dùng ứng dụng-máy chủ / công cụ chuyên dụng.


1
nó không giúp được gì cho tôi cả. Tôi nhận điều này: không AWT có thể kết nối đến máy chủ cửa sổ X11 sử dụng ...
Pankaj Kumar Katiyar

Nếu ứng dụng của bạn sử dụng awt thì bạn phải đặt HIỂN THỊ chính xác. Điều này dành cho các ứng dụng không sử dụng awt.
bebbo 22/09/18

Khi giải quyết vấn đề này, hãy đảm bảo rằng bạn khởi động lại mobaXterm sau khi thêm lệnh chưa đặt trong tệp bashfile của bạn. Vì biến Hiển thị sẽ được đặt từ trước và chỉ cần chạy tệp bash của bạn sẽ không thay đổi điều đó.
mrk

15

Tôi nghĩ rằng bạn đang làm việc ở chế độ sudo. Vui lòng chuyển sang chế độ người dùng và thử lại


4
Đây cũng là vấn đề của tôi. Có vẻ kỳ lạ khi không thể chạy dưới dạng root, phải không?
javajavajava

Tại sao tôi không thể sử dụng sudo?
Andrea Borgogelli Avveduti

@javajavajava yup
Harsh V Pillai

9

Trong trường hợp có ai đó đang cố gắng chạy các bài kiểm tra đơn vị tự động thông qua maven-surefire-plugin trên CI (jenkins, ..) và gặp lỗi được đề cập ở trên, hãy nhớ cập nhật cấu hình plugin surefire của bạn:

<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>

1
cách thực hiện trong gradle và cả cách đặt giá trị thuộc tính trong đó.
Sobhit Sharma

7

Điều này sẽ khắc phục nó:

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

Không sửa lỗi của tôi
Alex Shnyrov

1
Điều này đã làm việc cho tôi. Cảm ơn bạn. Tôi gặp lỗi vì tôi đang sử dụng poi.
dev4life

6

Đối với tôi, đăng nhập bằng -Y thay vì -X đã hoạt động.

Trong trường hợp bạn có X11 không đáng tin cậy như được hiển thị bên dưới, hãy thử gắn cờ -Y để thay thế (nếu bạn tin tưởng máy chủ):

Cảnh báo : thiết lập chuyển tiếp X11 không đáng tin cậy không thành công: dữ liệu khóa xauth không được tạo


4

Sau nhiều ngày nỗ lực vô ích để cài đặt glassfish trên raspberry pi 2 với mũ phớt 22 không đầu, dưới đây đã làm việc cho tôi mà không gặp khó khăn

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

đã nhận được sự giúp đỡ của tôi từ đây


3

Đầu tiên: khởi động XQuartz

Thứ hai: ssh -X user @ ip_address

...: bắt đầu quá trình của bạn

nếu bạn ssh và sau đó khởi động XQuartz, bạn sẽ gặp lỗi đó


3

Điều này đã khắc phục sự cố của tôi

xhost +

nhưng Hãy lưu ý rằng xhost +hoàn toàn hủy kích hoạt xác thực và cho phép mọi người truy cập vào tất cả ứng dụng trên màn hình của bạn.

xhost +si:localuser:root dường như hoạt động tương tự với xác thực thích hợp.


2

Tôi đang sử dụng Xming và gặp lỗi tương tự. Các bước sau đã được thực hiện để khắc phục sự cố:

  1. Trong khởi chạy Xming chọn hộp không có kiểm soát truy cập.
  2. Trong putty chạy lệnh sau: DISPLAY=XXX.XXX.XXX.XX:0.0; export DISPLAY

Thay thế XXX.XXX.XXX.XXbằng địa chỉ IP của bạn.


Tôi đang ở trong cùng một cấu hình, nhưng nó không hoạt động. Tôi cần thêm địa chỉ IP thực X11 trong tập tin X0.hosts
Christophe Moine

2

Đầu tiên hãy làm điều này trong Build Phase of Jenkins nếu sử dụng hoặc đặt trong / etc / profile:

unset DISPLAY
export DISPLAY=:0

sau đó đặt thuộc tính này bằng mã java hoặc sử dụng maven: -Djava.awt.headless = false


2

Đã giải quyết. Tôi chỉ đăng xuất và đăng nhập với xorg!


1
export DISPLAY =: 0 hoặc export DISPLAY =: 1 không hoạt động với tôi. Đăng xuất và đăng nhập đã giải quyết nó cho tôi.
Optimus

1

Michael-O đã đưa ra cách tiếp cận hữu ích để giải quyết vấn đề. Một cách khác để giải quyết vấn đề này là khởi động máy chủ với Putty Console.


bạn có thể giải thích thêm một chút về cách thức hoạt động không? (Tôi chưa bao giờ sử dụng putty)
Mrk

1

Trong trường hợp của tôi, không còn chỗ trống trong máy của tôi và tôi gặp phải vấn đề tương tự. Đôi khi nó có thể là vấn đề không gian. Kiểm tra dung lượng trong môi trường Linux / Unix của bạn và đảm bảo rằng máy của bạn có đủ dung lượng.


1

Nếu bạn đang cố gắng xuất hiển thị bằng su và nó vẫn không hoạt động. Đây là những gì làm việc cho tôi. Thử chuyển tiếp X11 cho người dùng sudo.

Kết nối máy chủ từ xa bằng tùy chọn -X với ssh.

# ssh -X root@remote-host

Bây giờ liệt kê bộ coockie cho người dùng hiện tại.

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

Chuyển sang tài khoản người dùng khác bằng sudo. Thêm cookie từ đầu ra lệnh ở trên cho người dùng sudo.

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

Xuất lại màn hình từ bước 2 cho người dùng sudo. Hãy thử lệnh xclock để xác minh xem các ứng dụng x client có hoạt động như mong đợi hay không.

# export DISPLAY=localhost:10.0

nguồn: https://www.thegeekdiary.com/how-to-set-x11-osysteming-export-remote-display-for-users-who-switch-accounts-using-sudo/


1

kiểm tra xem biến $ DISPLAY đã được đặt hay chưa, bằng lệnh dưới đây:

echo $ DISPLAY

nếu biến hiển thị không được đặt, hãy chạy lệnh bên dưới để đặt, (ngay cả khi biến hiển thị được đặt, bạn có thể đặt dưới một biến cho phiên của mình)

xuất DISPLAY =: 0.0

trong putty cũng có vị trí hiển thị x là: 0.0



0

Tôi gặp cùng một lỗi với bạn khi tôi chạy lệnh jconsole từ xa. Tôi muốn sửa đổi một tham số tại jconsole chạy trên máy chủ Linux từ xa, tôi có thể đăng nhập máy chủ bằng secureCRT, thiết bị đầu cuối sẽ đưa ra thông tin lỗi này. May mắn thay, khi sử dụng Putty, nó rất ổn. Kỳ dị....


0

Nếu bạn thấy lỗi này trong Hudson, hãy thử xóa thư mục .java khỏi thư mục chính của bạn, nó có thể hiệu quả với bạn.


0

Nếu bạn khởi động ứng dụng trên máy chủ từ xa trong khi đăng nhập bằng ssh thì một cách khác sẽ là khởi động ssh với -xtham số hoặc thêm ForwardX11 novào của bạn /etc/ssh/ssh_config. Trong trường hợp này ssh sẽ không tạo biến môi trường DISPLAY.


0

Nếu bạn đang kích hoạt mã của mình từ Jenkins, việc bật tùy chọn "Khởi động Xvfb trước khi xây dựng và tắt nó sau đó" có thể hữu ích. Nó đã giúp đỡ tôi.


0

thay đổi thành một người dùng khác và thử ngoại trừ root. nó hoạt động cho tôi.



0

Đối với Ubuntu 17.10 Cài đặt bộ đệm khung ảo X (xvfb)

apt install xvfb

Và đã thêm những dòng này vào tệp / 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

2
Bây giờ tôi chỉ nhận được "Ngoại lệ trong luồng" main "java.awt.AWTError: Không thể kết nối với máy chủ cửa sổ X11 bằng cách sử dụng 'localhost: 1.0' làm giá trị của biến DISPLAY." trên Ubuntu 16.04. Hiện tại, tệp nhị phân Xvfb dường như được đặt tại / usr / bin, không phải / usr / X11R6 / bin, nhưng cho tôi biết "Không thể thêm màn hình 0 (EE)".
Chris Jenks,

0

Trong trường hợp của tôi, lỗi này không liên quan đến cổng HIỂN THỊ. Tôi đang cố gắng tải một XML vào Windchill (một phần mềm PLM) và chỉ nhận được lỗi ở trên trên thiết bị đầu cuối. Trong một tệp nhật ký, tôi thấy báo cáo rằng tệp XML của tôi bị hỏng . Có thể ai đó có vấn đề tương tự và có thể sử dụng câu trả lời này.


0

Vấn đề của tôi là với tường lửa. Vô hiệu hóa nó tạm thời.

[EDIT] Và, tên máy chủ đã trỏ đến một IP khác. Đặt nó thành người dân địa phương đơn giản. strace xclockđã giúp gỡ lỗi vấn đề này.


0

Tôi đã khắc phục sự cố này bằng cách đăng nhập bằng Xorg. Theo mặc định, tôi đã sử dụng Wayland. Có vẻ như Wayland đã loại bỏ hầu hết các lỗi thiết kế của Xorg, nó có những vấn đề riêng.nhập mô tả hình ảnh ở đây


-1

Đối với tôi, vấn đề là xorg-x11-xauth chưa được cài đặt. Tôi đã cài đặt nó và sau đó nó hoạt động.

Các gói mà tôi có bây giờ là:

  • libX11-common-1.6.3-2.el6.noarch
  • libX11-1.6.3-2.el6.i686
  • libX11-1.6.3-2.el6.x86_64
  • xorg-x11-drv-ati-domains-7.6.1-2.el6.noarch
  • xorg-x11-xauth-1.0.9-1.el6.x86_64
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.