Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ซอฟต์แวร์ >> เครื่องเสมือน

แก้ไขปัญหา VirtualBox Black Screen บน Linux หลังจากไม่ได้ใช้งาน

VirtualBox, Linux distributions, black screen after inactivity

อัปเดต: 30 ตุลาคม 2024

การรัน OS เป็น VM เป็นเรื่องมหัศจรรย์ อยากลองอะไรแต่อยากไม่มีฮาร์ดแวร์สำรอง? ไม่มีปัญหา เปิด hypervisor สร้าง VM และภายในทดสอบสิ่งที่ต้องการ Windows, Linux, DOS หรือสิ่งโบราณและแปลกประหลาดกว่านั้น ความมหัศจรรย์นี้นำความซับซ้อนมาเล็กน้อย เช่น display configuration, 3D acceleration และปัญหาที่เกี่ยวข้อง

ผมเคยพูดถึงปัญหา black screen ของ Linux ใน VirtualBox ไปแล้ว คู่มือนั้นยังคงใช้ได้ แตตอนนี้ผมเจอ issue ใหม่ ปัญหานี้เกิดขึ้นภายในระบบที่กำลังรัน ไม่ใช่ตอน login เกิดอะไรขึ้นคือ คุณ boot distro ปล่อยไว้ กลับมาหลังจาก idle เป็นระยะหนึ่ง หน้าจอจะ timeout และมืด/ดำใน guest OS ปัญหาคือเมื่อพยายาม "wake" มันขึ้น ด้วยการกระทำใดๆ (เช่นเลื่อนเมาส์) หน้าจอจะค้างดำ การ reboot ช่วยได้ แต่ไม่ใช่ solution มาพูดคุยเพิ่มเติมกัน

Linux display configuration

หากต้องการรัน Linux distro เป็น guest ใน VirtualBox คุณมีตัวเลือกหลายอย่าง แรก สามารถใช้ 3D acceleration หรือไม่ ก่อนหน้านี้มีให้เฉพาะติดตั้ง Guest Additions แต่มีสถานการณ์ (security) ที่ไม่อยากติดตั้ง บวกบาง distro ไม่ cooperate กับ full driver stack ที่มาพร้อม Additions หากเลือกไม่ใช้ 3D acceleration desktop จะ render โดยไม่มีการเรียก graphics card - ทำทั้งหมดด้วย software emulation

คือส่วนใหญ่ distro รับมือ software-based graphics ได้ดี บางกรณีอาจช่วย performance desktop ได้ (เชื่อหรือไม่) แตบางครั้งอาจเป็น害 การเลือกใช้ 3D หรือไม่ ยังส่งผลต่อช่วง display resolutions ที่ available ภายใน guest OS แต่ส่วนใหญ่ควร fine

บันทึกสุดท้ายเกี่ยว 3D setup หากเลือกไม่ใช้ คุณอาจอยาก disable Compositing ใน desktop environment เฉพาะ เพื่อลด software rendering overhead ตัวอย่างใน Plasma Compositor ปกติใช้ OpenGL backend และ OpenGL available จริงๆ เมื่อคุณ enable 3D acceleration ใน VirtualBox ดังนั้นหาก disable คุณอาจได้ VM responsive มากขึ้น

และตอนนี้ปัญหา

สมมติคุณรันไม่ใช้ 3D คุณอาจเจอ issue นี้: คุณปล่อยเครื่องไว้ หลัง idle หน้าจอจะดำ - บาง distro อาจใช้ screensaver แต่น้อยมากวันนี้ ปัญหาเกิดเมื่อพยายามต่อ session ปกติ เลื่อนเมาส์หรือกดคีย์บอร์ดจะทำให้หน้าจอ wake up แสดง lock screen หรือ open desktop ขึ้นกับ config นี่คือสิ่งที่เกิดกับ physical systems และควรเกิดกับ guest OS ใน VirtualBox เช่นกัน ปัญหาคือ มันไม่เกิด

VM screen ค้างดำ unresponsive วิธีแก้เดียวคือ restart machine หมายความว่าอาจสูญเสีย working session ผมเจอปัญหานี้กับหลาย distro ทุกกรณีไม่ใช้ 3D acceleration (สำหรับ 3D & black screen scenario ดู tutorial ข้างต้น) System logs ไม่แสดงอะไรเลย มาแก้กัน

Solution (หรือ workaround)

ผมรู้สึกว่า issue แสดงเฉพาะกับ default graphics controller - VMSVGA เพื่อหลีกเลี่ยง black screen ต้องเปลี่ยน controller เปิด settings ของ VM ไปที่ Display > Screen ตั้งค่า Graphics Controller dropdown เป็น VBoxVGA สำหรับผมนี่คือตัวเลือก viable เดียวที่ให้ distro ต่างๆ boot seamless ใช้ desktop ด้วย resolutions "ปกติ" (ไม่ใช่ default 800x600) และเสนอ working session ที่เสถียร

แก้ไขปัญหา VirtualBox Black Screen บน Linux หลังจากไม่ได้ใช้งาน

คุณจะสังเกต Settings window อาจบอก: Invalid settings detected เหตุผลคือมัน "บ่น" และแนะนำให้ switch กลับ default แต่ไม่ป้องกันการใช้ VM ข้อจำกัดคือไม่สามารถใช้ 3D acceleration กับ controller นี้ได้

แก้ไขปัญหา VirtualBox Black Screen บน Linux หลังจากไม่ได้ใช้งาน

ตอนนี้ boot distro resolution จะกลับเป็น default เปลี่ยนมัน - สังเกตว่า available resolutions และ aspect ratios จะต่างจาก VMSVGA เลือกที่เหมาะสม และปล่อยระบบ idle คุณจะ resume 工作ได้ กล่าวคือ virtual screen จะ wake up ถูกต้อง ผมยังไม่รู้ root cause จริงๆ แต่มี workaround นี้

ข้อสรุป

นี่คือคำตอบ ในในอุดมคติคุณไม่ควรเผชิญปัญหาแบบนี้ แต่จำได้ว่าเป็น magic คุณติดตั้ง OS ใน OS และลึกเท่าที่ชอบ หรือข้อจำกัดของ memory และ disk แต่ hey ผมแทบแน่ใจว่าบางคนอาจเจอคู่มือนี้ แต issue ของพวกเขาจะต่างออกไปนิดหน่อย ในความเป็นจริง มันเกี่ยวกับการเลือก 3D acceleration และ controller ที่เกี่ยวข้อง

ลองดูว่าการเปลี่ยน defaults ช่วยได้ไหม เล่นกับ settings จนกว่าจะพบ optimal setup รวมถึง resolutions ที่มี และ desktop speed สุดท้าย ทั้งหมดอาจเปลี่ยนหมดกับ major version ใหม่ของ VirtualBox และโปรดแน่ใจว่าใช้ Extensions Pack ที่ตรงกับ program version อย่างแม่นยำ นั่นเป็นแหล่ง conflicts, misconfigurations และ weird glitches อีกแห่ง และจบที่นี่แล้ว หวังว่าบทความช่วยได้ วันนี้ พบกันใหม่ fellow nerds

ขอแสดงความนับถือ