XCB

تستخدم عملاء X11 بروتوكول XCB للتواصل مع خادم X.
نظرة أكثر شمولاً على حزمة الرسومات في نظام لينكس
تستخدم البرامج عادةً GTK أو FLTK أو Qt لعناصر واجهة المستخدم الرسومية الخاصة بها .
نظرة أكثر شمولاً على مكونات نظام التشغيل لأجهزة الكمبيوتر المنزلية.

XCB ( ربط بروتوكول X بلغة C ) هي مكتبة تُنفّذ جانب العميل من بروتوكول خادم العرض X11 . كُتبت XCB بلغة البرمجة C وتُوزّع بموجب ترخيص MIT . بدأ المشروع عام 2001 على يد بارت ماسي، ويهدف إلى استبدال Xlib .

ملخص

صُممت مكتبة XCB كبديل أصغر حجمًا وأكثر حداثة لمكتبة Xlib، التي كانت سابقًا المكتبة الرئيسية المكتوبة بلغة C للتواصل مع نظام نوافذ X، وذلك بالتزامن مع عملية إصلاح شاملة لتطبيق X جرت خلال أوائل العقد الأول من القرن الحادي والعشرين. [ 2 ] تتمثل الأهداف الرئيسية لمكتبة XCB فيما يلي:

  • تقليل حجم المكتبة وتعقيدها
  • توفير الوصول المباشر إلى بروتوكول X11

يتحقق تقليص الحجم المطلوب بشكل أساسي عن طريق حصر نطاق XCB في معالجة بروتوكول X وحذف وظائف Xlib، مثل مكتبة الأدوات المساعدة الواسعة، التي لم تستخدمها التطبيقات إلا نادرًا. ينتج عن ذلك انخفاض حجم المكتبة المُجمَّعة بمقدار ثلاثين ضعفًا (حتى عام 2004). [ 3 ] تشمل الأهداف الثانوية جعل واجهة C غير متزامنة ، وتسهيل تعدد الخيوط بشكل أفضل ، وتيسير تنفيذ الإضافات (عبر أوصاف بروتوكول XML ).

تُكتب أوصاف البروتوكولات الأساسية والإضافية بلغة XML ، بينما يقوم برنامج مكتوب بلغة بايثون بإنشاء روابط C. (استخدمت الإصدارات السابقة XSLT و M4 ).

يتمثل هدف آخر في القدرة على استخدام أوصاف البروتوكول هذه لإنشاء وثائق البروتوكول، والمزيد من روابط اللغات، ونماذج الخادم.

عمل ماسي وآخرون على إثبات صحة أجزاء رئيسية من XCB رسميًا باستخدام تدوين Z. [ 4 ] (من المعروف منذ فترة طويلة أن Xlib يحتوي على أخطاء. [ 5 ] )

توافق Xlib

توفر Xlib/XCB توافقًا بين واجهة التطبيق الثنائية وكلٍ من Xlib وXCB، مما يتيح مسارًا تدريجيًا للتحويل. [ 6 ] تستخدم Xlib/XCB طبقة البروتوكول الخاصة بـ Xlib، ولكنها تستبدل طبقة نقل Xlib بـ XCB، وتوفر الوصول إلى اتصال XCB الأساسي للاستخدام المباشر لـ XCB. تسمح Xlib/XCB للتطبيق بفتح اتصال واحد بخادم عرض X واستخدام كلٍ من XCB وXlib، ربما من خلال مزيج من المكتبات المصممة لأحدهما أو كليهما. [ 7 ] [ 8 ]

مثال

// تطبيق XCB بسيط لفتح نافذة ورسم مربع بداخلها// لتجميع البرنامج باستخدام GNU، استخدم: // gcc xc -lxcb#include <stdio.h> #include <stdlib.h> #include <xcb/xcb.h>int main ( void ) { xcb_connection_t * connection ; xcb_screen_t * screen ; xcb_window_t window ; xcb_gcontext_t context ; xcb_generic_event_t * event ; uint32_t mask ; uint32_t values ​​[ 2 ]; int done = 0 ; xcb_rectangle_t r = { 20 , 20 , 60 , 60 };// فتح اتصال بالخادم connection = xcb_connect ( NULL , NULL ); if ( xcb_connection_has_error ( connection )) { printf ( "لا يمكن فتح الشاشة \n " ); exit ( EXIT_FAILURE ); } // الحصول على الشاشة الأولى screen = xcb_setup_roots_iterator ( xcb_get_setup ( connection ) ) . data ;// إنشاء سياق رسومات أسود context = xcb_generate_id ( connection ); window = screen -> root ; mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES ; values ​​[ 0 ] = screen -> black_pixel ; values ​​[ 1 ] = 0 ; xcb_create_gc ( connection , context , window , mask , values ​​);// إنشاء نافذة window = xcb_generate_id ( connection ); mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK ; values ​​[ 0 ] = screen -> white_pixel ; values ​​[ 1 ] = XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_KEY_PRESS ; xcb_create_window ( connection , screen -> root_depth , window , screen -> root , 10 , 10 , 100 , 100 , 1 , XCB_WINDOW_CLASS_INPUT_OUTPUT , screen -> root_visual , mask , values ​​);// تعيين (عرض) النافذة xcb_map_window ( الاتصال ، النافذة );xcb_flush ( connection );// حلقة الأحداث while ( ! done && ( event = xcb_wait_for_event ( connection ))) {switch ( event -> response_type & ~ 0x80 ) { case XCB_EXPOSE : // رسم أو إعادة رسم النافذة xcb_poly_fill_rectangle ( connection , window , context , 1 , & r ); xcb_flush ( connection ); break ; case XCB_KEY_PRESS : // الخروج عند الضغط على مفتاح done = 1 ; break ; } free ( event ); } // إغلاق الاتصال بالخادم xcb_disconnect ( connection );exit ( EXIT_SUCCESS ); }

