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

Elteroooo
sumber

Jawaban:

37

Perintah ini membantu saya menyelesaikan masalah:

export DISPLAY=:0
Maryam Saeidi
sumber
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
Silakan, baca: stackoverflow.com/questions/20607777/…
Felix Aballi
Ada alasan untuk perilaku ini?
Annapoorni D
61

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

Michael-O
sumber
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.

bebbo
sumber
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
17

Saya pikir Anda bekerja dalam mode sudo. Harap keluar ke mode pengguna dan coba lagi

Harsh V Pillai
sumber
4
Ini juga masalah saya. Aneh rasanya tidak bisa dijalankan sebagai root, bukan?
javajavajava
Mengapa saya tidak bisa menggunakan sudo?
Andrea Borgogelli Avveduti
@javajavajava yup
Harsh V Pillai
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>
Puneetsri
sumber
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
grepit
sumber
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

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

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

Aleks Tkachenko
sumber
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.

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

Pankaj Kumar Katiyar
sumber
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.

Shashank
sumber
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!

Nilesh
sumber
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/

Mohamed ELJ
sumber
1

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

pengguna2945593
sumber
1

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

Koti Reddy
sumber
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.

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

Naresh A
sumber
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.

MM
sumber
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....

David
sumber
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.

pengguna3132194
sumber
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
Kwokman Chung
sumber
0

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

Akshay Maldhure
sumber
0

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

Vinod Ranga
sumber
0

Saya hanya tidak keluar dari root sebelum menjalankan ./studio.sh All set.

Praveen Kumar Verma
sumber
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
cwilliamsz.dll
sumber
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.

LMN
sumber
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.

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

Easwer AP
sumber