“ ไม่มีตัวแปร X11 DISPLAY” หมายความว่าอย่างไร


104

ฉันพยายามติดตั้งแอปพลิเคชัน Java บนเครื่อง Linux (Slackware)

ฉันได้รับข้อผิดพลาดต่อไปนี้และฉันไม่เข้าใจ

คุณช่วยแนะนำวิธีแก้ปัญหาให้ฉันได้ไหม ขอบคุณ.

นี่คือสิ่งที่ฉันได้รับ: (ฉันเห็นว่าต้องตั้งค่าตัวแปรX11 DISPLAYบางตัว แต่ฉันควรให้ค่าเท่าไหร่และอย่างไร)

~$ java -jar gate-5.0-beta1-build3048-installer.jar
- ERROR -

java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
at java.awt.GraphicsEnvironment.checkHeadless(Graphic sEnvironment.java:159)
at java.awt.Window.<init>(Window.java:407)
at java.awt.Frame.<init>(Frame.java:402)
at net.sourceforge.mlf.metouia.borders.MetouiaDotsBuf fer.<init>(MetouiaDotsBuffer.java:105)
at net.sourceforge.mlf.metouia.borders.MetouiaDots.<i nit>(MetouiaDots.java:66)
at net.sourceforge.mlf.metouia.borders.MetouiaToolBar Border.<init>(MetouiaToolBarBorder.java:49)
at net.sourceforge.mlf.metouia.MetouiaLookAndFeel.ini tComponentDefaults(MetouiaLookAndFeel.java:241)
at javax.swing.plaf.basic.BasicLookAndFeel.getDefault s(BasicLookAndFeel.java:130)
at javax.swing.plaf.metal.MetalLookAndFeel.getDefault s(MetalLookAndFeel.java:1591)
at javax.swing.UIManager.setLookAndFeel(UIManager.jav a:537)
at javax.swing.UIManager.setLookAndFeel(UIManager.jav a:581)
at com.izforge.izpack.installer.GUIInstaller.loadLook AndFeel(GUIInstaller.java:373)
at com.izforge.izpack.installer.GUIInstaller.<init>(G UIInstaller.java:116)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newI nstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Construc tor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:30
at com.izforge.izpack.installer.Installer.main(Instal ler.java:62)

ฉันมีปัญหาเดียวกันมันทำงานได้อย่างสมบูรณ์บนคอนโซล แต่เมื่อฉันใช้ eclipse มันจะแสดงข้อยกเว้นเดียวกันฉันยังใส่บรรทัดรหัสนั้น: Process proc_exporting = Runtime.getRuntime () exec ("sudo export DISPLAY =: 0.0") ; ยังใช้ไม่ได้
hb. Sara

3
ไม่มีคำตอบใดให้ข้อมูลที่จำเป็นในการแก้ปัญหานี้เมื่อเชื่อมต่อกับคอนโซลจากระยะไกลผ่าน PuTTY คำตอบใด ๆ ที่กล่าวถึง SSH ไม่ได้อธิบายวิธีทำให้มันใช้งานได้จริง ใครทราบคำถามที่ตอบคำถามนี้

คำตอบ:


123

หากคุณอยู่บนหน้าจอหลักแสดงว่า

export DISPLAY=:0.0

หรือหากคุณใช้ csh หรือ tcsh

setenv DISPLAY :0.0

ก่อนเรียกใช้แอปของคุณ

ที่จริงฉันแปลกใจที่มันไม่ได้ตั้งค่าโดยอัตโนมัติ คุณกำลังพยายามเริ่มแอปพลิเคชันนี้จากเทอร์มินัลที่ไม่ใช่กราฟิกหรือไม่? ถ้าไม่คุณได้แก้ไขค่าเริ่มต้น. profile, .login, .bashrc หรือ. cshrc หรือไม่

โปรดทราบว่าการตั้งค่า DISPLAY เป็น: 0.0 ล่วงหน้าว่าคุณกำลังนั่งอยู่ที่จอแสดงผลหลักตามที่ฉันได้กล่าวไปหรืออย่างน้อยที่สุดก็คือการแสดงผลหลักเข้าสู่ระบบ ID ผู้ใช้ของคุณ หากไม่ได้เข้าสู่ระบบหรือเป็นรหัสผู้ใช้อื่นการดำเนินการนี้จะล้มเหลว

