Xlib

Xlib (المعروفة أيضًا باسم libX11 ) هي مكتبة عميل بروتوكول نظام X Window مكتوبة بلغة البرمجة C. تحتوي على وظائف للتفاعل مع خادم X. تُمكّن هذه الوظائف المبرمجين من كتابة البرامج دون الحاجة إلى معرفة تفاصيل بروتوكول X.
قليل من التطبيقات تستخدم Xlib بشكل مباشر؛ بل تستخدم مكتبات أخرى تستخدم وظائف Xlib لتوفير مجموعات أدوات واجهة المستخدم الرسومية :
- مجموعة أدوات X (Xt)
- مجموعة أدوات أثينا (Xaw)
- عزر
- FLTK
- GTK
- Qt (إصدار X11)
- تاك
- SDL (طبقة الوسائط المباشرة البسيطة)
- SFML (مكتبة الوسائط المتعددة البسيطة والسريعة)
تُستخدم مكتبة Xlib، التي صدرت لأول مرة للجمهور في سبتمبر 1985، [ 1 ] في واجهات المستخدم الرسومية للعديد من أنظمة التشغيل الشبيهة بنظام يونكس . وقد أُعيد تطبيق Xlib في عام 2007 باستخدام XCB . [ 3 ]
أنواع البيانات
الأنواع الرئيسية للبيانات في Xlib هي Display[ 4 ] البنية وأنواع المعرفات.
بصورة غير رسمية، الشاشة هي جهاز مادي أو افتراضي تُجرى عليه عمليات رسومية. Displayيحتوي هيكل مكتبة Xlib على معلومات حول الشاشة، والأهم من ذلك، أنه يحتوي على معلومات متعلقة بالقناة بين العميل والخادم. على سبيل المثال، في نظام تشغيل شبيه بنظام يونكسDisplay ، يحتوي الهيكل على مُعرِّف ملف مقبس هذه القناة (ويمكن استرجاعه باستخدام ConnectionNumberالماكرو). تستخدم معظم دوال Xlib هيكلًا Displayكوسيط لأنها إما تعمل على القناة أو ترتبط بقناة محددة. على وجه الخصوص، تحتاج جميع دوال Xlib التي تتفاعل مع الخادم إلى هذا الهيكل للوصول إلى القناة. تحتاج بعض الدوال الأخرى إلى هذا الهيكل، حتى لو كانت تعمل محليًا، لأنها تعمل على بيانات مرتبطة بقناة محددة. تشمل هذه العمليات، على سبيل المثال، العمليات على قائمة انتظار الأحداث، والتي سيتم شرحها لاحقًا.
تُدار النوافذ وخرائط الألوان وغيرها من العناصر بواسطة الخادم، ما يعني أن جميع بيانات تنفيذها الفعلي مخزنة لديه. ويتعامل العميل مع هذه العناصر باستخدام مُعرّفاتها . لا يستطيع العميل التعامل مع عنصر بشكل مباشر، بل يمكنه فقط طلب تنفيذ العملية من الخادم مع تحديد مُعرّف العنصر.
جميع الأنواع المذكورة هي مُعرّفات Windows، وهي أعداد صحيحة من 32 بت (كما هو الحال في بروتوكول X11 نفسه). يقوم العميل بإنشاء نافذة عن طريق طلب إنشاء نافذة من الخادم. يتم ذلك عبر استدعاء دالة من مكتبة Xlib تُعيد مُعرّفًا للنافذة Pixmap، Fontأي Colormapرقمًا. يمكن للعميل استخدام هذا المُعرّف لطلب عمليات أخرى على نفس النافذة من الخادم.
تُعدّ المعرّفات فريدةً لكل خادم. ويمكن لمعظمها أن تستخدمها تطبيقات مختلفة للإشارة إلى نفس الكائنات. على سبيل المثال، يستخدم تطبيقان يتصلان بنفس الخادم نفس المعرّف للإشارة إلى نفس النافذة. يستخدم هذان التطبيقان قناتين مختلفتين، وبالتالي يمتلكان بنيتين عرض مختلفتين ؛ ومع ذلك، عندما يطلبان عمليات على نفس المعرّف، ستُنفّذ هذه العمليات على نفس الكائن.
البروتوكول والفعاليات
لا تُرسل دوال Xlib التي تُرسل الطلبات إلى الخادم هذه الطلبات عادةً فورًا، بل تُخزّنها في مُخزن مؤقت يُسمى مُخزن الطلبات . يُشير مصطلح "الطلب" في هذه الحالة إلى الطلب المُوجّه من العميل إلى الخادم: إذ يُمكن أن يحتوي مُخزن الطلبات على جميع أنواع الطلبات المُوجّهة إلى الخادم، وليس فقط تلك التي لها تأثير مرئي على الشاشة. يُضمن تفريغ مُخزن الطلبات (أي إرسال جميع الطلبات المُرسلة حتى الآن إلى الخادم) بعد استدعاء الدوال XSyncأو XFlush، وبعد استدعاء دالة تُعيد قيمة من الخادم (تتوقف هذه الدوال مؤقتًا حتى يتم استلام الرد)، وفي بعض الحالات الأخرى.
يخزن Xlib الأحداث المستلمة في قائمة انتظار. يمكن لتطبيق العميل فحص الأحداث واسترجاعها من قائمة الانتظار. بينما يرسل خادم X الأحداث بشكل غير متزامن، يتعين على التطبيقات التي تستخدم مكتبة Xlib استدعاء وظائف Xlib صراحةً للوصول إلى الأحداث في قائمة الانتظار. قد تتسبب بعض هذه الوظائف في حظر التنفيذ؛ وفي هذه الحالة، تقوم أيضًا بتفريغ مخزن الطلبات المؤقت.
بدلاً من ذلك، يتم استقبال الأخطاء ومعالجتها بشكل غير متزامن: يمكن للتطبيق توفير معالج للأخطاء يتم استدعاؤه كلما تم استلام رسالة خطأ من الخادم.
لا يُضمن حفظ محتوى النافذة إذا تم إخفاء النافذة أو أحد أجزائها. في هذه الحالة، يتم إرسال إشعار إلى التطبيق Exposeعند إعادة إظهار النافذة أو أحد أجزائها. عندها يُفترض أن يقوم التطبيق بإعادة رسم محتوى النافذة.
الوظائف
يمكن تجميع الدوال الموجودة في مكتبة Xlib في:
- العمليات على الاتصال (
XOpenDisplay,XCloseDisplay, ...); - الطلبات المُرسلة إلى الخادم، بما في ذلك طلبات العمليات (
XCreateWindow،،XCreateGC...) وطلبات المعلومات (XGetWindowProperty، ...)؛ و - العمليات المحلية للعميل: العمليات على قائمة انتظار الأحداث ( ،،
XNextEvent...XPeekEvent) والعمليات الأخرى على البيانات المحلية ( ،،،،،XLookupKeysym... )XParseGeometry.XSetRegionXCreateImageXSaveContext
مثال


