PDA

View Full Version : سوال: سوالاتی پیرامون Xlib



PC2st
دوشنبه 20 خرداد 1387, 15:49 عصر
سلام بر لینوکسی های عزیز... :لبخند:
چند وقت پیش با wxWidgets framework آشنا شدم. دیدم که این framework بر روی هر platform از widget های native آن platform استفاده میکنه، برخلاف QT و GTK+ که خودشون widget ها رو ترسیم میکنند. بعد متوجه شدم که wxWidgets دارای port های مختلفی هست که wxMSW port در windows از win32 و wxGTK port در linux از GTK+ استفاده میکنه! البته wxX11 port در لینوکس هم هست که بجای استفاده از GTK+ از Xlib استفاده میکنه ولی به اندازه wxGTK port کامل نیست و بیشتر بدرد embeded systems میخوره تا دسکتاپ...
با مقدمه ای که اون بالا نوشتم، فکر کنم انگیزه من رو از پرسیدن این سوال فهمیده باشین، راستش میخواستم بدونم:
1. چرا wxWidgets در لینوکس استفاده از GTK+ رو جدی تر از Xlib دنبال کرده؟ (wxGTK بالغ تر (کامل تر) از wxX11 است). یعنی میشه گفت که عملا استفاده از GTK+بیشتر از استفاده ی مستقیم از Xlib طرف دار داره؟
2. بر این اساس که GNOME از GTK+ استفاه میکنه و GTK+ هم از Xlib استفاده میکنه، آیا اگه ما بطور مستقیم در برنامه هامون از Xlib استفاده کنیم، theme هایی که کاربر روی محیط GNOME تعیین کرده، روی برنامه ی ما (که بدون واسطه GTK+ از Xlib استفاده کرده) هم اعمال میشه؟ (اگه جواب خیر هست، آیا روشی برای اینکار وجود داره؟)
3. آیا Xlib به اندازه win32 در ویندوز کامل هست؟ منظورم در همه زمینه ها می باشد، مثلا برای تشخیص اتصال به اینترنت، تابعی در Xlib وچود داره؟ (خودم فکر نمیکنم اینطور باشه و Xlib بیشتر برای کار با gui کاربرد داره).
4. اگه برنامه ای که نوشتیم از Xlib بطور مستقیم استفاده کنه، در اینصورت این برنامه هم روی GNOME هم روی KDE اجرا میشه و نیازی نیست که حتما محیط خاصی نصب شده باشه؟ درسته؟
5. در Xlib توابعی برای ساخت window وجود داره ولی من توابعی که برای ساخت دکمه ها و منو ها و غیره باشه رو ندیدم آیا بر خلاف win32 در windows چنین اشیایی تعریف نشده و اینها رو خودمون باید ترسیم و کنترل کنیم؟
6. در جایی مستندات kernel API رو دیده بودم... آیا Xlib یک wrapper برای kernel API هست؟
این سوالاتی بود که به ذهنم رسیده است و فقط برای اینکه دید بهتری نسبت به این قضیه داشته باشم، اینها رو پرسیدم. :متفکر:
لطفا راهنمایی کنید (دستتون درد نکنه :بامزه:)...

rezaTavak
سه شنبه 21 خرداد 1387, 09:35 صبح
۱- چون گزینه های بیشتر را gtk دارد.
۲ - برخی هاش مانند پنجره و رنگ اعمال میشه اما بیشترش نه. یک نمونه FontForge است ببینید چه شکلی دارد.
۳ - نه فقط گرافیکی
۴ - به محیط که نه کتابخانه libgtk,libqt برای اجرای gtk,qt نیاز است. در واقع مستقیم به libx دسترسی دارید که آن کتابخانه ها دیگر مورد نیاز نیست..
۵ - وجود ندارد در واقع فقط هدایت خط نقطه فونت کیبرد رنگ و... است. مرجعی برای کار و توابع هم هست:
http://www.cptec.inpe.br/sx4/sx4man2/g1ae02e/contents_frame.html

۶ - کرنل جداست libx هم جداست.

PC2st
سه شنبه 21 خرداد 1387, 16:29 عصر
مرسی مرسی مرسی :لبخند:

2. متاسفانه در حال حاضر به لینوکس دسترسی ندارم، میشه بپرسم که آیا راهی وجود داره که مثلا شکل و ظاهر دکمه ها و منو ها و غیره با theme های انتخابی کاربر تغییر کنه؟ آیا نوشتن برنامه ای که مستقیم با xlib کار کنه و با theme های GNOME سازگار باشه، منطقی به نظر میرسه؟ اصولا شدنی هست؟

