به نام خدا

توضیحاتی در مورد Wayland

ویلند تنها یک پروتکل و یک معماری برای مدیریت پنجره هاست. هرکس میتواند یک مدیر پنجره به کمک پروتکل ویلند پیاده سازی کند.

در ویلند مدیر پنجره و سرور با یکدیگر اذغام شده اند (تحت عنوان Compositor)

 

در نتیجه Compostior وظیفه ی دریافت request های کلاینت ها را در قالب پروتکل ویلند دارد.

Compostior باید با ادغام پنجره ها خروجی نهایی را نمایش دهد همچنین امکان کنترل پنجره ها امکان جا به جایی ایجاد حالت پنجره ها به صورت استک و یا tail (کاشی) نیز بر عهده ی Compostior میباشد.

 

به عنوان نمونه swc یک Compostior بسیار ساده است که از روش tail برای نمایش پنجره ها استفاده میکند. همچنین این برنامه سعی کرده که مدیریت پنجره را در یک لایه بالاتر هندل کند.

Compostior که گنوم از آن استفاده میکند Mutter نام دارد

 

هرکسی میتواند Compostior خودش را بنویسید.

نکته ی دیگری که باید به آن توجه شود این است که ویلند هیچ API برای Render ندارد (در حالیکه در سیستم پنچره ی ایکس برای رندر api در نظر گرفته شده). در ویلند Compostior از کلاینت میخواهد همه ی فرایند رندر را به دلخواه توسط خودش انجام شود و نتیجه ی آن را در یک بافر مشترک قرار دهد. کلاینت موظف است که آدرس بافر خود را به surface که قبلا ساخته attach کند و پس از رندر نهایی با Commit کردن آن را به Compostior اعلام کند. کلاینت میتواند از هر ابزاری برای رندر استفاده کند.

 

همچنین به کمک اکستنشن هایی که برای wayland توسعه یافته امکان ایجاد مستقیم بافر روی حافظه ی GPU امکان پذیر است.

در ویلند به window ها surface گفته میشود.

به پیام هایی که از سمت کلانیت به Compostior ارسال میشود request و به پیام هایی که از Compostior به کلاینت ارسال میشود event گفته میشود.

ارتباط بین Compostior و کلاینت ها از طریق یونیکس سوکت انجام میشود که در آدرس زیر توسط Compostior ساخته میشود.

/run/user/1000/wayland-0

برای سادگی پیاده سازی ارتبازط کلاینت و Compostior از یک لایبراری به نام libwayland-client استفاده میشود.

 

منابع:
https://bugaevc.gitbooks.io/writing-wayland-clients/content/

https://gaultier.github.io/blog/wayland_from_scratch.html#wayland-basics

https://github.com/michaelforney/swc