หากคุณเข้ามาจากเครื่องอื่นและคุณอยู่ที่จอแสดงผลหลักของเครื่องนั้นและกำลังใช้งาน X อยู่คุณสามารถใช้ "ssh -X hostname" เพื่อเชื่อมต่อกับโฮสต์นั้นและ ssh จะส่งต่อการแสดงผล X กลับ . นอกจากนี้ ssh จะตรวจสอบให้แน่ใจว่าได้ตั้งค่าตัวแปรสภาพแวดล้อม DISPLAY อย่างถูกต้อง (หากไม่ได้ยุ่งกับไฟล์ dot ต่างๆที่ฉันกล่าวถึงข้างต้น) ในเซสชัน "ssh -X" ตัวแปรสภาพแวดล้อม DISPLAY จะมีค่าเช่น "localhost: 11.0" ซึ่งจะชี้ไปที่ซ็อกเก็ตที่ ssh กำลังเชื่อมต่อกับกล่องภายในเครื่องของคุณ


สวัสดีขอบคุณมากคนแรกทำงานให้ฉัน ใช่ฉันเริ่มจากเทอร์มินัลที่ไม่ใช่กราฟิก
user42155

ดูเหมือนว่าต้องการเข้าถึงการแสดงผลกราฟิก ระวังอย่าเรียกใช้เมื่อจอแสดงผลกราฟิกไม่พร้อมใช้งานหรือเป็นของ userid อื่น
Paul Tomblin

3
โปรดทราบว่าสิ่งนี้ได้ผลเพราะคุณ / อยู่บนคอนโซล หากคุณอยู่บนเทอร์มินัลอื่นคุณจะต้องมีเซิร์ฟเวอร์ X ที่ทำงานบนเทอร์มินัลจากนั้นตั้งค่าสภาพแวดล้อมให้ชี้ไปที่เครื่องของคุณ (export DISPLAY = 'hostname of pauls terminal': 0.0 เป็นต้น)
KevinDTimm

@kevindtimm ข้อดี - ฉันจะรวมข้อมูลของ @ Mikeage เกี่ยวกับ ssh -X ไว้ในคำตอบของฉัน
Paul Tomblin

1
ในกรณีที่คุณต้องการรันงานอัตโนมัติที่ต้องเชื่อมต่อกับเซิร์ฟเวอร์ X คุณสามารถดูที่ xvfb ซึ่งสร้างเซิร์ฟเวอร์ X เสมือน สิ่งนี้มีประโยชน์มากสำหรับการทดสอบแบทช์หรือการทดสอบการรัน
Wichert Akkerman

10

คุณกำลังเรียกใช้สิ่งนี้จากภายในสภาพแวดล้อม X11 หรือไม่? คุณสามารถใช้หน้าต่างเทอร์มินัลได้ แต่ต้องอยู่ภายใน X (หลังจากล็อกอินแบบกราฟิกหรือเรียกใช้ startx)

หากคุณอยู่ในสภาพแวดล้อมแบบกราฟิกอยู่แล้วให้ลองส่งออก DISPLAY =: 0 สำหรับ bash เช่นเชลล์ (bash, sh, ฯลฯ ) หรือ setenv DISPLAY: 0 สำหรับ C เชลล์ตามเชลล์ (csh, tcsh ฯลฯ )