4. همچنین اگه برنامه ای مستقیم با xlib کار کنه،آیا اصلا دیگه نیازی به GNOME و KDE (و هر محیط دیگری) نداره و حتی بدون نصب بودن KDE یا GNOME (یا هر محیط دیگری) میشه اون برنامه گرافیکی رو مشاهده کرد!؟ مثلا از خط فرمان نام برنامه رو بنویسیم و اون برنامه رو اجرا کنه! بدون وجود هر محیطی مثل KDE یا GNOME یا غیره!!؟ (فکر کنم نیاز به حداقل یک محیط گرافیکی (مثلا GNOME) باشه... محض فضولی پرسیدم :بامزه:)

5. راستش ebook اون سایت رو دانلود کرده بودم که باعث شد این سوالها رو بپرسم! بر اساس توضیحاتی که اشاره کردید، برای ایجاد یک دکمه روی پنجره این رو پیدا کردم، به نظر که کار طاقت فرساییست!! (http://linuxgazette.net/issue78/tougher.html)

6. این kernel API چه امکاناتی رو فراهم میکنه و اصلا چی هست؟ API اصلی لینوکس در کجاست؟ API ای که تمام کارها رو بر اساس اون انجام میدهند؟ (اعم از کار با gui تا کار با فایلها و گرفتن time و اتصالات شبکه ای و غیره...) به نظر میرسه که یک API واحد نداره؟ درسته؟ مثلا Xlib برای کار با gui و نمیدونم فلان چیز هم برای کار با فایلها و ... وجود داره.

Nima_NF
سه شنبه 21 خرداد 1387, 19:41 عصر
API اصلی لینوکس در کجاست؟ API ای که تمام کارها رو بر اساس اون انجام میدهند؟ (اعم از کار با gui تا کار با فایلها و گرفتن time و اتصالات شبکه ای و غیره...) به نظر میرسه که یک API واحد نداره؟ درسته؟ مثلا Xlib برای کار با gui و نمیدونم فلان چیز هم برای کار با فایلها و ... وجود داره.
در لینک زیر، مخصوصا پست آخر توضیحاتی در مورد xlib داده ام:
http://barnamenevis.org/forum/showthread.php?p=457202#post457202

به خاطر همین هست که تقریبا همه برنامه نویسان در لینوکس از تولکیت هایی مثل +Qt, Wxwidgets , GTK استفاده می کنند تا همه امکانات یکجا در اختیارشان باشد، چرا که این ابزار همانند windows API عمل می کنند اما راحت تر.

جهت اطلاع بیشتر این را هم جالب هست که بدانید خود KDE با Qt نوشته شده است و همانطور هم که در لینک توضیح داده شد Qt هم مستقیم از Xlib استفاده می کند.

PC2st
سه شنبه 21 خرداد 1387, 21:33 عصر
در لینک زیر، مخصوصا پست آخر توضیحاتی در مورد xlib داده ام
قبلا پست شما رو خوندم و از همون موقع ها بود که کم کم خواستم کمی در رابطه با لینوکس و Xlib و غیره اطلاعات بیشتری کسب کنم که به همین منظور هم باید یک تاپیک جدید مختص به Xlib ایجاد میکردم!

در واقع من شک ها و شبهات زیادی را دارم و با این سوالات حداقل خیالم از درست یا غلط بودن افکارم راحت میشه.


به خاطر همین هست که تقریبا همه برنامه نویسان در لینوکس از تولکیت هایی مثل +Qt, Wxwidgets , GTK استفاده می کنند تا همه امکانات یکجا در اختیارشان باشد، چرا که این ابزار همانند windows API عمل می کنند اما راحت تر.
آخه بعضی مواقع toolkit های موجود ظاهر خوشایندی ندارند یا حداقل در بعضی مواقع باب میل نیستند (بدلایل سوء تغذیه ای که بنده دارم!).
مثلا GTK+ که اصولا از کلاس ها و غیره استفاده نکرده و زیاد برای ++c و از لحاظ شئ گرایی خوشایند نیست...
و مثلا wxWidgets علارقم اینکه از کلاس ها استفاده کرده و بدرد برنامه نویسی با ++c هم میخوره ولی متاسفانه سرعت کامپایل برنامه هاش پایین هست! (شاید چون دیگه زیادی از دستورات preprocessore و ماکرو ها استفاده کرده). همچنین در لینوکس از GTK+ استفاده میکنه (پورت wxGTK در لینوکس) و بطور مستقیم به Xlib کاری نداره (نمیدونم شاید بخاطر سازگاری با theme های GNOME این کار رو کرده!)
QT هم تا حالا باهاش کار نکرده ام ولی میدونم که در محیط ویندوز از win32 استفاده نمیکنه و خودش اشکال خودش رو رسم میکنه. در ضمن wxWidgets به نسبت QT کمتر از virtual function ها استفاده کرده و در اجرا تاحدودی سریعتره (این رو از یک مقاله توی wiki سایت wxWidgets خوندم).
GTKmm هم که یک wrapper روی GTK+ هست که قاعدتا باید سرعت پائین تری به نسبت QT و GTK+ داشته باشه.

در این حالت ها، به نظر من نوشتن یک فریم ورک شخصی (به طوری که کار آدم رو راه بندازه) شاید بهتر از استفاده از فریم ورک های قبلی باشه (البته بعد از ظهور استاندارد جدید ++c انشالله!). فقط میخواستم کمی در رابطه با Xlib دید بهتری داشته باشم، تا اگه دیدم این کار ارزشش رو داره، شاید یک موقعی (پس از مدتی که از دست wxWidgets خسته شدم :بامزه:) چیزی رو بنویسم که کارهای خودم رو راه بندازه. آخه من یک برنامه نویس حرفه ای نیستم و احتیاجی هم به اون همه امکاناتی که سایر tookit ها در اختیار آدم قرار میدهند ندارم. خدا رو چه دیدید، شاید روزی فریم ورک ما هم مثل بقیه معروف شد و از روش یک Minesweeper نوشتند! :لبخند: (جدی نگیرید!)

منتظر راهنمایی بیشتر شما دوستان هستم (بخصوص در مورد سوالها)...

PC2st
سه شنبه 04 تیر 1387, 22:49 عصر
مثل اینکه کسی علاقه مند نیست! باور کنید منبع درست حسابی هم پیدا نمیشه که اینجور سوالات رو توضیح بده...
در جستجوی سایت هم فقط همین لینک بود که تا حدودی ربط داشت:
http://barnamenevis.org/forum/showthread.php?t=62000&highlight=kernel


فقط همین دو سوال (از قبل) مونده... (بیخیال سوالات پیرامون kernel API و غیره شدم!)



2. متاسفانه در حال حاضر به لینوکس دسترسی ندارم، میشه بپرسم که آیا راهی وجود داره که مثلا شکل و ظاهر دکمه ها و منو ها و غیره با theme های انتخابی کاربر تغییر کنه؟ آیا نوشتن برنامه ای که مستقیم با xlib کار کنه و با theme های GNOME سازگار باشه، منطقی به نظر میرسه؟ اصولا شدنی هست؟

4. همچنین اگه برنامه ای مستقیم با xlib کار کنه،آیا اصلا دیگه نیازی به GNOME و KDE (و هر محیط دیگری) نداره و حتی بدون نصب بودن KDE یا GNOME (یا هر محیط دیگری) میشه اون برنامه گرافیکی رو مشاهده کرد!؟ مثلا از خط فرمان نام برنامه رو بنویسیم و اون برنامه رو اجرا کنه! بدون وجود هر محیطی مثل KDE یا GNOME یا غیره!!؟ (فکر کنم نیاز به حداقل یک محیط گرافیکی (مثلا GNOME) باشه... محض فضولی پرسیدم :بامزه:)

PC2st
جمعه 14 تیر 1387, 13:32 عصر
از دوستانی که در این گفتگو شرکت کردند، متشکرم، امیدوارم این جوابهایی که میدم درست و مفید باشه...

2. خیر. قابلیت نمایش theme ها به نوع toolkit ای که برای نوشتن برنامه از آن استفاده شده بر میگرده. مثلا بعضی از toolkit ها اصولا theme پذیر نیستند. اگه در نوشتن برنامه ای از gtk استفاده شده باشه، در اینصورت theme های gnome روی برنامه تاثیر میگذاره (که gnome فکر کنم در اصل theme های نمایشی کتابخانه gtk رو عوض میکنه پس تمام برنامه هایی که از gtk استفاده کرده اند، شکلشون تغییر میکنه) و اگه از qt استفاده شده باشه، theme هایی که در kde مشخص شده روی اون برنامه تاثیر میگذاره.

4. بله! برای اجرای برنامه هایی که بطور مستقیم یا غیر مستقیم از xlib استفاده میکنند، نیازی به gnome یا kde نیست. برای اجرای یک چنین برنامه ای، وجود کتابخانه xlib (برای x client) و کتابخانه xorg (برای x server در بیشتر توزیع های لینوکس) لازمه و همچنین از برنامه های window manager و display manager و session manager استفاده میشه. بطور مثال سیستم x window بطور پیش فرض از xsm برای session manager استفاده میکنه و در محیط دسکتاپ gnome از gnome-session و در محیط دسکتاپ kde هم از ksmserver استفاده میکنه. حالا برنامه ای که با xlib (یا gtk یا غیره) نوشته شده، براش فرقی نمیکنه که کدامیک از اینها وجود داشته باشه.