Java Tidak dapat terhubung ke server jendela X11 menggunakan 'localhost: 10.0' sebagai nilai variabel DISPLAY


97

Saya memiliki skrip menggunakan java untuk menyambung ke tampilan X11 di port 10.0 di localhost

tetapi saya selalu mendapatkan kesalahan ini

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)

Saya telah mencoba segalanya untuk menyelesaikan masalah ini seperti:

export DISPLAY=:10.0
export DISPLAY=localhost:10.0

Saya juga mencoba port 0.0 tetapi saya selalu mendapatkan kesalahan yang sama

setelah mencoba xhost

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

bagaimana saya bisa memperbaikinya saya pikir bahwa X Server tidak berjalan jadi saya mencoba startxkatanya berjalan di port itu

sistem saya adalah edisi server Ubuntu 10.04

Jawaban:


37

Perintah ini membantu saya menyelesaikan masalah:

export DISPLAY=:0

41
unset DISPLAYmembantu saya (dengan export DISPLAY=:0saya mendapat kesalahanCan't connect to X11 window server using ':0'
beluchin

2
Di mana Anda meletakkannya
Spektakulatius

1
kadang-kadang - itu tidak akan berfungsi di linux maka bagus untuk menginstal Xvfb dengan apt dan menjalankannya di layar apa pun seperti: Xvfb: 1 dan kemudian set variabel dalam fase build - ekspor DISPLAY =: 1 -> ini berfungsi dengan sempurna.
Pankaj Kumar Katiyar


Ada alasan untuk perilaku ini?
Annapoorni D

61

Anda perlu menentukan -Djava.awt.headless=trueparameter pada waktu startup.


Terima kasih banyak tetapi di mana saya harus menentukan ini dengan tepat?
Elteroooo

1
Pengecualian di thread "main" java.awt.He adlessException di java.awt.GraphicsEnvironment.checkHeadless (GraphicsEnvironment.java:1 73)
Elteroooo

Apakah Anda menjalankan manajer keamanan? Jika demikian, Anda mungkin harus memberikan izin.
Michael-O

1
terima kasih masalahnya adalah bahwa X Server sedang berjalan di port lain
Elteroooo

1
Program penanya ingin melakukannya ij.io.Opener.openJpegOrGif, kami dapat menebak bahwa mungkin membutuhkan GUI. Jadi tanpa kepala akan menghasilkan kesalahan lain: java.awt.HeadlessException.
Nicolas Raoul

41

Hapus variabel DISPLAY

unset DISPLAY

Ini membantu dalam banyak kasus (misalnya memulai server aplikasi atau alat berbasis java lainnya) dan menghindari untuk mengubah banyak baris perintah.

Mungkin juga nyaman untuk menambahkannya ke .bash_profile untuk pengguna server aplikasi / alat khusus.


1
itu tidak membantu saya sama sekali. Saya mendapatkan ini: AWT Tidak dapat terhubung ke server jendela X11 menggunakan ...
Pankaj Kumar Katiyar

Jika aplikasi Anda menggunakan awt maka Anda harus mengatur DISPLAY dengan benar. Ini untuk aplikasi yang tidak menggunakan awt.
bebbo

Saat bermain-main dengan ini, pastikan Anda memulai ulang mobaXterm setelah menambahkan perintah unset di bashfile Anda. Karena variabel Tampilan akan disetel dari sebelumnya dan hanya menjalankan file bash Anda tidak akan mengubahnya.
mrk


9

Jika ada yang mencoba menjalankan pengujian unit otomatis melalui maven-surefire-plugin di CI (jenkins, ..), dan mendapatkan kesalahan yang disebutkan di atas, pastikan untuk memperbarui konfigurasi plugin yang pasti Anda:

<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
bagaimana melakukannya di gradle dan juga bagaimana mengatur nilai properti di dalamnya.
Sobhit Sharma

8

Ini akan memperbaikinya:

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

Tidak memperbaiki milik saya
Alex Shnyrov

1
Ini berhasil untuk saya. Terima kasih. Saya mendapatkan kesalahan karena saya menggunakan poi.
dev4life

6

Bagi saya masuk sebagai -Y, bukan -X bekerja.

Jika Anda memiliki X11 yang tidak tepercaya seperti yang ditunjukkan di bawah ini, cobalah -Y flag sebagai gantinya (jika Anda mempercayai host):

Peringatan : penyiapan penerusan X11 yang tidak tepercaya gagal: data kunci xauth tidak dibuat


5

Setelah beberapa hari upaya sia-sia memasang ikan gelas pada raspberry pi 2 dengan fedora tanpa kepala 22, Di bawah ini berhasil untuk saya tanpa hambatan

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

mendapat bantuan saya dari sini


4

Pertama: mulai XQuartz

Kedua: ssh -X user @ ip_address

...: mulai proses Anda

jika Anda ssh dan kemudian memulai XQuartz Anda akan mendapatkan kesalahan itu


4

Ini memperbaiki masalah saya

xhost +

tetapi Sadarilah bahwa xhost +sepenuhnya menonaktifkan otentikasi dan memungkinkan semua orang untuk mengakses semua aplikasi di layar Anda.

xhost +si:localuser:root tampaknya berfungsi serupa dengan otentikasi yang benar.


3

Pertama-tama lakukan ini di Fase Build Jenkins jika menggunakan atau disetel di / etc / profile:

unset DISPLAY
export DISPLAY=:0

kemudian setel properti ini dalam kode java atau menggunakan maven: -Djava.awt.headless = false


2

Saya menggunakan Xming dan mendapatkan kesalahan serupa. Langkah-langkah berikut diambil untuk memperbaiki masalah:

  1. Dalam peluncuran Xming, centang kotak tanpa kontrol akses.
  2. Dalam putty, jalankan perintah berikut: DISPLAY=XXX.XXX.XXX.XX:0.0; export DISPLAY

Ganti XXX.XXX.XXX.XXdengan alamat IP Anda.


Saya dalam konfigurasi yang sama, namun tidak berhasil. Saya perlu menambahkan IP yang menjalankan X11 di file X0.hosts
Christophe Moine

2

Terpecahkan. Saya baru saja keluar dan masuk dengan xorg!


1
ekspor DISPLAY =: 0 atau ekspor DISPLAY =: 1 tidak bekerja untuk saya. Keluar dan masuk menyelesaikannya untuk saya.
Optimus

2

Jika Anda mencoba mengekspor tampilan menggunakan su dan masih tidak berhasil. Inilah yang berhasil bagi saya. Coba penerusan X11 untuk pengguna sudo.

Hubungkan host jarak jauh menggunakan opsi -X dengan ssh.

# ssh -X root@remote-host

Sekarang daftar set coockie untuk pengguna saat ini.

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

Beralih ke akun pengguna lain menggunakan sudo. Tambahkan cookie dari output perintah di atas ke pengguna sudo.

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

Ekspor tampilan dari langkah 2 lagi untuk pengguna sudo. Coba perintah xclock untuk memverifikasi apakah aplikasi klien x berfungsi seperti yang diharapkan.

# export DISPLAY=localhost:10.0

sumber: https://www.thegeekdiary.com/how-to-set-x11-forwarding-export-remote-display-for-users-who-switch-accounts-using-sudo/


1

Jika Anda melihat kesalahan ini di Hudson, coba hapus direktori .java dari direktori home Anda, ini mungkin berhasil untuk Anda.


1

Michael-O memberikan pendekatan yang berguna untuk memecahkan masalah tersebut. Cara lain untuk mengatasinya adalah dengan memulai server dengan Putty Console.


bisakah Anda menjelaskan sedikit lebih banyak bagaimana itu akan berhasil? (Saya tidak pernah menggunakan dempul)
mrk

1

Dalam kasus saya, tidak ada ruang tersisa di mesin saya dan saya menghadapi masalah yang sama. Terkadang bisa jadi masalah ruang angkasa. Periksa ruang di lingkungan Linux / Unix Anda dan pastikan mesin Anda memiliki cukup ruang.


1

periksa apakah variabel $ DISPLAY diset atau tidak, dengan perintah di bawah ini:

echo $ DISPLAY

jika variabel tampilan tidak disetel, jalankan perintah di bawah ini untuk menyetel, (bahkan jika disetel, Anda dapat memiliki di bawah ini untuk sesi Anda)

ekspor DISPLAY =: 0.0

dalam dempul juga memiliki lokasi tampilan x sebagai: 0,0


1

Saya memiliki masalah yang sama di server Linux yang saya kerjakan. Menghubungkan java ke layar X11 berfungsi pada node kepala, tetapi tidak pada yang lain. Setelah menghubungi administrator, ternyata versi sistem penjadwalan pekerjaan (SLURM) kami saat ini tidak mendukung penerusan X11. Mereka harus memperbarui SLURM (versi SLURM yang lebih baru mendukungnya) agar dapat berfungsi.



0

Saya mengalami kesalahan yang sama dengan Anda ketika saya menjalankan perintah jconsole dari jarak jauh. Saya ingin mengubah parameter di jconsole yang berjalan pada host Linux jarak jauh, saya dapat masuk ke host menggunakan secureCRT, terminal membuang informasi kesalahan ini. Untungnya, saat menggunakan Putty, tidak apa-apa. Aneh....


0

Jika Anda memulai aplikasi di server jauh sementara login dengan ssh maka cara lain adalah dengan memulai ssh dengan -xparameter atau add ForwardX11 nodi Anda /etc/ssh/ssh_config. Dalam hal ini ssh tidak akan membuat variabel lingkungan DISPLAY.


0

Bagi saya, masalahnya adalah xorg-x11-xauth tidak diinstal. Saya menginstalnya dan kemudian berhasil.

Paket yang saya miliki sekarang adalah:

  • 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-firware-7.6.1-2.el6.noarch
  • xorg-x11-xauth-1.0.9-1.el6.x86_64

0

Jika Anda memicu kode dari Jenkins, mengaktifkan opsi "Mulai Xvfb sebelum build, dan matikan setelahnya" dapat membantu. Itu membantu saya.


0

ubah ke pengguna lain dan coba kecuali root. itu berhasil untuk saya.



0

Untuk Ubuntu 17.10 Instal X virtual frame buffer (xvfb)

apt install xvfb

Dan menambahkan baris ini ke file / 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
Sekarang saya baru saja mendapatkan "Exception in thread" main "java.awt.AWTError: Tidak dapat terhubung ke server jendela X11 menggunakan 'localhost: 1.0' sebagai nilai variabel DISPLAY." di Ubuntu 16.04. Biner Xvfb sekarang tampaknya terletak di / usr / bin, bukan / usr / X11R6 / bin, tetapi memberi saya "Tidak dapat menambahkan layar 0 (EE)".
Chris Jenks

0

Dalam kasus saya, kesalahan ini tidak terkait dengan port DISPLAY. Saya mencoba memuat XML ke Windchill (perangkat lunak PLM) dan hanya menerima kesalahan di atas pada terminal. Dalam logfile saya menemukan laporan bahwa file XML saya rusak . Mungkin seseorang memiliki masalah serupa dan dapat menggunakan jawaban ini.


0

Masalah saya adalah dengan firewall. Nonaktifkan sementara.

[EDIT] Dan, nama host server mengarah ke IP lain. Setel ke server lokal saja. strace xclockmembantu men-debug masalah ini.


0

Saya telah memperbaiki masalah ini dengan masuk menggunakan Xorg. Secara default, saya telah menggunakan Wayland. Sepertinya Wayland menghilangkan sebagian besar kekurangan desain Xorg yang memiliki masalahnya sendiri.masukkan deskripsi gambar di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.