หากคุณเชื่อมต่อจากเครื่องอื่นผ่าน SSH คุณใช้ตัวเลือก -X เพื่อแสดงอินเทอร์เฟซแบบกราฟิกบนเครื่องที่คุณนั่งอยู่ (หากมีเซิร์ฟเวอร์ X ทำงานอยู่ที่นั่น (เช่น xming สำหรับ windows และ Linux X มาตรฐานของคุณ เซิร์ฟเวอร์)


สวัสดีฉันใช้งาน startx
user42155

โอ้ใช่ Slackware มันยังคงเป็นแบร์โบนเหมือนเดิมเมื่อ 10 ปีที่แล้วหรือไม่?
Paul Tomblin

มันยังคงเริ่มต้นตามค่าเริ่มต้นในระดับรันเลเวล 3 แน่นอนถ้าคุณบอกให้เริ่มในระดับรันเลเวล 5 คุณจะได้รับเมนูเข้าสู่ระบบ KDM ที่สวยงามโดยสมมติว่าคุณติดตั้ง KDE
Adam Jaskiewicz

ขอบคุณ! บน CentOS และ SSH ( export DISPLAY=:0
สีโป๊ว

9

คุณต้องเปิดใช้งานการส่งต่อ X11ในคุณ PuTTy

ในการเปิด PuTTy ให้ไปที่Connection => SSH => Tunnelsและทำเครื่องหมายที่Enable X11 forwarding

sudo ไปยังเซิร์ฟเวอร์และส่งออกตัวแปรด้านล่างที่นี่ IP คือ IP ของเครื่องท้องถิ่นของคุณ

export DISPLAY=10.75.75.75:0.0

ป้อนคำอธิบายภาพที่นี่


4

อีกสิ่งหนึ่งที่อาจเป็นปัญหาในกรณีที่คล้ายคลึงกับที่อธิบายไว้ - X ไม่ได้ถูกส่งต่อและ $ DISPLAY ไม่ได้รับการตั้งค่าเมื่อไม่ได้ติดตั้งโปรแกรม 'xauth' ที่ด้านระยะไกล คุณจะเห็นมันค้นหาเมื่อคุณเรียกใช้ "ssh -Xv ip_address" และหากไม่พบจะล้มเหลวซึ่งจะไม่เห็นจนกว่าคุณจะเปิดโหมด verbose (IMO ที่ล้มเหลว) โดยปกติคุณจะพบ 'xauth' ในแพ็กเกจที่มีชื่อเดียวกัน


3

ง่ายมากมีปัญหาเดียวกันนี้แล้วสิ่งที่ฉันทำคือดาวน์โหลดและติดตั้งแอพที่จะช่วยในการแสดงผลแล้วแก้ไขข้อผิดพลาด

ดาวน์โหลดแอพนี้ xming:

http://sourceforge.net/project/downloading.php ?

ติดตั้งจากนั้นใช้การตั้งค่าในลิงค์นี้:

http://www.geo.mtu.edu/geoschem/docs/putty_install.htmlหรือทำตามขั้นตอนนี้:

การติดตั้ง / กำหนดค่า PuTTy และ Xming

เมื่อดาวน์โหลด PuTTy และ Xming ลงในพีซีแล้วให้ติดตั้งตามคำแนะนำที่เกี่ยวข้อง

การกำหนดค่า Xming

เมื่อติดตั้ง Xming แล้วให้เรียกใช้แอปพลิเคชันที่ชื่อว่า 'XLaunch' และตรวจสอบว่าการตั้งค่าเป็นไปตามที่แสดง:

  • เลือกรายการเริ่มต้นบนหน้าต่างการตั้งค่าการแสดงผลคลิกถัดไป
  • คลิกถัดไปในหน้าต่างประเภทเซสชัน
  • คลิกถัดไปที่หน้าต่างพารามิเตอร์เพิ่มเติม (ช่องทำเครื่องหมายหมายเหตุคลิปบอร์ดเป็นจริง)
  • บันทึกการกำหนดค่าและคลิกเพื่อเสร็จสิ้น

การกำหนดค่า PuTTy

หลังจากติดตั้ง PuTTy แล้วให้ดับเบิลคลิกที่ไอคอน PuTTy บนเดสก์ท็อปและกำหนดค่าตามที่แสดง:

แสดงการสร้างโปรไฟล์การเข้าสู่ระบบจากนั้นบันทึก

  • บน ssh -> X11 คลิกที่ช่องทำเครื่องหมายเพื่อเปิดใช้งานการส่งต่อ X11
  • บน X display location textbox พิมพ์ localhost: 0.0

บันทึกโปรไฟล์จากนั้นเชื่อมต่อจากระยะไกลไปยังเซิร์ฟเวอร์เพื่อทดสอบ

ไชโย !!!


โปรดใส่ข้อมูลที่จำเป็นจากลิงก์ในคำตอบเพราะอาจจะตายในที่สุดทำให้คำตอบนั้นไร้ประโยชน์
plamut

3

มีหลายวิธีในการทำเช่นนี้ ฉันทำสิ่งที่สะดวกสำหรับฉันด้านล่างและทำงานได้ดีเสมอ

  1. บนเซิร์ฟเวอร์ระยะไกลตรวจสอบให้แน่ใจว่าได้ติดตั้ง xorg-x11-xauth, xorg-x11-font-utils, xorg-x11-font
  2. เรียกใช้เซิร์ฟเวอร์ Xming บนเดสก์ท็อปท้องถิ่นของคุณ
  3. บนผงสำหรับอุดรูก่อน ssh ไปยังเซิร์ฟเวอร์ให้เปิดใช้งานการส่งต่อ X11 และตั้งค่าตำแหน่งการแสดงผลเป็น localhost: 0.0
  4. บนเซิร์ฟเวอร์ไฟล์. Xauthority ถูกสร้างขึ้นและสังเกตว่าตัวแปร DISPLAY ถูกตั้งค่าไว้แล้ว

    $ xauth รายการ

    $ xauth เพิ่ม

หากต้องการทดสอบให้พิมพ์ xclock หรือ xeyes

หมายเหตุ : ในการเปลี่ยนผู้ใช้ให้คัดลอกไฟล์. Xauthority ไปยังโฮมไดเร็กทอรีของผู้ใช้ที่เกี่ยวข้องและส่งออกตัวแปร DISPLAY จากผู้ใช้นั้นด้วย


0

ฉันมีปัญหาเดียวกันใน Ubuntu 14.04.01 เมื่อฉันพยายามติดตั้ง JDK 8 และ Netbeans หากฉันเปิดสคริปต์ภายในเทอร์มินัล Byobu (อาจจะเกิดกับหน้าจอเหมือนกัน)

เพียงออกจาก Byobu และ (ในเทอร์มินัลกราฟิก) เรียกใช้สคริปต์


0

การตรวจสอบเบื้องต้น

1) เมื่อคุณส่งออกจอแสดงผลไปยังเครื่องอื่นตรวจสอบให้แน่ใจว่าคุณได้ป้อนคำสั่งxhost +บนเครื่องนั้น คำสั่งนี้อนุญาตให้เครื่องอื่นส่งออก DISPLAY บนเครื่องนี้ อาจมีข้อ จำกัด ด้านความปลอดภัยเพียงแค่ทราบเกี่ยวกับเรื่องนี้ ต้องตรวจสอบssh -X MachineIPจะไม่ต้องxhost +?

2) บางครั้งJCONSOLEจะไม่แสดงกระบวนการทั้งหมดเนื่องจากกระบวนการ JVM เหล่านั้นอาจทำงานกับผู้ใช้รายอื่นและคุณกำลังส่งออกจอแสดงผลกับผู้ใช้รายอื่น ติดตามกันดีกว่าCD_DIR>sudo ./jconsole

