นักพัฒนาคนหนึ่งได้สาธิตเรียบร้อยแล้วว่า X11 สามารถจัดการกับการปรับขนาดแบบเศษส่วนและการตั้งค่าหลายจอภาพที่มี DPI ต่างกันได้ ซึ่งท้าทายความเชื่อที่แพร่หลายว่าฟีเจอร์เหล่านี้เป็นไปไม่ได้บนโปรโตคอลเซิร์ฟเวอร์แสดงผลที่มีอายุมากแล้ว การพิสูจน์แนวคิดนี้เกี่ยวข้องกับการวาดวงกลมขนาด 2 นิ้วที่สม่ำเสมอบนหลายจอภาพที่มีความละเอียดและความหนาแน่นของพิกเซลต่างกัน
การสาธิตใช้จอแสดงผลสามแบบที่แตกต่างกัน: หน้าจอแล็ปท็อปที่ความละเอียด 2880x1800 จอภาพเดสก์ท็อปที่ 2560x1440 และทีวี 4K ที่ 3840x2160 โดยการสอบถาม extension RandR ของ X11 เพื่อหาขนาดทางกายภาพและจำนวนพิกเซล แอปพลิเคชันสามารถรักษาขนาดทางกายภาพเดียวกันบนทั้งสามหน้าจอได้สำเร็จ
ข้อมูลจำเพาะการแสดงผลของการทดสอบ:
- แล็ปท็อป: ความละเอียด 2880x1800 ขนาดจริง 302mm x 189mm
- จอภาพเดสก์ท็อป: ความละเอียด 2560x1440 ขนาดจริง 590mm x 334mm
- จอแสดงผล TV: ความละเอียด 3840x2160 ขนาดจริง 1600mm x 900mm
การใช้งานทางเทคนิคแสดงความสามารถที่ซ่อนอยู่ของ X11
นักพัฒนาใช้ OpenGL ร่วมกับ extension XRandR ของ X11 เพื่อรวบรวมข้อมูลหน้าจอและคำนวณปัจจัยการปรับขนาดที่เหมาะสม โค้ดจะฟังเหตุการณ์การกำหนดค่าหน้าต่างและปรับการเรนเดอร์โดยอัตโนมัติตามจอภาพที่หน้าต่างปรากฏอยู่ เมื่อลากระหว่างจอภาพ วงกลมจะรักษาขนาดทางกายภาพ 2 นิ้วโดยการคำนวณรัศมีพิกเซลใหม่ตาม DPI ของแต่ละหน้าจอ
วิธีการนี้ทำงานโดยการรวมข้อมูลจาก XRROutputInfo (ซึ่งให้ข้อมูลขนาดทางกายภาพ) และ XRRCrtcInfo (ซึ่งให้ข้อมูลขนาดพิกเซลและตำแหน่ง) จากนั้นแอปพลิเคชันจะคำนวณพิกเซลต่อมิลลิเมตรและปรับการเรนเดอร์ตามนั้น
XRandR (X Resize and Rotate): extension ของ X11 ที่ให้ข้อมูลเกี่ยวกับจอแสดงผลที่เชื่อมต่อและคุณสมบัติของมัน
API หลักของ X11 ที่ใช้สำหรับการปรับขนาด:
XRRGetScreenResourcesCurrent()
- รับการกำหนดค่าการแสดงผลXRRGetOutputInfo()
- ดึงข้อมูลขนาดทางกายภาพของจอแสดงผลXRRGetCrtcInfo()
- รับขนาดพิกเซลและตำแหน่ง- เหตุการณ์
ConfigureNotify
- ตรวจจับการเคลื่อนย้ายหน้าต่างระหว่างจอมอนิเตอร์
![]() |
---|
การสาธิตเชิงทดลองของการรักษาขนาดที่สม่ำเสมอในการเรนเดอร์กราฟิกข้ามจอภาพต่างๆ คล้ายกับการบรรลุ fractional scaling ใน X11 |
ชุมชนอภิปรายความท้าทายของการปรับขนาดในโลกจริง
แม้ว่าการสาธิตจะพิสูจน์ว่าการปรับขนาดพื้นฐานเป็นไปได้ แต่ชุมชนนักพัฒนาชี้ให้เห็นความท้าทายที่ซับซ้อนกว่าที่ทำให้การปรับขนาดใน X11 เป็นปัญหาในทางปฏิบัติ ปัญหาหลักเกิดขึ้นกับแอปพลิเคชันที่มีอยู่แล้วซึ่งไม่ได้ถูกออกแบบมาเพื่อรองรับการปรับขนาด โดยเฉพาะเมื่อต้องจัดการกับกราฟิกแรสเตอร์ ไอคอน และองค์ประกอบ UI ที่ต้องการความแม่นยำ
ส่วนที่ยากของการปรับขนาดคือการวาดองค์ประกอบ UI เช่น ไอคอนแรสเตอร์หรือเส้นขนาด 1px ให้ดูไม่เบลอ
หน้าต่างที่ขยายข้ามหลายจอภาพที่มี DPI ต่างกันยังคงเป็นปัญหา เนื่องจากส่วนต่างๆ ของหน้าต่างเดียวกันอาจปรากฏในขนาดที่แตกต่างกัน เซิร์ฟเวอร์แสดงผลสมัยใหม่อย่าง Wayland จัดการเรื่องนี้โดยใช้การสร้างเสมือน DPI ซึ่ง compositor จัดการการแปลงการปรับขนาดแทนที่จะปล่อยให้แอปพลิเคชันแต่ละตัวจัดการเอง
บริบทที่กว้างขึ้นของวิวัฒนาการเซิร์ฟเวอร์แสดงผล
การอภิปรายเผยให้เห็นว่าทำไมชุมชนเดสก์ท็อป Linux จึงเปลี่ยนไปใช้ Wayland แม้ว่า X11 จะมีความสามารถทางทฤษฎี แม้ว่า X11 จะสามารถรองรับฟีเจอร์ขั้นสูงผ่าน extension ได้ในทางเทคนิค แต่การใช้งานจริงต้องการความพยายามอย่างมากจากทั้งนักพัฒนา toolkit และผู้เขียนแอปพลิเคชัน แอปพลิเคชันที่มีอยู่หลายตัวก็ไม่ได้ใช้งานการรองรับการปรับขนาดที่เหมาะสม
compositor ของ Wayland ตอนนี้รองรับการปรับขนาดแบบเศษส่วนผ่านโปรโตคอลเฉพาะ โดยทั้ง Qt6 และ GTK4 ได้ใช้งานการรองรับที่เหมาะสมแล้ว อย่างไรก็ตาม การนำไปใช้ยังไม่สมบูรณ์ โดยแอปพลิเคชันบางตัวยังคงใช้วิธีการปรับขนาดแบบเก่าที่อาจทำให้เกิดความเบลอ
การสาธิตนี้เป็นการเตือนใจว่าข้อจำกัดทางเทคนิคมักจะเกี่ยวกับการประสานงานของระบบนิเวศมากกว่าข้อจำกัดของโปรโตคอลพื้นฐาน แม้ว่า X11 อาจมีความสามารถมากกว่าที่เชื่อกันโดยทั่วไป แต่การตัดสินใจของชุมชนนักพัฒนาที่จะมุ่งความพยายามไปที่ Wayland สะท้อนถึงการพิจารณาเชิงปฏิบัติเกี่ยวกับการสร้างประสบการณ์เดสก์ท็อปที่เหนียวแน่นและทันสมัย
การสร้างเสมือน DPI: เทคนิคที่เซิร์ฟเวอร์แสดงผลจัดการการคำนวณการปรับขนาดทั้งหมด โดยนำเสนอแอปพลิเคชันด้วยระบบพิกัดที่สม่ำเสมอโดยไม่คำนึงถึงความละเอียดหน้าจอจริง
อ้างอิง: forbidden secrets of ancient X11 scaling technology revealed