يقوم البرنامج التالي بإنشاء نافذة تحتوي على مربع أسود صغير:
/* تطبيق Xlib بسيط لإنشاء نافذة ورسم مربع بداخلها. gcc input.c -o output -lX11 */ #include <X11/Xlib.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main ( void ) { Display * display ; Window window ; XEvent event ; char * msg = "Hello, World!" ; int s ; // فتح اتصال بالخادم display = XOpenDisplay ( NULL ); if ( display == NULL ) { fprintf ( stderr , "لا يمكن فتح الشاشة \n " ); exit ( 1 ); } s = DefaultScreen ( display ); // إنشاء نافذة window = XCreateSimpleWindow ( display , RootWindow ( display , s ), 10 , 10 , 200 , 200 , 1 , BlackPixel ( display , s ), WhitePixel ( display , s )); // تحديد نوع الأحداث التي تهمنا XSelectInput ( display , window , ExposureMask | KeyPressMask ); // تعيين (عرض) النافذة XMapWindow ( display , window ); // حلقة الأحداث for (;;) { XNextEvent ( display , & event ); // رسم أو إعادة رسم النافذة if ( event . type == Expose ) { XFillRectangle ( display , window , DefaultGC ( display , s ), 20 , 20 , 10 , 10 );XDrawString ( display , window , DefaultGC ( display , s ), 50 , 50 , msg , strlen ( msg )); } // الخروج عند الضغط على مفتاح if ( event.type == KeyPress ) break ; } // إغلاق الاتصال بالخادم XCloseDisplay ( display ); return 0 ; }يقوم العميل بإنشاء اتصال مع الخادم عن طريق استدعاء الدالة XOpenDisplay. ثم يطلب إنشاء نافذة باستخدام الدالة XCreateSimpleWindow. ويلزم استدعاء منفصل للدالة XMapWindowلتعيين النافذة، أي لجعلها مرئية على الشاشة.
يتم رسم المربع باستدعاء الدالة XFillRectangle. لا يمكن تنفيذ هذه العملية إلا بعد إنشاء النافذة. مع ذلك، قد لا يكون تنفيذها مرة واحدة كافيًا. في الواقع، لا يُضمن دائمًا الحفاظ على محتوى النافذة. على سبيل المثال، إذا غُطيت النافذة ثم كُشفت مرة أخرى، فقد يتطلب الأمر إعادة رسم محتواها. يتم إبلاغ البرنامج بضرورة إعادة رسم النافذة أو جزء منها عند استقبال حدث معين Expose.
يتم رسم محتوى النافذة داخل حلقة معالجة الأحداث . قبل الدخول إلى هذه الحلقة، يتم تحديد الأحداث التي تهم التطبيق، في هذه الحالة باستخدام XSelectInput. تنتظر حلقة الأحداث حدثًا واردًا: إذا كان هذا الحدث ضغطة مفتاح، يخرج التطبيق؛ أما إذا كان حدث عرض، فيتم رسم محتوى النافذة. تقوم الدالة XNextEventبحظر وتفريغ مخزن الطلبات المؤقت إذا لم يكن هناك حدث في قائمة الانتظار.
مكتبات أخرى
لا توفر مكتبة Xlib دعمًا للأزرار والقوائم وأشرطة التمرير، وما إلى ذلك. يتم توفير هذه الأدوات بواسطة مكتبات أخرى، والتي بدورها تستخدم Xlib. يوجد نوعان من هذه المكتبات:
- المكتبات المبنية على مكتبة X Toolkit Intrinsics (Xt)، والتي توفر الدعم للأدوات ولكنها لا توفر أي أداة معينة؛ يتم توفير الأدوات المحددة بواسطة مكتبات مجموعة الأدوات التي تستخدم Xt، مثل Xaw و Motif ؛
- المكتبات التي توفر مجموعات الأدوات باستخدام Xlib مباشرة، بدون مكتبة Xt، مثل إصدارات X من GTK و Qt و FLTK و fpGUI .
عادةً ما تحدد التطبيقات التي تستخدم أيًا من مكتبات الأدوات هذه محتوى النافذة قبل الدخول في الحلقة الرئيسية ولا تحتاج إلى معالجة Exposeالأحداث وإعادة رسم محتوى النافذة بشكل صريح.
مكتبة XCB بديلٌ لمكتبة Xlib، وتتمثل أهدافها الرئيسية في تقليل حجم المكتبة والوصول المباشر إلى بروتوكول X11. وقد تم تطوير نسخة معدلة من Xlib لاستخدام XCB كطبقة منخفضة المستوى.
مراجع
- 1 2 شيفلر، روبرت و.؛ جيتيس، جيمس؛ نيومان، رون (1988). نظام النوافذ X (ملف PDF) . دار النشر الرقمية. ص. 26.
- ↑ آلان كوبرسميث (7 فبراير 2026). " [ إعلان ] libX11 1.8.13" . تم الاطلاع عليه بتاريخ 8 فبراير 2026 .
- ↑ "ملاحظات XDC2007" . 9 فبراير 2007.
- ↑ "بنية العرض على نظام إدارة المحتوى المجاني لسطح المكتب" . نصيحة للبحث عن: typedef struct _XDisplay Display . مؤرشف من الأصل بتاريخ 31 يناير 2008. تم الاطلاع عليه بتاريخ 24 أغسطس 2007 .
روابط خارجية
- الوثائق البرمجية الرسمية لمؤسسة X.Org ، بما في ذلك أحدث إصدار من Xlib - واجهة لغة C X في عدة تنسيقات.
- شرح موجز لمكتبة Xlib
- صفحات الدليل لجميع وظائف Xlib
- صفحات كينتون لي حول X Window و Motif، مؤرشفة بتاريخ 20 مايو 2013 في Wayback Machine
- شرح مفصل حول Xlib
- استخدام Xlib لإنشاء وحدة شاشة توقف
- ناي، أدريان (1990). دليل برمجة Xlib . الأدلة الشاملة لنظام X Window. المجلد 1. دار نشر أورايلي ميديا. رقم ISBN 0-937175-11-0.
- ناي، أدريان (1990). دليل مرجعي لـ Xlib . الأدلة الشاملة لنظام X Window. المجلد 2. دار نشر أورايلي ميديا. رقم ISBN 0-937175-12-9.
- واجهات برمجة التطبيقات
- مكتبات لغة البرمجة C
- نظام النوافذ X