3) ใน WAS (WEBSPHERE); jconsole จะไม่สามารถเชื่อมต่อกระบวนการเซิร์ฟเวอร์ java ได้ในเวลานั้นเพียงแค่ไปที่ลิงค์จากนั้นลองเชื่อมต่อ สิ่งนี้ได้ผลสำหรับฉัน อาจเป็นหน้านี้กำลังเริ่มต้นตัวแปรบางตัวเพื่อให้ jconsole เชื่อมต่อกับเซิร์ฟเวอร์นั้น

คอนโซล WAS> แอ็พพลิเคชันเซิร์ฟเวอร์> เซิร์ฟเวอร์ 1> นิยามกระบวนการ> Java Virtual Machine


ฉันประสบปัญหาเดียวกันกับ AIX (ที่มีเฉพาะอินเทอร์เฟซบรรทัดคำสั่งเท่านั้นไม่มี UI ของจอแสดงผล) ฉันแก้ไขโดยการติดตั้ง

NX Client สำหรับ Windows

ขั้นตอนที่ 1: ผ่านเครื่อง Windows นั้นฉันเชื่อมต่อกับกล่องยูนิกซ์ที่มีคอนโซล GUI
ขั้นตอนที่ 2: SSH ไปยังกล่อง AIX จากกล่อง UNIX นั้น
ขั้นตอนที่ 3: ตั้งค่า DISPLAY เช่น "export DISPLAY = UNIXMACHINE: NXClientPORTConnectedMentionedOnTitle"
ขั้นตอนที่ 4: ตอนนี้ถ้าเราเปิดโปรแกรมใด ๆ ที่ต้องใช้ DISPLAY; มันจะเปิดตัวในกล่อง UNIX นี้