تزيل عملية AND المنطقية بتًا يشير إلى مصدر الحدث. [ 9 ]a->response_type&~0x80

يحتوي XCB على واجهة برمجة تطبيقات مماثلة، ولكنها أقل مستوى قليلاً من Xlib ، [ 10 ] كما يمكن رؤيته في هذا المثال.

وصف البروتوكول

ابتكر مطورو XCB لغة وصف واجهات متخصصة لنمذجة بروتوكول X11 بطريقة محايدة لغوياً، وتسهيل إنشاء روابط مع لغات برمجة أخرى. وتُنفذ مكتبة libxcb نفسها كمولد أكواد وجزء صغير من وظائف مساعدة مكتوبة بلغة C.

مثال:

<xcb header= "bigreq" extension-xname= "BIG-REQUESTS" extension-name= "BigRequests" extension-multiword= "true" major-version= "0" minor-version= "0" ><request name= "Enable" opcode= "0" > <reply> <pad bytes= "1" /> <field type= "CARD32" name= "maximum_request_length" /> </reply> </request> </xcb>

تم تصميم شعار XCB بواسطة جيرود مولوي، مؤلف سلسلة القصص المصورة على الإنترنت Neko the Kitty ، وتبرع به للمشروع. [ 11 ]

روابط لغات أخرى

  • XCB.pm - وحدة بيرل التي تنفذ روابط لـ XCB.
  • xpyb - مكتبة بايثون لربط نظام X Window باستخدام XCB. اعتبارًا من يونيو 2013، لا تدعم هذه المكتبة بايثون 3. مقدمة من freedesktop.org .
  • xcffib - ربط بايثون آخر يدعم بايثون 2 و 3 بالإضافة إلى العديد من امتدادات X أكثر من xpyb.
  • guile-xcb - وحدة Guile التي تنفذ لغة للتعامل مع تعريف xcb كشفرة مصدرية.

ملحوظات

  1. "libxcb-1.17.0" .
  2. جيتيس، جيمس؛ باكارد، كيث (2004). إعادة تصميم نظام النوافذ X (ملف PDF) . وقائع ندوة لينكس. المجلد 1. 
  3. شارب، جيمي (2004). كيف يتم تنفيذ Xlib (وما نفعله حيال ذلك) (ملف PDF) . وقائع المؤتمر التقني السنوي لـ Usenix، مسار Freenix.
  4. ماسي وباور، 2002 .
  5. شارب وماسي، 2002 ، §2.4. "على الرغم من أن Xlib صُممت لدعم التطبيقات متعددة الخيوط، وعلى الرغم من أن هذا الدعم ليس غير قابل للاستخدام، إلا أن هناك حالات تنافس معروفة لا يمكن التخلص منها دون تغيير واجهة Xlib."
  6. مالوني، روس ج. (31 مارس 2018). برمجة النوافذ X منخفضة المستوى: مقدمة بالأمثلة . سبرينغر. ص 225-244 . ISBN  978-3-319-74250-2تم الاطلاع عليه بتاريخ 17 مايو 2022 .
  7. "Xlib/XCB: Xlib مع نقل XCB" . 11-01-2008 . تم الاسترجاع في 11-09-2009 .
  8. جيمي شارب وجوش تريبلت (26 نوفمبر 2006). "libx11 مع Xlib/XCB الآن تجريبي؛ يرجى اختباره مع حزمك" . قائمة بريدية debian-devel-announce . تم الاطلاع عليه بتاريخ 11 سبتمبر 2009 .
  9. "بروتوكول نظام نوافذ X" . X.Org . الفصل 1. تنسيقات البروتوكول . تم الاطلاع عليه بتاريخ 22 مارس 2024. يحتوي كل حدث على رمز نوع مكون من 8 بتات. يتم تعيين البت الأكثر أهمية في هذا الرمز إذا تم إنشاء الحدث من طلب SendEvent.
  10. جيمي شارب؛ بارت ماسي (2002)، XCL : طبقة توافق Xlib لـ XCB ، المؤتمر التقني السنوي لـ USENIX لعام 2002، مسار Freenix 
  11. شعار كيتي (xcb.freedesktop.org)

مراجع

  • ماسي، بارت؛ شارب، جيمي (19 سبتمبر 2001). "XCB: ربط بروتوكول X بلغة C" (ملف PDF) . وقائع المؤتمر التقني XFree86 . أوكلاند، كاليفورنيا: USENIX . تاريخ الاسترجاع: 12 مارس 2012 .
  • ماسي، بارت؛ باور، روبرت ( 2002). "X يلتقي Z: التحقق من الصحة في وجود خيوط POSIX" . وقائع مسار FREENIX: المؤتمر التقني السنوي لـ USENIX لعام 2002. مونتيري، كاليفورنيا: USENIX . الصفحات 221-234 . تاريخ الاسترجاع : 7 نوفمبر 2008 . 
  • شارب، جيمي؛ ماسي، بارت (2002). "XCL: طبقة توافق لـ XCB" . وقائع مسار FREENIX: المؤتمر التقني السنوي لـ USENIX لعام 2002. مونتيري، كاليفورنيا: USENIX . الصفحات 71-83 . تاريخ الاسترجاع : 7 نوفمبر 2008 .