หลังจากพัฒนามาสี่เดือน ในที่สุดก็ได้เปิดตัวเวอร์ชันเสถียรของโปรโตคอล Wayland 1.26 กลไกการสื่อสารระหว่างกระบวนการ และไลบรารีต่างๆ แล้ว เวอร์ชัน 1.26 นี้สามารถใช้งานร่วมกับเวอร์ชัน 1.x ได้ในระดับ API และ ABI และส่วนใหญ่ประกอบด้วยการแก้ไขข้อผิดพลาดและการอัปเดตโปรโตคอลเล็กน้อย โครงการนี้เผยแพร่ภายใต้ใบอนุญาต MIT (ดูภาพประกอบอ้างอิง) เซิร์ฟเวอร์ Weston ซึ่งเป็นส่วนเสริมที่ให้โค้ดและตัวอย่างการใช้งาน Wayland ในสภาพแวดล้อมเดสก์ท็อปและระบบฝังตัว ได้รับการพัฒนาในรอบการพัฒนาที่แยกต่างหาก
การเปลี่ยนแปลงที่สำคัญในโปรโตคอล:
- เพิ่มอีเวนต์ wl_pointer.warp ซึ่งช่วยให้คุณได้รับการแจ้งเตือนเกี่ยวกับตำแหน่งใหม่ของตัวชี้โดยไม่ต้องจัดการกับอีเวนต์ wl_pointer.motion ที่เกิดจากกิจกรรมของผู้ใช้
- เพิ่มคำขอ wl_fixes.ack_global_remove ซึ่งออกแบบมาเพื่อส่งการยืนยันไปยังตัวจัดการคอมโพสิตว่าไคลเอ็นต์ได้หยุดประมวลผลเหตุการณ์แล้ว เพื่อป้องกันสภาวะการแข่งขัน (race condition) เมื่อลบเหตุการณ์ส่วนกลาง หลังจากได้รับการยืนยันจากไคลเอ็นต์ทั้งหมดแล้ว ตัวจัดการคอมโพสิตจึงจะสามารถลบตัวจัดการที่เกี่ยวข้องกับเหตุการณ์นั้นออกจากฝั่งของตนได้
- เพิ่มฟังก์ชัน wl_display_remove_socket_fd() เพื่อลบซ็อกเก็ตที่เพิ่มไว้ก่อนหน้านี้ผ่านการเรียกใช้ wl_display_add_socket_fd()
- ในโหมดดีบัก WAYLAND_DEBUG เวลาจะถูกบันทึกในรูปแบบ "HH:MM:ss.xxxxxx" ซึ่งช่วยให้การวิเคราะห์และเปรียบเทียบข้อมูลบันทึกทำได้ง่ายขึ้น
ส่วนขยายโปรโตคอลที่เพิ่มเข้ามาตั้งแต่ Wayland เวอร์ชันก่อนหน้า ซึ่งเสริมโปรโตคอลหลักของ Wayland และมีให้ในชุด Wayland-Protocols แยกต่างหาก:
- xx-fractional-scale — สำหรับการปรับขนาดระบบพิกัดเชิงตรรกะ ซึ่งค่าต่างๆ จะถูกระบุเป็นจำนวนเต็ม เพื่อปรับปรุงความแม่นยำในการกำหนดตำแหน่งและเพิ่มความละเอียดของพิกัดเชิงตรรกะลงไปถึงระดับพิกเซลแต่ละพิกเซล คุณสมบัตินี้ช่วยแก้ปัญหาความละเอียดที่จำกัดของระบบพิกัดเชิงตรรกะ ซึ่งไม่เพียงพอสำหรับการกำหนดตำแหน่งในระดับพิกเซลแต่ละพิกเซล ซึ่งจำเป็นสำหรับการใช้งานการปรับขนาดแบบเศษส่วนอย่างเต็มรูปแบบ
- xx-cutouts — เพื่อรับข้อมูลเกี่ยวกับส่วนที่เว้าแหว่งบนหน้าจอ (ตัวอย่างเช่น พื้นที่ใต้กล้องหน้าบนหน้าจอสมาร์ทโฟน)
- xx-zones — สำหรับการสร้างและเพิ่มหน้าต่างระดับบนสุดลงใน "โซน" ซึ่งเป็นสภาพแวดล้อมที่มีพื้นที่พิกัดของตนเอง โปรโตคอลนี้อนุญาตให้จัดเรียงหน้าต่างอย่างมีตรรกะ โดยที่แต่ละหน้าต่างจะถูกกำหนดตำแหน่งสัมพันธ์กับหน้าต่างอื่นๆ ทุกบาน
- xx-keyboard-filter — สำหรับไคลเอ็นต์เพื่อดักจับเหตุการณ์แป้นพิมพ์ที่เลือก ปรับเปลี่ยนเหตุการณ์อินพุต หรือบล็อกเหตุการณ์บางอย่างไม่ให้ส่งผ่านไปยังพื้นผิว Wayland ที่กำลังโฟกัสอยู่
- โปรโตคอล xdg-session-management ได้ถูกเพิ่มเข้าไปในหมวดหมู่การทดสอบแล้ว ซึ่งช่วยให้สามารถกู้คืนสถานะและตำแหน่งของหน้าต่างจากเซสชันที่ถูกขัดจังหวะในสภาพแวดล้อมที่ใช้โปรโตคอล Wayland ได้ เช่น หลังจากเกิดข้อผิดพลาดแบบคอมโพสิต เซิร์ฟเวอร์ หรือแอปพลิเคชัน
- โปรโตคอล "linux-dmabuf" ได้รับการอัปเดตเพื่อรองรับระบบมัลติ GPU แล้ว ในระบบดังกล่าว ไคลเอ็นต์สามารถเจรจาคอมโพสิตได้ เซิร์ฟเวอร์ ควรใช้ GPU รุ่นใด
- โปรโตคอลการจัดการสีเวอร์ชัน 1 ได้รับการอัปเดตเพื่อรองรับเมตาเดตาภาพ BT.2100 สำหรับใช้ในคอมโพสิต เซิร์ฟเวอร์ ตัวจัดการเฉพาะที่ช่วยให้สามารถแสดงเนื้อหา HDR ที่สร้างขึ้นได้อย่างถูกต้อง Windows.
เหตุการณ์สำคัญที่เกี่ยวข้องกับเวย์แลนด์นับตั้งแต่ฉบับที่แล้วได้รับการตีพิมพ์:
- Cinnamon รองรับ Wayland อย่างเต็มรูปแบบ
- ในไลบรารี ANGLE ที่ใช้ใน Chrome และ Androidเพิ่มการรองรับ Wayland แล้ว
- เมื่อใช้ Wayland นั้น KDE จะรองรับการกู้คืนเซสชันและใช้โปรโตคอล Wayland xx-fractional-scale-v2 สำหรับการปรับขนาดแบบเศษส่วน
- มีการสร้างเวอร์ชันของไดรเวอร์ Synaptics X.Org สำหรับสภาพแวดล้อมที่ใช้ Wayland แล้ว
- ได้เริ่มการตรวจสอบความพร้อมสำหรับแพลตฟอร์ม VFX และแอนิเมชั่นในการเปลี่ยนจาก X11 ไปเป็น Wayland แล้ว
- การทดสอบเซิร์ฟเวอร์คอมโพสิต Xfwl4 จากโครงการ Xfce ได้เริ่มต้นขึ้นแล้ว
- ส่วนติดต่อผู้ใช้ของ Unity ได้รับการสร้างขึ้นใหม่โดยใช้ Wayfire และ Libadwaita
- อัปเดตเซิร์ฟเวอร์คอมโพสิตและสภาพแวดล้อมเดสก์ท็อป: COSMIC 1.3.0, Weston 16, Phosh 0.56, Nourish 1.0.0, miracle-wm 0.10, KDE Plasma 6.7, labwc 0.20, Sway 1.2, Wayland Maker 0.8, Hyprland 0.55, Niri 26.04, LXQt 2.4.0, Cage 0.3
โปรดจำไว้ว่า Wayland เป็นโปรโตคอลสำหรับการสื่อสารระหว่างเซิร์ฟเวอร์คอมโพสิตติ้งและแอปพลิเคชันที่ทำงานอยู่บนนั้น ไคลเอนต์จะแสดงผลหน้าต่างของตนในบัฟเฟอร์แยกต่างหาก โดยส่งข้อมูลการอัปเดตไปยังเซิร์ฟเวอร์คอมโพสิตติ้ง เซิร์ฟเวอร์ซึ่งจะรวมเนื้อหาของบัฟเฟอร์แอปพลิเคชันแต่ละรายการเข้าด้วยกันเพื่อสร้างผลลัพธ์สุดท้าย โดยคำนึงถึงความแตกต่างเล็กน้อยที่อาจเกิดขึ้น เช่น การทับซ้อนของหน้าต่างและความโปร่งใส กล่าวอีกนัยหนึ่ง เซิร์ฟเวอร์คอมโพสิตไม่ได้มี API สำหรับการเรนเดอร์องค์ประกอบแต่ละรายการ แต่จะทำงานเฉพาะกับหน้าต่างที่เรนเดอร์ไว้ล่วงหน้าเท่านั้น ซึ่งจะช่วยขจัดปัญหาการบัฟเฟอร์ซ้ำซ้อนเมื่อใช้ไลบรารีระดับสูง เช่น GTK และ Qt ซึ่งจัดการงานการประกอบเนื้อหาของหน้าต่าง
Wayland ช่วยแก้ปัญหาด้านความปลอดภัยของ X11 ใน X.Org Server ได้หลายประการ เนื่องจากแตกต่างจาก X.Org Server ตรงที่ Wayland แยกการรับส่งข้อมูลสำหรับแต่ละหน้าต่าง ไม่อนุญาตให้ไคลเอ็นต์เข้าถึงเนื้อหาของหน้าต่างไคลเอ็นต์อื่น และไม่อนุญาตให้ดักจับเหตุการณ์การรับส่งข้อมูลที่เกี่ยวข้องกับหน้าต่างอื่น (XLibre XServer ใช้ส่วนขยาย X11 ที่เรียกว่า Xnamespace ซึ่งให้การแยกไคลเอ็นต์ผ่านการแยกที่ระดับเนมสเปซ) การสนับสนุนการทำงานโดยตรงกับ Wayland นั้นถูกนำมาใช้ในแพลตฟอร์มส่วนใหญ่ที่ใช้ใน X.Org Server Linux ไลบรารีด้านกราฟิก ได้แก่ GTK, Qt, SDL, FLTK, wxWidgets, Clutter และ EFL (Enlightenment Foundation Library)
การโต้ตอบกับฮาร์ดแวร์ใน Wayland/Weston เช่น การเริ่มต้นระบบ การสลับโหมดวิดีโอ (การตั้งค่าโหมด DRM) และการจัดการหน่วยความจำ (GEM สำหรับ i915 และ TTM สำหรับ Radeon และ Nouveau) สำหรับการ์ดกราฟิก สามารถทำได้โดยตรงผ่านโมดูลระดับเคอร์เนล ซึ่งไม่จำเป็นต้องใช้สิทธิ์ผู้ใช้ระดับสูง เพื่อให้มั่นใจว่าแอปพลิเคชัน X11 มาตรฐานจะทำงานในสภาพแวดล้อมที่ใช้ Wayland จึงมีการใช้คอมโพเนนต์ XWayland (Device-Dependent X) DDX ซึ่งทำงานคล้ายกับ Xwin และ Xquartz สำหรับ Win32 และ macOS.
ที่มา: opennet.ru