VNC

หากคุณติดตั้ง VNC บนกล่อง UNIX ที่มีการแสดงผล จากนั้นไม่จำเป็นต้องใช้ Windows และ NX Client ขั้นตอนที่ 1: ใช้ VNC เพื่อเชื่อมต่อกับกล่อง Unix ที่มีคอนโซล GUI
ขั้นตอนที่ 2: SSH ไปยังกล่อง AIX จากกล่อง UNIX นั้น
ขั้นตอนที่ 3: ตั้งค่า DISPLAY เช่น "export DISPLAY = UNIXMACHINE: VNCPORT"
ขั้นตอนที่ 4: ตอนนี้ถ้าเราเปิดโปรแกรมใด ๆ ที่ต้องใช้ DISPLAY; มันจะเปิดตัวในกล่อง UNIX นี้

อื่น

ขั้นตอนที่ 1: SSH ไปยังกล่อง AIX จากกล่อง UNIX นั้น
ขั้นตอนที่ 2: ตั้งค่าการแสดงเช่น "export DISPLAY = UNIXMACHINE: VNCPORT"
ขั้นตอนที่ 3: ตอนนี้ถ้าเราเปิดโปรแกรมใด ๆ ที่ต้องใช้ DISPLAY; มันจะเปิดตัวในกล่อง UNIX นี้


0

สำหรับผู้ที่พยายามรับแอปพลิเคชัน X Window ที่ทำงานจาก Windows จาก Linux:

สิ่งที่ใช้ได้ผลสำหรับฉันคือการตั้งค่าเซิร์ฟเวอร์ xming บนเครื่อง windows ของฉันตั้งค่าตัวเลือกการส่งต่อ X11 ในผงสำหรับอุดรูเมื่อฉันเชื่อมต่อกับโฮสต์ linux และใส่ที่อยู่ ip ของ windows ด้วยพอร์ตการแสดงผลจากนั้นตัวแปรการแสดงผลพร้อมที่อยู่ IP ของ windows ของฉัน: 0.0

อย่าลืมเพิ่มที่อยู่ IP ของโฮสต์ linux ลงในไฟล์ X0.hosts เพื่อให้แน่ใจว่าเซิร์ฟเวอร์ xming ยอมรับการรับส่งข้อมูลจากโฮสต์นั้น ใช้เวลาสักพักเพื่อคิดออก


-3

อย่าลืมรัน "host +" บนเครื่องแสดงผล "home" ของคุณและเมื่อคุณ ssh ไปที่เครื่องคุณกำลังทำ "ssh -x hostname"


14
ฉันไม่แนะนำอย่างยิ่งให้ใช้ "xhost +" เนื่องจากหากปิดใช้งานความปลอดภัยทั้งหมดบนเซิร์ฟเวอร์ X ของคุณอย่างมีประสิทธิภาพ ssh ฉลาดพอที่จะใช้ xauth เพื่อตั้งค่าการพิสูจน์ตัวตน X11 โดยอัตโนมัติดังนั้นจึงไม่จำเป็นต้องใช้ xhost
Wichert Akkerman

นี่ควรเป็นความคิดเห็นไม่ใช่โพสต์ เพียงเพราะคุณไม่สามารถแสดงความคิดเห็นได้ไม่ได้หมายความว่าคุณควรจะโพสต์ที่ไม่ดี
Elliot อ.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.