หาก YaST ขัดข้องขณะใช้XIO: fatal IO error 11 (Resource temporarily unavailable)งาน SSH ให้ลองใช้วิธีแก้ปัญหาของ Qt ที่ SUSE ระบุไว้ก่อนQT_XCB_GL_INTEGRATION=none yast.ssh: สำหรับระบบ SLES ที่ติดตั้งแล้วและโมดูล YaST เฉพาะ ให้ใช้ตัวแปรเดียวกันหน้าโมดูลนั้น เช่นQT_XCB_GL_INTEGRATION=none yast2 diskหากไม่สามารถเปิดแอปพลิเคชันกราฟิกได้ ให้ซ่อมแซมการส่งต่อ X11 ก่อน: เชื่อมต่อด้วยssh -Xตรวจสอบว่าเชลล์ระยะไกลมีDISPLAYค่า และตรวจสอบว่าเซิร์ฟเวอร์เปิดใช้งานการส่งต่อ X11 แล้ว
คู่มือการติดตั้ง SLES 15 SP7 ของ SUSE ได้บันทึกความล้มเหลวของ XIO ในลักษณะนี้ไว้อย่างละเอียด รวมถึงวิธีแก้ไขปัญหาด้วย Qt และทางเลือกอื่นคือ ncurses ข้อความดังกล่าวปรากฏในบริบทของการติดตั้งระยะไกล ดังนั้นให้ใช้เป็นวิธีแก้ไขเฉพาะเจาะจงสำหรับพฤติกรรม YaST-over-SSH ที่ตรงกันเท่านั้น ไม่ได้หมายความว่าความล้มเหลวในการเปิดใช้งาน YaST ทุกครั้งจะมีสาเหตุเดียวกัน การตรวจสอบด้านล่างจะแยกกรณีดังกล่าวออกจากกรณีที่เซิร์ฟเวอร์ X ในเครื่องหายไป การส่งต่อ SSH ถูกปิดใช้งาน หรือปัญหาการตรวจสอบสิทธิ์ X
1. ตรวจสอบว่าการส่งต่อ X11 ทำงานได้หรือไม่ ก่อนที่จะแก้ไขปัญหา YaST
การส่งต่อ X11 จะส่งข้อมูลหน้าต่างของแอปพลิเคชันระยะไกลผ่าน SSH ไปยังเซิร์ฟเวอร์ X บนคอมพิวเตอร์ของคุณ ดังนั้นเครื่องของคุณจึงต้องมีเซิร์ฟเวอร์ X ที่กำลังทำงานอยู่ และไคลเอนต์ SSH ต้องร้องขอการส่งต่อ บนเดสก์ท็อป X11 ให้เปิดเทอร์มินัลใหม่และเชื่อมต่อดังนี้:
ssh -X admin@server.example.com
เปลี่ยนบัญชีผู้ใช้และโฮสต์เป็นของคุณเอง หลังจากเข้าสู่ระบบแล้ว ให้รันคำสั่ง:
echo "$DISPLAY"
ค่าเช่นนี้localhost:10.0แสดงว่า SSH ได้ตั้งค่าจอแสดงผลแบบส่งต่อไว้แล้ว นี่เป็นเพียงตัวอย่าง ไม่ใช่ค่าคงที่ หมายเลขจอแสดงผลอาจแตกต่างกันไป หากเอาต์พุตว่างเปล่า ให้ล็อกเอาต์และเชื่อมต่อใหม่โดยใช้-Xหากยังคงว่างเปล่า ให้ตรวจสอบการตั้งค่า SSH ฝั่งไคลเอ็นต์และการกำหนดค่าเซิร์ฟเวอร์ในส่วนถัดไป อย่าตั้งค่าด้วยตนเองDISPLAYเป็นค่าที่คาดเดา SSH จะสร้างจอแสดงผลพร็อกซีสำหรับเซสชันนั้น
ตัวอย่างในเทอร์มินัล: เชลล์ระยะไกลมีค่า DISPLAY ที่ส่งต่อมาหลังจากเชื่อมต่อ SSH ด้วยตัวเลือก -X
หากคุณใช้ PuTTY บน Windows ให้เปิดใช้งานการส่งต่อ X11 ในการตั้งค่าการเชื่อมต่อ > SSH > X11 ของเซสชัน และตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ X ในเครื่องกำลังทำงานอยู่ คู่มือการติดตั้งของ SUSE ระบุข้อกำหนดนี้ไว้ โฮสต์ระยะไกลจะไม่สามารถแสดงหน้าต่างได้หากเครื่องในเครื่องไม่มีเซิร์ฟเวอร์ X แม้ว่าการเข้าสู่ระบบ SSH จะสำเร็จก็ตาม
2. ตรวจสอบเซิร์ฟเวอร์ SSH ของ SLES และการตรวจสอบสิทธิ์ X
บนโฮสต์ SLES ผู้ดูแลระบบสามารถตรวจสอบการกำหนดค่าของ SSH daemon ได้:
sudo grep -i '^X11Forwarding' /etc/ssh/sshd_config
command -v xauth
นโยบายเซิร์ฟเวอร์ที่มีผลบังคับใช้ต้องอนุญาตการส่งต่อ X11 และxauthต้องพร้อมใช้งานสำหรับการส่งต่อการตรวจสอบสิทธิ์ เอกสารของ SUSE X11Forwarding Yesระบุการตั้งค่าฝั่งเซิร์ฟเวอร์และหมายเหตุว่า SSH จะตั้งค่ารีโมตDISPLAYเมื่อไคลเอ็นต์เชื่อมต่อ การตั้งค่า-Xแบบง่ายๆgrepอาจพลาดการตั้งค่าในไฟล์การกำหนดค่าที่รวมอยู่หรือMatchบล็อกเงื่อนไข หากเอาต์พุตดูเหมือนจะขัดแย้งกับพฤติกรรม ให้ผู้ดูแลระบบ SSH ตรวจสอบการกำหนดค่าที่มีผลบังคับใช้แทนที่จะเพิ่มบรรทัดที่ซ้ำซ้อน
ตัวอย่างการใช้งานในเทอร์มินัล: ตรวจสอบการตั้งค่า sshd X11Forwarding และยืนยันว่ายูทิลิตี้ xauth พร้อมใช้งานบนโฮสต์ SLES แล้ว
หากคุณทำการเปลี่ยนแปลงใดๆsshd_configโปรดตรวจสอบความถูกต้องของไฟล์ก่อนที่จะโหลดเดมอนใหม่:
sudo sshd -t
sudo systemctl reload sshd
เรียกใช้คำสั่งเหล่านี้ด้วยสิทธิ์ผู้ดูแลระบบเท่านั้น ในระหว่างการทดสอบเซสชัน SSH ใหม่ ให้เปิดเซสชัน SSH ที่มีอยู่ไว้ เพื่อป้องกันไม่ให้เกิดการล็อกเอาต์หากตั้งค่าผิดพลาด จากนั้นให้ตัดการเชื่อมต่อและเชื่อมต่อใหม่ การตั้งค่าการส่งต่อจะถูกเจรจาเมื่อเซสชัน SSH เริ่มทำงาน หลีกเลี่ยงการเปิดพอร์ต TCP 6000 บนเซิร์ฟเวอร์หรือใช้xhost +เป็นทางลัด การส่งต่อ SSH ออกแบบมาเพื่อส่งข้อมูล X ผ่านอุโมงค์และจัดการการตรวจสอบสิทธิ์ การเข้าถึง X โดยตรงอาจทำให้หน้าจอถูกเปิดเผยต่อเครื่องอื่น
3. ใช้วิธีแก้ปัญหาเฉพาะของ YaST กับ Qt
หากDISPLAYมีการตั้งค่าไว้ และแอปพลิเคชัน X ที่ส่งต่อมาอีกตัวเปิดขึ้น แต่ YaST ล้มเหลวด้วยข้อผิดพลาด XIO ข้างต้น ให้ลองใช้การตั้งค่าการแทนที่สภาพแวดล้อมตามเอกสารสำหรับการเปิดใช้งานครั้งนั้น:
QT_XCB_GL_INTEGRATION=none yast.ssh
สำหรับระบบที่ติดตั้งตามปกติ ให้เรียกใช้โมดูลที่ต้องการแทนที่จะคิดว่าตัวช่วยการติดตั้งมีอยู่แล้ว ตัวอย่างเช่น เอกสารของ SUSE อธิบายรูปแบบของโมดูลนี้ไว้ดังนี้:
QT_XCB_GL_INTEGRATION=none yast2 disk
ตัวอย่างการใช้งานในเทอร์มินัล: วิธีแก้ปัญหาการผสานรวม Qt XCB ที่ SUSE จัดทำเอกสารไว้สำหรับ YaST ผ่าน SSH
ตัวแปรนี้ใช้ได้เฉพาะกับคำสั่งที่ตามมาเท่านั้น ไม่ได้เปลี่ยนแปลงการตั้งค่า Qt หรือนโยบาย SSH อย่างถาวรyast.sshคำสั่งที่ใช้จริงนั้นเป็นคำสั่งที่ SUSE ใช้สำหรับระบบการติดตั้ง ในขณะที่โฮสต์ SLES ที่ติดตั้งไว้มักจะเริ่มต้นโมดูล YaST ด้วย คำสั่ง yast2นี้ หากโมดูลอื่นล้มเหลว ให้แทนที่ชื่อโมดูลที่ระบุไว้ในเอกสารด้วยคำสั่งนี้diskอย่าใช้การตั้งค่าสภาพแวดล้อมนี้เป็นวิธีแก้ปัญหาสำหรับช่องว่างเปล่าDISPLAYหรือสำหรับไคลเอ็นต์ที่ไม่มีเซิร์ฟเวอร์ X
4. ใช้ส่วนติดต่อข้อความของ YaST เมื่อไม่จำเป็นต้องใช้หน้าต่าง
หากคุณต้องการดำเนินการด้านการบริหารจัดการเท่านั้นและไม่ต้องการหน้าต่างกราฟิก ให้ใช้ส่วนติดต่อ ncurses ของ YaST ในเทอร์มินัล SSH สำหรับโมดูลดิสก์ เอกสารของ SUSE ระบุไว้ดังนี้:
yast2 disk --ncurses
นอกจากนี้ คุณยังสามารถร้องขอการใช้งานแบ็กเอนด์ ncurses สำหรับโมดูลได้โดยตรง:
YUI_PREFERRED_BACKEND=ncurses yast2 disk
ตัวอย่างการใช้งานในเทอร์มินัล: เรียกใช้โมดูลดิสก์ YaST โดยใช้แบ็กเอนด์ ncurses เมื่อไม่จำเป็นต้องใช้ GUI ที่ส่งต่อมา
อินเทอร์เฟซแบบข้อความหลีกเลี่ยงการส่งต่อ X11 โดยสิ้นเชิง และมักเป็นตัวเลือกที่ง่ายที่สุดสำหรับเซิร์ฟเวอร์ระยะไกล มันยังคงเป็น YaST และยังคงเปลี่ยนแปลงการกำหนดค่าระบบ โปรดตรวจสอบการเปลี่ยนแปลงดิสก์ พาร์ติชั่น ไฟร์วอลล์ และเครือข่ายอย่างรอบคอบก่อนยืนยัน สำหรับระบบการติดตั้ง SLES ทาง SUSE กล่าวว่า YaST มีอินเทอร์เฟซ ncurses เมื่อไม่มีเซิร์ฟเวอร์ X ในเครื่อง
ตรวจสอบการแก้ไข
เปิดเซสชัน SSH ใหม่โดยใช้ คำสั่ง ssh -X`ssh_name` ตรวจสอบecho "$DISPLAY"ว่า `ssh_name` ไม่ว่างเปล่า จากนั้นเรียกใช้ YaST โดยใช้คำสั่งที่เหมาะสม หากสำเร็จ หน้าต่าง YaST จะปรากฏบนเดสก์ท็อปในเครื่อง หรือโมดูล ncurses จะเปิดขึ้นในเทอร์มินัลหากคุณเลือกแบ็กเอนด์นั้น หากการส่งต่อทำงานได้ปกติ แต่ข้อผิดพลาด XIO ยังคงอยู่หลังจากแก้ไขด้วย Qt แล้ว ให้บันทึกข้อผิดพลาดในเทอร์มินัลทั้งหมดและตรวจสอบบันทึกการเผยแพร่ SLES หรือฐานความรู้การสนับสนุน SUSE สำหรับปัญหาเฉพาะรุ่น ขั้นตอนนี้ไม่สามารถระบุข้อบกพร่องของ Qt หรือ YaST ที่ไม่เกี่ยวข้องจากส่วนของข้อผิดพลาดเพียงอย่างเดียวได้
ข้อมูลอ้างอิงอย่างเป็นทางการ