4.3 نظرة تشريحية :لينكس تحت المجهر
محتويات هذا الفصل:
4.3.1 نظام الإدخال والإخراج الأساسي BIOS
عند تشغيل الحاسوب يتم تشغيل BIOS نظام الإدخال والإخراج الأساسي
يقوم بعد الرام وفحص الأشياء الأساسية.
ثم يبحث ال BIOS عن برنامج الإقلاع بتسلسل معين يحدده برنامج
إعداد ال BIOS وغالباً ما يكون القرص المرن فالمدمج فالصلب
أو في الأجهزة الأكثر أماناً الصلب أولاً، ولكن أين وعن ماذا يبحث؟
في أول قطاع من كل قرص يوجد منطقة اسمها Boot record أي سجل الإقلاع
يتم قراءة ذلك القطاع والتأكد من أنه يحمل
توقيع ( يسمى Magic Num ) فإذا وجده وضع القطاع في الذاكرة ونفذه
إذا لم يجده انتقل إلى القرص التالي وإذا لم يجده أبداً يطبع رسالة تفيد ذلك.
بالنسبة للأقراص الصلبة فإن كل قسم منها يحتوي على مثل هذا السجل
ولكن لا يتم قراءة أي منها لأن هناك سجل اضافي للقرص كاملاً
يسمى سجل الإقلاع المتسيد Master Boot Record وللاختصار MBR
هو الذي يتم قراءته. يحتوي ال MBR على برنامج صغير
جدا ( محدود بحجم القطاع وهو 512 بايت) يسمى Boot loader
وبالتحديد first stage boot loader
يمكنك أن تصل قرصين صلبين على الحزام الواحد بمقبس IDE على اللوحة الأم،
ويوجد عادةً متسع على اللوحة الأم لوصل حزامين أي أنك تصل
4 أقراص باللوحة الواحدة (دون اضافات) تكون مقابس IDE مرقمة
الرقم الأصغر يسمى primary أولي والتالي يسمى secondary ثانوي ،
ولكن كيف تحديد أي القرصين المرتبطين مع الأولي يأتي أولاً؟
يتم اختيار ترتيب الأقراص المرتبطة على الحزام الواحد
بطريقة فيزيائية باستعمال Jumper وهو قطعة معدنية مغلفة بعازل توضع
في مكان محدد على القرص الصلب فتوصل دارات لتحدد فيما لو كان
القرص سيد Master أم عبد Slave. تكون طريقة وضع ال Jumper مطبوعة على
القرص نفسه وتحددها الشركة الصانعة.
القرص الذي يبحث في BIOS عن MBR هو Primary Master أي hda فقط.
في لينكس نسمي القرص الأولي السيد Primary Master باسم hda
والعبد الأولي Primary Slave باسم hdb
والسيد الثانوي hdc
والعبد الثانوي hdd
ونسمي القسم الأول من hda باسم hda1
في كل مرة تشبك قرص أو تبدل قرص مكان قرص عليك الدخول على برنامج إعداد ال BIOS
لتعريفه وبعض أنواع ال BIOS يمكن إعدادها بحيث تفحص
نوع القرص تلقائياً في كل حالة اقلاع ولكن هذا يأخذ وقتاً
على أي حال لينكس ليس بحاجة لل BIOS فهو يعرف الأقراص
تلقائيا حتى لو لم يعرفها ال BIOS وبوقت أقل من ال BIOS ولكن هذا الإجراء لنظام ويندوز ،
إذا لم تكن تتعامل معه ضع كل الأقراص عدا قرص لينكس غير موجودة في BIOS!!
4.3.2 برامج الإقلاع Boot-Loaders
قد يكون برنامج ال boot-loader برنامج يسألك اي الأنظمة تريد أن تقلع مثل برنامج BootMagic الشهير وغيره
ولكن في ويندوز أو دوس يكون غبي وغير تفاعلي لديه عنوان command.com
و io.sys و msdos.sys يقوم يتحميلها وتنفيذها فقط دون أن يأخذ بعين
الإعتبار الأقسام الأخرى والأنظمة الأخرى كما لا يمكنه تمرير أي معلومات
للنظام لهذا نقول أن ويندوز ليس Multi-boot system وأكثر من ذلك
فإن له العيوب التالية:
- يعجز ويندوز ودوس عن الإقلاع إذا تم لمس أي من هذه الثلاث ملفات حتى
لو شطبتها ثم أعدتها لأن برنامج boot loader الخاص به يخزن موقع الملفات
باحداثياتها (اسطوانة/قطاع/رأس) حيث أن نظام الملفات في نظام التشغيل غير موجد
والBIOS لا تتعامل مع ملفات بل فقط (اسطوانة/قطاع/رأس)
- يجب أن تكون هذه الملفات في أول قسم (من أول قرص) مرئي لنظام
دووس أو ويندوز (يعني الذي يسمونه السي)، إذا قمت بتركيب ويندوز في مكان آخر فإنه
سيضع بعض الملفات على السي فإذا قمت بتهيئة (أي format ) السي
فان الويندوز الذي على الدي سوف لن يقلع.
في لينكس فهناك برامج مثل lilo و grub و syslinux و isolinux .
أولها LILO (أي LInux LOader) هو الأكثر انتشارا ويمكنه عمل
قائمة نصية أو رسومية بدقة 640 في 480 ب 16 لون BMPأو 320 في 200 لون PCX
يمكنه تحميل لينكس وتمرير معلومات له وتحميل ويندوز وعمل
بعض الخدع لويندوز مثل الإقلاع من قرص افتراضي (الدي أو الإي)
عن طريق اخفاء القرص الأساسي ( السي )
ولكن عند اجراء أي تعديل على أي من الملفات التي يستعملها مثل الصورة
فانه يتوجب عليك إعادة تركيبه بتنفيذ lilo و أنت جذر ليجدد معلوماته
ويأخذ الاحداثيات الجديدة للملفات.
grub (من GNU ) وهو برنامج يهدف أولا للقضاء على lilo أو استبداله
وثانياً إقلاع لينكس يوفر الكثير من المزايا اضافة لما يوفره lilo مثل
الكذب على ويندوز باخفاء الأقسام
وإمكانية تمرير معلومات ليس إلى لينكس فقط بل وإلى انظمة اخرى مثل
OS/2 و شبيهات unix مثل GNU/Hurd و FreeBSD.
ويمكنه الدخول إلى أنظمة الملفات fat و ext3 و ext2 وغيرها
أي لا ضرورة لإعادة تركيبه عند تعديل الصورة أو الملف الخيارات
ويمتاز بأنه يستطيع إقلاع أنظمة غير موجودة في القائمة
SysLinux يستخدم لإقلاع قرص الإنقاذ فهو يستطيع الدخول إلى نظام
الملفات fat أما isolinux يستخدم لإقلاع القرص المدمج وهما غير
شائع للحالات العادية
loadlin برنامج يعمل في ظل دوس ولا يعمل في ويندوز يستطيع وضع نواة لينكس في الذاكرة
ثم ازالة كل شيء عدا ذلك ثم الاقلاع وهو يستعمل للذين لا يريدون اعادة تقسيم القرص الصلب
وتغيير ال boot loader ويأتي مع بعض التوزيعات مثل SOT
يمكن للينكس الإقلاع دون boot loader ولكن ستخسر امكانية تمرير بعض المعلومات له
إذا أردت تجربة ذلك ضع قرص مرن ثم اكتب في لينكس الأمر التالي
bash# dd if=/boot/vmlinuz of=/dev/fd0 bs=1024
ثم ضعه في السواقة وأعد تشغيل الجهاز سوف تقلع النواة ثم تعطي رسالة
kernel panic : can't find root file system
وهي تعني أن لينكس الذي وضعناه على القرص المرن لايحتوي على نظام ملفات
( وهو نظام ext3 أو ext2 أو minix يحتوي على البرامج الأساسية مثلinit او sh )
أعد تشغيل الجهاز
4.3.3 نواة النظام kernel
النواة تكون عادة موجودة في مجلد boot وهي نوعان vmlinuz او bz2Image
تبعا لطريقة الضغط المتبعة ملفات bz2 تستخدم للأنوية العملاقة التي تحتوي
الكثير من التعريفات أو كل التعريفات
عادة يكون الملف vmlinuz هو وصلة لإصدارة محدد من النواة مثلاً vmlinux-2.4.24
هذه أمثلة على بعض اسماء الأنوية
/boot/vmlinuz
/boot/vmlinuz-2.4.18
/boot/vmlinuz-2.4.20-mdk-9
/boot/bz2Image
/boot/bz2Image-2.4.18
/boot/bz2Image-2.4.20-ErrorMsg-3
الرقم 2.4.18 يشير إلى رقم الإصدارة وإذا كان الأوسط زوجي
فهذا يعني أنها نواة مختبرة ومستقرة (بإدارة لينوس) أما إذا كان فردي
(ربما بإدارة Alan Cox) فهذا يعني أنها قيد التجريب لإضافة مزايا جديدة
vmlinuz-2.5.56 هي نسخة تجريبية
vmlinuz-2.4.21 مستقرة
من الجدير بالذكر أن هناك ملف اسمه vmlinux ينتهي ب X وليس ب Z
هو عبارة عن ملف بيني ( يمكن شطبه ) ربما تجده في RH لا اعلم لماذا
لا يشطبونه
4.3.4 تمرير معلومات للنواة
بعد أن يحمل برامج الإقلاع boot loader النواة يمرر لها بعض الخيارت
ثم ينفذ النواة وكل خيار لم يتم ذكره يستعمل القيم الإفتراضية
لمعرفة القيم الإفتراضية أو تغيرها استعمل هذه الخمسة أوامر
rdev و swapdev و ramsize و vidmodeو rootflags التي تعني
- rdev : root device
- rdev : swap device
- ramsize : ram disk size (0 if non)
- vidmode : vedio mode (for text console)
- rootflags: mount root disk ( read only ) or ( read & write )
لتعرف المزيد نفذ.
bash$ man rdev
bash$ rdev /boot/vmlinuz
يستخدم قرص الرام لعمل rescue disk أو لإضافة تعريفات لأشياء ضرورية
قبل تحميل نظام الملفات الجذري
مثلا النواة في RedHat 8.0 لا تدعم ext3 والنظام الجذري هو ext3
فكيف يمكن أن يقرأ نظام الجذري الطريقة أنه يعمل صورة لقسم صغير من نوع ext2 المدعوم
من النواة يحتوي على تعريف ext3. تسمى initrd أي قرص الرام الاستهلالي init ram disk.
يمكن عمل initrd بواسطة mkinitrd أو يدوياً كما في عمل ram disk في الفصل التالي.
وعلى الرغم من كون initrd هو ram disk إلى أنها لا يمرر عن طريق
rdev بل عن طريق برنامج الإقلاع lilo مثلاً مما يعني أن برنامج
هو المسؤول عن تحميله باستخدام ال BIOS لقراءة هذا الملف وتمريره للنواة.
بعد أن تضمه النواة على أنه الجذر يتم تنفيذ ملف linuxrc
الذي يفترض أن يحتوي على العمليات اللازمة لتمكين النواة
من رؤية النظام الجذري الحقيقي مثل تحميل تعريف ext3 عبر modprobe
في حالة أن النواة لا تحتوي تعريفاً مثبتاً فيها له
أو تحميل تعريف الإيثرنت و أخذ عنوان (عبر dhcp) تمهيداً
لضم نظام جذري عبر الشبكة NFS أو عمل losetup لإعداد
إلى ماذا يشير جهاز /dev/loop0 وما نوع التشفير
... وغيرها من الحالات الخاصة التي يكون النظام الجذر
غير جاهز/متوفر ويحتاج لإعداد معين قبل تحميله.
وبهذا يمكن الآن أن يقرأ نظام الملفات الجذري
فتقوم النواة بتحويل الدليل الجذر الحالي من initrd إلى الجذر
الذي مرر عبر خيار root من برنامج الإقلاع أو rdev.
ويتم ضم initrd إلى دليل /initrd في البيئة الجديدة (يجب أن يكون موجوداً).
بالنسبة لقيام ريدهات بعمل initrd من أجل ext3 فأنا غير مقتنع بهذه الخزعبلات
لماذا لا يضعون تعريف ext3 داخل النواة ويريحونا من هذه اللفة الطويلة
خصوصاً وأنها لا تدعم أن يكون النظام الجذر reiserfs أو xfs
(أظن أن مبرر ريدهات هو دعمهم ل LVM و RAID ولكن لم أقتنع بكونهم لا يضعون النظام الوحيد{بإهمام ext2 } الذي يدعمون داخل النواة مباشرة)
تلميح
لقد قمت ببعض التجارب على الأنوية الصغيرة الموجودة في أقراص التركيب المرنة
لبعض التوزيعات فوضعتها في دليل /boot واستعملتها لإقلاع
النظام الكامل المركب على القرص الصلب فكانت النتيجة (كما هو متوقع) أن هناك بعض المزايا لم
تعد تعمل (مثل الصوت) ولكن تلك المأخوذة من أقراص ديبيان المرنة لم
تقلع قط متذرعة بعدم قدرتها على ضم النظام الجذر
مع أنه من نوع ext2، بعد الدراة تبين أنها لا تحمل دعماً مثبتاً
للكثير من الأشياء منها ناقل IDE الذي أربط عليه القرص الصلب حيث يوجد نظام ext2 الجذري!
أما الأشياء الأخرى التي يمكن تمريرها فهي كثيرة منها
| root=/dev/hda7 |
اعتبار أن القسم hda7 هو الدليل الجذر |
| ro |
للقراءة فقط لكي تتمكن من فحصه ثم يتحول إلى قراءة وكتابة |
| rw |
قراءة وكتابة |
| load_ramdisk=1 |
تفعيل قرص رام (اجعلها صفر لتثبيط هذا الخيار) |
| prompt_ramdisk=1 |
تعطيك فرصة لتبديل الأقراص وإدخال القرص الثاني عند عمل rescue disk |
| ramdisk_size=4096 |
تحديد حجم قرص رام بمقدار 4096 كيلوبايت |
| ramdisk_start=400 |
تحديد مكان قرص رام بمقدار 400 كيلوبايت عن بداية القرص المرن |
| init=/sbin/init |
تمرر اسم البرنامج الذي سيتم تشغيله أولا |
| mca-pentium |
تحتاجه لجهاز IBM-95 Microchannle لأنه يحتوي على عيب صناعي يتم تلافيه بها |
| panic=10 |
إعادة تسغيل الجهاز تلقائيا بعد 10 ثواني من حدوث الخلل panic
مثل طلبت منه أن يبوت على hda8 ولكن لايوجد hda8 |
| quiet |
يجعل الكيرنل لا تطبع شيء ، يمكن الإطلاع على الرسائل في ما بعد بأمر dmesg |
| reboot=warm |
تجعل لينكس يخبر ال BIOS بأن لا تعد الرام،وتفحص الأقراص.. عند اعادة التشغيل وهي عكس ال cold |
| vga=ask |
تجعل لينكس يسأل عن طور الشاشة المطلوب(عدد الأعمدة والأسطر) عند بدء التشغيل |
| ram=64m |
بعض BIOS القديمة توهم النظام بأن الرام أقل مما هي عليه
نستعمل هذا الخيار لنحدد الحجم الحقيقي لذاكرة رام RAM، المثال 64ميغا-بايت |
| hda=cyl,head,sec |
في حال رغبتك في تمرير قيم مختلفة عن ما يتم فحصه لعدد قطاعات القرص ... |
| sound=sound-driver |
تمرير كرت الصوت وهو يستخدم لكروت non-PNP ISA وهي قديمة جدا |
| idle=poll |
تزيد من سرعة الجهاز واستهلاكه للكهرباء في حال استخدام أكثر من معالج SMP |
ملاحظة لا يوجد مسافة بين ما هو على يمين المساواة ويسارها أو يمين ويسار الفاصلة
4.3.5 مبدأ عمل قرص الإنقاذ
تعمل النواة على فحص كل شيء القرص الصلب والسي دي وكروت الشبكة
أو إذا كان هناك معلومة تم تمريرها عن طريق ال boot loader يستعملها ولا يفحص.
حتى الآن لم يعمل ضم mount للدليل الجذر.
ثم تبحث النواة عن صورة مضغوطة لنظام ملفات جذري لتحميله في الرام
(من هنا جاء الاسم قرص رام ram disk)
إذا حددنا ذلك عبر معاملات النواة (مثل ramdisk_size و ramdisk_start)
أو بأن تكون مثبتة بواسطة أدوات rdev.
ثم تضمه mount على أنه الدليل الجذر ويمكن عمل هذه الصورة
بعمل ملف بالحجم المطلوب باستعمال dd ثم تحويله
إلى تهيئته ليحمل نظام ملفات mke2fs أو
mkfs.minix ثم ضمه ووضع الملفات المطلوبة
فيه ثم إزالة الضم وضغطه ثم دمجه مع النواة.
الطريقة التالية توضح كيفية عمل قرصص إنقاذ
يحتوي على bash فقط.
تلميح
الطريقة التالية تعليمية فقط وغير عملية لعمل قرص إنقاذ كامل الأدوات هناك بديل جاهز عنها
تحذير
إنتبه: هذه الطريقة لاتؤذي التوزيعة الموجدة ولكن الخطأ في طباعة الأوامر
يقوم بذلك !!
bash$ su
bash# dd if=/dev/zero of=~/fsImage bs=1024 count=4096
4096+0 records in
4096+0 records out
bash# mkfs.minix ~/fsImage
bash# mkdir /mnt/test
bash# mount -o loop -t minix ~/fsImage /mnt/test
bash# cd /mnt/test
bash# mkdir bin usr tmp var proc sbin lib etc
bash# cp /bin/bash /mnt/test/bin/
bash# cd /mnt/test/sbin && ln -s ../bin/bash init
bash# cd ~
ثم نسخ الملفات التي تريد إلى mnt/test ولا تنس وضع المكتبات في lib
تستطيع أن تعرف ما هي المكتبات المطلوبة عن طريق ldd ، ثم اضغط تلك الصورة
تلميح
لاحظ أننا هنا عملنا وصلة من bash باسم init
لهذا عندما تأتي النواة لتشغيله سيعمل سطر الأوامر bash
ولن يسأل عن كلمة سر أو يعطيك أجهزة إفتراضية أو يتعامل مع CTRL+ALT+DEL
لأنه باش وليس init
نتابع :
bash# ldd /bin/bash
# انسخ كل المكتبات التي ظهرت
bash# cp -avi /lib/libc.*so* /mnt/test/lib
bash# cp -avi /lib/ld.so /mnt/test/lib
bash# cp -avi /lib/libncurses.*so* /mnt/test/lib
bash# umount /mnt/test
bash# gzip -9 < ~/fsImage > ~/fsImage.gz
ولوضعها مع النواة (التي تدعم نظام minix إن استعملته)على القرص المرن
ضع قرص وتأكد من أنه غير مضموم unmounted
وأن حجم الملف floppy.img الذي سينتج من دمج
vmlinuz مع ~/fsImage.gz
سيتسع على القرص. قد يكون عليك أن تصنع نواة صغيرة منزوعة المزايا بنفسك
(انظر فصل 4.7 ابني النواة بنفسك)
وأن تجرب مفسر أوامر غير BASH (مثل DASH أي Debain Almquist Shell أو zsh أو ash).
ثم نفذ ما يلي:
bash# dd if=/boot/vmlinuz-old-with-minix-support of=floppy.img bs=1k
399+0 records in
399+0 records out
bash# dd if=fsImage.gz of=floppy.img bs=1k seek=400
bash# rdev floppy.img /dev/fd0
bash# rdev -R floppy.img 0
bash# rdev -r floppy.img $((16384+400))
bash# dd if=floppy.img of=/dev/fd0 bs=1k
هنا قمنا بإرسال نواة صغير للقرص المرن وقسنا الحجم
من ناتج dd فكان 399 الآن نرسل صورة قرص الرام المضغوط
في مكان ما بعد هذه المنطقة مثلاً 400 كيلوبايت
بخيار seek الآن نحدد أن القرص الجذر هو /dev/fd0
ونحدد أنه على بعد 400 (الرقم 16384 يكافئ load_ramdisk=1).
وغالباً لن تكفيك سعة القرص الواحد (دون أن تعيد التصنيف لتقليل المزايا)
لذا نعمل قرصي إقلاع أحدهما النواة والآخر هو قرص رام كما يلي
bash# dd if=/boot/vmlinuz-big-new of=/dev/fd0 bs=1k
bash# rdev /dev/fd0 /dev/fd0
bash# rdev -r /dev/fd0 49152
#ضع لاصق "القرص الأول" ثم ضع قرص آخر
bash# dd if=fsImage.gz of=/dev/fd0 bs=1k
#ضع لاصق "القرص الثاني"؛
الرقم 49152 يعني load_ramdisk=1,prompt_ramdisk=1
تلميح
ملاحظة : لا تخلط بينه وبين initrd لأنه في حالة ramdisk يكون ال root=/dev/ram
ويتم قراءته بواسطة النواة kernel وبإعدادات rdev أما في حالة initrd يكون الجذر عادياً root=/dev/hda7 أي القرص مثلاً.
وقبل عمل Mount له يتم تحميل initrd والتعريفات المطلوبة.
في حالة ramdisk يتم تنفيذ init أما في حالة initrd يتم تنفيذ linuxrc.
وعادة ما يكون initrd موجود في /boot/initrd-ver
باختصار ال initrd يكون موجود على مكان في ال root-file-sytem اما الآخر فيكون هو ال root-file-system
لا بد أنك لاحظت أن 4 ميغابايت لا تكفي لوضع الحد الأدنى من أدوات غنو
كاملة المزايا (مثل init و sh و ls و cp ...) ومكتبة سي من غنو كاملة المزايا
أهم الحلول هو استعمال برنامج busybox وهو برنامج واحد بعدة استخدامات ووظائف
حيث يمكنه أن يتصرف مثل عدد من الأدوات الأساسية تبعاً للاسم الذي استخدم
لتشغيله (من هنا جاء الاسم multi-call binary) فإذا عملت وصله باسم ls
تشير إليه فإن تنفيذها سيعرض الملفات، ضع في نظام الملفات الخاص بقرص الانقاذ نسخة من
busybox واعمل وصلات تشير إليه لها أسماء الأدوات
(نفذ busybox دون معاملات لتحصل على قائمة بها).
كما يمكنك توفير المساحة بتصنيف البرامج لتربط مع مكتبة سي
DietLibc (انظر www.fefe.de/dietlibc/) الخاصة بالحمية (تخفيف الوزن)
تلميح
تحميل قرص رام بواسطة برامج الإقلاع boot loader مثل
SYSLINUX أسهل بكثير من دمجها مع النواة واستعمال rdev،
ببساطة ضع ملف النواة و قرص الرام على شكل ملف initrd سوياً على القرص المرن،
ثم قم بإعداد برنامج الإقلاع ليحمل
initrd مع تحديد الجذر على أنه RAM disk
'root=/dev/ram0' (أو '/dev/rd/0' للأنوية التي تدعم devfs).
نعود للحديث عن إقلاع نظام لينكس، وكنا قد وصلنا
إلى أنه يبحث عن قرص رام ram disk
فإذا لم يجده أو طلبت منه أن لا يبحث عنه يتم عمل mount لنظام الملفات الجذر ويفضل أن يكون ro أي read only
لعمل فحص له إذا كان بحاجة لذلك وهذا ضروري إلا إذا كنا نتحدث عن
ram disk موجود على rescue disk فهو يكون rw أي read and write
والسبب في كونه يجب أن يكون ro لأن نظام لينكس متعدد المهام
فإذا كان النظام للقراءة والكتابة والنظام يفحص ربما يكون هناك برنامج يكتب في الملف الذي يفحص الآن مما يؤدي إلى حدوث أخطاء.
4.3.6 برنامج init و مستويات التشغيل run-levels
الآن تبحث النواة عن برنامج init الموجود في sbin
أي /sbin/init
ويتم تمرير كل شي لم تفهم النواة من المعلومات التي مررت إليها عن طريق برنامج الإقلاع
boot loader وهي غالباً عن رقم المستوى run level وهو رقم من 1إلى 5 .
المستوى صفر وستة يستخدمان لإغلاق الجهاز أو إعادة تشغيله
- 1 : single user mode
- 2 : multi user mode
- 3 : not used or multi user mode with network
- 4 : not used or X11 mode without network
- 5 : X11 mode
في ديبيان تكون 2-5 كلها متشابهة -إكس مع شبكة- والتلقائي هو 2.
فإذا تم تمرير root=/dev/hda7 ro 2
فإن النواة ستفهم كل شيء عدا 2 فترسل إلى init رقم 2
4.3.7 ملف inittab
يقوم برامج init بقراءة الملف inittab الموجود في etc
أي /etc/inittab
يمكنك أن تقرأ كتيب هذا الملف بكتابة الأمر
man inittab
كل سطر (عدا التعليقات) تكون على الصيغة
[ID]:[RUNLEVEL]:[ACTION]:[COMMAND]
معرّف(لا معنى له) فرقم مستويات التشغيل فمحدد لمتى أو كيف ينفذ الأمر
(يحدد معنى السطر كله)
يمكن أن تكون نفذه مرة عند الإقلاع (بغض النظر عن المستوى) sysinit
أو نفذه وانتظر حتى ينتهي عند عند دخول/خروج المستوى wait
نفذه عند إغلاق الجهاز shutdown أو عند الضغط على ctrlaltdel
أو عند انقطاع الكهرباء powerfail أو عودتها powerokwait
أو نفذها مرة واحدة once أو أعد تشغيلها كلما انتهت respown
ثم الأمر. ويفصل بينهم نقطتين رأسيتين ‘:‘ منها
سطر يشير إلى رقم المستوى التلقائي default run level
ليتم استعماله في حال لم تمرر النواة رقم وهو سطر يبدو مثل
ومعناه أن مستوى التشغيل التلقائي هو خمسة أي الرسومي
هنا id تعني init default وهي كما قلنا لأغراض التوثيق فقط.
يوجد في ملف inittab أسماء برامج نصوص الاستهلال initializeing scripts
والتي تسمى نصوص الإقلاع Boot scripts ويقوم باستدعائها ملف يحدده سطر يشبه
si::sysinit:/etc/rc.d/rc.sysinit
يقوم هذا الملف بتنفيذ العمليات الاستهلالية
التي يجب أن تنفذ بشكل مسبق قبل كل شيء مثل تشغيل برنامجي klogd و syslogd
اللازمان لحفظ تقارير النواة والنظام، ومثل تحميل خط الشاشة النصية
unicode_start /usr/lib/kbd/consolefonts/LatArCyrHeb16.pcf.gz
أو تحديد وضع أضواء لوحة المفاتيح بواسطة setleds مثل Numlock.
وضم الأقراص وفحصها ب fsck عند اللزوم
وتشغيل الذكرة الافترضية swap و ضبط الساعة ...
ثم تأتي نصوص الإقلاع الخاصة بمستوى تشغيل معين وهي في Slackware باسلوب BSD أي
- /etc/rc.d/rc.S : طور المستخدم الوحيد
- /etc/rc.d/rc.M : الطور متعدد المستخدمين
- /etc/rc.d/rc.X : الطور الرسومي
أو تكون باسلوب SysV كما في ريدهات وديبيان أي ملف وحيد اسمه /etc/rc.d/rc يتم تمرير
رقم المستوى له وعلى ضوئه يتصرف
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
وهو الملف المسؤول عن تشغيل/إغلاق كل المراقبات daemons
(إختصار ل Disk And Execution Monitor وهي ككلمة تعني شبح إذ يعتقد بأن يونكس يملك قوى فوق طبيعية)
واحداً واحداً.
للانتقال من مستوى لآخر نستعمل الأداة /sbin/telinit ونمرر لها الرقم
4.3.8 ملف fstab
يعمل أحد نصوص الإقلاع على تشغيل mount -a
الذي بدوره يقرأ الملف fstab (اي file systems table)
أي /etc/fstab
وهو بالصيغة التالية
# this is /etc/fstab by <alsadi[at]gmail.com>
# this is a comment
| # device | mount-point | type | options | dump pass |
| /dev/hda7 | / | ext3 | defaults,errors=remount-ro | 0 1 |
| /dev/hda1 | /mnt/win_c | vfat | defaults,umask=0 | 0 0 |
| /dev/fd0 | /mnt/floppy | auto | defaults,noauto,user | 0 0 |
| /dev/cdrom | /mnt/cdrom | iso9660 | defaults,noauto,ro,user | 0 0 |
| proc | /proc | proc | defaults | 0 0 |
| /dev/hda8 | none | swap | sw | 0 0 |
ملاحظة يجب أن تكون المجلدات win_c و floppy موجودة لتنجح.
جرب هذه الأوامر
bash$ man fstab
bash$ man mount
bash$ mount
bash$ cat /proc/mounts
bash$ su root
password :
bash# fdisk -l
bash# cat /proc/partitions
bash# mkdir /mnt/win_c
bash# mount /dev/hda1 /mntt/win_c -t auto
bash# exit
لاحظ أن mount بدون شيء تعطي معلومات عن الأقسام والأجهزة المعرفة حاليا
ولاحظ أن fdisk -l تعرض الأقسام الموجودة
وأن الملف /proc/partitions
4.3.9 برامج الخدمات services
قلنا أن الملف rc يقوم بتشغيل أو إيقاف كل المراقبات daemons المطلوبة
في ذلك المستوى ويتم ذلك فعلياً من خلال نصوص الملفات (shell scripts)
الموجدة في المجلد المقابل لرقم مستوى التشغيل مثلاً
/etc/rc.d/rc2.d/
(طبعا استبدل 2 بأي رقم آخر)
فيوقف تلك التي تبدأ ب K (اختصار ل‘KILL‘) ويشغل تلك التي
تبدأ ب S (اختصار ل‘START‘)
مثلاً في مستوى 0 أو 6 (إغلاق الجهاز وإعادة تشغيله) كل الملفات تبدأ ب K
أما في 5 تكون كلها تبدأ ب S.
والتي يسمح بتنفيذها(أي أنها تحمل إذن التنفيذ) تسمى هذه الملفات خدمات service
وهما عبارة عن رابط إلى ملف نصي تنفيذي موجود في
/etc/rc.d/init.d/
مثلاً /etc/rc.d/init.d/random
والرابط يكون
/etc/rc.d/rc2.d/S51random
الرقم 51 من أجل التحكم في ترتيب تشغيلها.
يقبل هذا البرنامج معاملاً مثل start و stop و restart و status
فإذا كان مطلوباً أن يوقفه يمرر له stop وإذا كان مطلوباً
أن يشغله يمرر له start
# part of simple rc
# take runlevel from argument 1
runlevel=$1
# distro links "/etc/rc$runlevel.d/" to "/etc/rc.d/rc$runlevel.d/"
# like /etc/rc.d/rc2.d/ & /etc/rc2.d/
for i in /etc/rc$runlevel.d/K*
do
[ -x $i ] && $i stop
done
for i in /etc/rc$runlevel.d/S*
do
[ -x $i ] && $i start
done
تلميح
[ -x $i ] تعني افحص هل الملف قابل للتنفيذ
(هل يسمح لي بتشغيله)
إذا نجح الفحص عندها نفذ ما بعد ‘&&‘
تلميح
الملفات في توزيعتك أكثر تعقيداً لأنها تستعمل وظائف
خاصة لتجميل وترجمة الرسائل. هذه الوظائف موجودة في ملف اسمه
/etc/init.d/functions
مثل وظيفة لطباعة [OK] بالأخضر عند النجاح و
[Fail] بالأحمر عند الفشل
وربما في ماندريك المعرب [فشل]
بدلاً من كتابتها في كل ملف.
يوفر ديبيان أداة start-stop-daemon التي تستخدمها نصوص
rc، إنها ذكية وتوفر العديد من الخيرات، مثلاً
قبل أن تشغل المراقب تتأكد من أنه لا يعمل من قبل، ولكن عند
ايقافه تمنع أي محاولة لتشغيله في الفترة الانتقالية قبل
اكتمال ايقافه. مستخدمي التوزيعات المبنية على ريدهات
يمكنهم كتابة service متبوعة باسم الخدمة والمعامل
لتشغيلها أو ايقافها مثلاً service gpm start لتشغيل gpm.
في العادة تعمل هذه النصوص على إيقاف المراقب من خلال kill
أو تقوم بعملية الإلغاء المناسب مثلاً umount
وللتشغيل تعمل على استدعاء المراقبات daemon مثل talkd أو بعمليات
تفعيل مناسبة مثل mount أو إضافة وحدة module (جزء من النواة يمكن تحميله أثناء العمل)
بواسطة insmod أو modprobe تسمى هذه الوحدة تعريفاً ولك هذه التسمية ليست دقيقة.
لأن module قد يكون طريقة تشفير مثلاً.
هذه الوحدات موجودة في دليل فرعي من /lib/modules
ثم إصدار النواة uname -r
حيث تجد ملفات o أو ko (في الأنوية 2.6) لتفعيل هذه وحدة اكتب
modprobe foo حيث foo اسم الملف الهدف object file
للوحدة دون الدليل ودون o أو ko. لعرض الوحدات المحملة حالياً lsmod و rmmod foo لإزالة الوحدة foo.
للحصول على وصف لها modinfo -d foo
ولمعرفة ما تأخذ من معاملات modinfo -p foo
أما insmod فهي طريقة قديمة لما يقوم به modprobe.
التوزيعات تستخدم أدوات (مثل kudzu من ريدهات و Discover المستخدم في ديبيان)
لتحديد العتاد وإضافة الوحدة المناسبة له بواسطة modprobe.
كما أن العديد من نصوص الإقلاع ونصوص الخدمات في أغلب التوزيعات يتم
التحكم بها عبر متغيرات بيئة داخلية تحدد قيمتها في ملف
داخل فروع /etc/sysconfig/ في التوزيعات المبنية على ريدهات
أو /etc/defaults/ في ديبيان، حيث يتم احتواء هذه الملفات في عملية تسمى sourcing
باستعمال أمر source المبني داخل bash (ويسمى أيضاً عملية النقطة).
وتأتي كل توزيعة ببرنامج رسومي تفاعلي لإدارة الخدمات (تفعيلها
أو تثبيطها في مستوى تشغيل معي)
ربما تجده في قائمة system settings باسم services
(اسم البرنامج في فيدورا هوsystem-config-services)
كما يمكنك استعمال حزم مستقلة للعديد من التوزيعات مثل
ksysv و gnome-system-tools.
توفر التوزيعات المبنية على ريدهات (بما في ذلك فيدورا Fedora و Mandriva)
أداة من سطر الأوامر اسمها chkconfig لهذا الغرض
مثلاً لتفعيل خدمات gpm في المستوى 2 و 3 اكتب
chkconfig --level 23 gpm on
ولتثبيطه في المستويات الباقية (أي 0 و1 و4 و5 و6) اكتب
chkconfig --level 01456 gpm off.
ليس من الصعب أن تقوم بذلك يدوياً، كل ما عليك لإعداد خدمة من الصفر
هو عمل وصلة للملف في مجلد كل مستوى التشغيل تريد أن يعمل فيه مثلاً 2-5
بحيث يبدأ اسمه ب S وعدد من منزلتين ثم اسم الخدمة
مثلاً ln -s /etc/init.d/gpm /etc/rc2.d/S57gpm
بينما يبدأ ب K في البقية (مثلاً 0 و 6 بأمر يشبه ln -s /etc/init.d/gpm /etc/rc0.d/S42gpm)
ثم إعطاء الإذن بالتنفيذ بكتابة chmod +x /etc/init.d/gpm.
ولتثبيط الخدمة في جميع مستويات التشغيل امنع تنفيذها بكتابة
chmod -x /etc/init.d/gpm.
إذا كانت خدمة معدة بالشكل الصحيح وكنت تريد تريد تفعيلها في بعض مستويات التشغيل
قم بتغيير اسم الوصلة في تلك المستويات لتبدأ بحرف S ولتثبيطها غيّر اسمها
لتبدأ بحرف K، مع ملاحظة أن الرقم يجب أن يصبح 99 - الرقم القديم
لأن ما ينفذ أخيراً يوقف أولاً.
من أجل السولة والتوافقية بين التوزيعات يلاحظ وجود وصلة باسم
/etc/rc1.d لتشير إلى /etc/rc.d/rc1.d
... إلى آخر الستة مستويات تشغيل ،
كما ونجد وصلة باسم /etc/init.d
تشير إلى /etc/rc.d/init.d
(قد تكون الوصلات في توزيعة هي الأدلة في أخرى).
ومن الأمثلة على الخدمات services برنامج لتفحص بطارية الجهاز المحمول
وإدارة الطاقة apm وآخر من أجل تعريف الصوت alsa
وآخر من أجل الماوس في ال console (اسمه gpm) وبرامج تعريب ال console (اسمه acon)
وآخر لجدولة المهام في زمن محدد اسمه atd وغيرها الكثير.
4.3.10 تسجيل الدخول بمعرف وكلمة سر
ثم يتم تشغيل عدد من الطرفيات الوهمية VT (أي Virtual Terminal) وهي شاشات من منفصلة
يتم التنقل بينها ب ctrl+alt+Fn ( و Fn هي F1 F2 F3 ...)
يتحكم في عددها مجموعة من الأسطر في ملف inittab وهذا مثال
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
لاحظ أن عددها 6 إذا أردت جعلها 4 اشطب آخر سطرين أما إذا أردت جعلها 7 أضف
سطر مع تغيير أول رقم وآخر رقم.
الرقم الأول للعد والتعريف (لا معنى له) ،ومجموعة الأرقام الأخرى 2345 هي المستويات التي ستعمل فيها ،أما
/sbin/mingetty tty1
فهي اسم البرنامج الذي سينفذ، أما respawn تعني أنه إذا أُغلق هذا البرنامج
فإن init سوف يقوم بتشغيله مرة اخرى
إن ttyN (مثل tty1 ) عبارة عن الجهاز الذي يمثل ال VT لتفهم ذلك جرب الأوامر التالية
Press ctrl+alt+F1 and login
bash$ echo "Hello Ali"
Hello Ali
bash$ echo "Hello Ali" >> /dev/tty2
Nothing printed , press ctrl+alt+F2 ,and woo
قلنا أن هناك عدد من الطرفيات VT تشغل برنامج getty وعادة يكون mingetty مهمتها عرض رسالة ترحيبية
(
وهي موجودة في ملف
/etc/issue
ويمكنها أن تحتوي ألوان
لا تتعب نفسك في تغييرها لأن هناك بعض الأسطر في rc.sysinit تعيدها إلى ما كانت عليه
والسبب طبعاً أن هذه الرسالة في غالب تحتوي اسم
وإصدار النواة والتي قد تتغير لهذا تقوم نصوص الإقلاع بإعادة
تكوين هذا الملف
)
ثم تسأل المستخدم
عن اسم الدخول و كلمة السر ثم التحقق من أن الكلمة صحيحة وتشغيل البرنامج الافتراضي
وهو عادة مفسر لغة bash الذي تستخدمه لإدخال الأوامر
(يمكن تغييره بالأمر chsh)
، طبعا يبدأ من الدليل البيت home folder و الملف الذي يتحكم في ذلك هو passwd قد تجد فيه شيئا كهذا
root:x:0:0::/root:/bin/bash
operator:x:11:0:operator:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
myname:x:1000:100:mygroup:/home/myname:/bin/bash
الخانة الأولى هي اسم المستخدم و الخانة هي كلمة السر المشفرة
الرقمان التاليان هما رقم المستخدم ( أي UID ) ورقم المجموعة(أي GID) التي ينتمي لها،
الحقل الخامس هو المجموعات الإضافية التي يعتبر عضواً فيها.
والحقلان الأخيران هما البرنامج الذي سيشغله ليكون مفسراً للأوامر (في الأغلب bash)
والمكان(الدليل البيت home) الذي سيبدأ فيه في حال
نجاحه في الدخول، ارجع إلى 4.9 إدارة النظام للمزيد من التفاصيل.
تلميح
أنا لا أتحدث هنا عن الدخول من الواجهة الرسومية X وإنما الدخول إلى runlevel 2
أو الضغط على ctrl+alt+Fn
ال root دائما رقمه صفر ورقم مجموعته صفر.
لاحظ وجود مستخدمين أنت لم تضفهم إنهم لتنظيم علاقات البرامج
من الضروري أن يكون مفسر الأوامر لهم هو برنامج nologin أو أي برنامج يمنع الدخول لهم
كما أن أرقامهم UID تكون أقل من 100.
هكذا مستخدمين موجودين ليمثلوا صلاحيات برامج معينة
بحيث نتحكم في صلاحياته وكأنه مستخدم.
لتغير كلمة سر مستخدم اكتب passwd متبوعة بمعرف ذلك المستخدم(اسمه المختصر).
هذا الملف مقروء للجميع (مثلاً ليعرف رقم معرف مستخدم UID ما)
لهذا توضع كلمات السر في ملف آخر (على الرغم من أنها مشفرة) يسمى
ملف الظل shadow الذي لا يقرأه إلا الجذر،
ومن الضروري أن لا يكون هذان الملف قابلان للكتابة إلا من قبل المستخدم الجذر
أي أن يكون الإذن الخاص بهما هو 644 و 600 على الترتيب.
وأن يكونا مملوكين للمستخدم الجذر وننصح بأن يكونا للمجموعة الجذر أيضاً.
bash# ls -l /etc/passwd
bash# cd /etc
bash# ls -l passwd shadow
-rw-r--r-- 1 root admin 30 Feb 2003 passwd
-rw-r--r-- 1 root admin 30 Feb 2003 shadow
bash# chmod 644 passwd
bash# chmod 600 shadow
bash# chown root:root passwd shadow
ls -l /etc/passwd
-rw-r--r-- 1 root root 30 Feb 2003 passwd
-rw------- 1 root root 30 Feb 2003 shadow
عند كل الدخول إلى bash يتم تنفيذ الملفات التالية
/etc/profile
/etc/profile.d/*.sh (only exectable)
~/.bashrc
وهي تحتوي على بعض الإعدادات وتحدد قيمة متغيرات البيئة العامة
(بعضها يكون له قيمة سابقة حددها /etc/login.defs)
وتقوم بعمل اسماء بديلة (مستعارة) تجعل عملك سهلاً، قد تشبه هذا الجزء:
export PATH=/bin:/usr/bin:/sbin:/usr/sbin:.
alias ls="ls --color -F -h"
alias df="df -h"
alias cp="cp -i"
التي تقوم ب
- السطر الأول يحدد المكان الذي يبحث فيه عن البرامج عند كتابة أمر بدون مسار
ولاحظ أن : تفصل المسار عن الآخر وأن . تعني لدليل الحالي ويجب أن تكون في آخر الأولويات
- الثاني يطلب من bash استبدال ls ب ls --color -F -h
مما يجعل الملفات تظهر ملونة
- الثالث يجعل لأمر df يعرض المساحة المتاحة بطريقة مفهومة أكثر
أي إذا كانت 1024 فانه يكتب 1K وإذا كانت أكبر بكثير يكتب بالميغا أو الغيغا
- الرابع يجعل امر النسخ يسألك عن الملفات الموجودة مسبقا قبل الكتابة مكانها
4.3.11 الدخول إلى إكس الشاشة الرسومية
وبمجرد تشغيل getty من هنا وقبل أن تدخل اسمك تعمل الشاشة الرسومية من
هناك، (في مستوى تشغيل مناسب، 5 مثلاً) وذلك لأن ملف inittab به سطر يشبه
(السطر من slackware)
x:5:respawn:/etc/rc.d/rc.X
لاحظ الرقم 5 في الحقل الثاني مما يعني فقط في مستوى التشغيل الخامس،
أو في توزيعات أخرى قد يستدعي نفس نص rc مع تمرير 5 له كما ذكرنا سابقاً،
حيث هناك جزء منه يفحص مستوى التشغي فإذا كان 5 فإنه يشغل إكس.
في كلا الحالتين سيكون الجزء الذي يشغل إكس يشبه ما يلي:
if [ -x /usr/bin/gdm ]
/usr/bin/gdm
elseif [ -x /usr/bin/kdm ]
/usr/bin/kdm
elseif [ -x /usr/bin/xdm ]
/usr/bin/xdm
else
echo "error blah blah"
fi
إنه يفحص وجود مدراء العرض display managers (البرنامج الذي يدير الدخول إلى الجلسة
الرسومية)، مثل GDM ويشغل واحد منهم. وهم :
- kdm وهو من مجموعة برامج kde هو التلقائي في Mandrake
ولكن في بعض الإصدارات ماندريك تكون هناك نسخة معدلة منه ،
تكون هي التلقائية، إضافة للبرنامج الأصلي.
- gdm هو التلقائي في RedHat وهو من مجموعة برامج gnome
- xdm وهو بشع وسريع ولا يعطي خيارات وهو من البرامج التي تأتي مع XFree86
- wdm أجمل من xdm له منظر يشبه WindowMaker
في ماندريفا Mandriva يكون هذا الجزء داخل خدمة اسمها dm
(اختصاراً ل display manager).
ديبيان يقوم بتشغيل المدير المفضل لديك كأي خدمة أخرى
تسمى xdm أو gdm أو kdm أو wdm
حيث يكون واحد منهم على الأكثر مفعّلاً.
مدير العرض بدوره يشغل إكس باستدعاء نص
(ربما /etc/X11/xinit/xserverrc بحسب توزيعتك)
التي بها سطر يشبه exec /usr/bin/X11/X -dpi 100،
ديبيان تمرر له الخيار -nolisten tcp
لتثبيط الاستماع لمنافذ TCP عبر الشبكة (مثل 6000) للمزيد من الأمن.
بعد ذلك يتم تحميل الجلسة التي طلبتها (مثلاً KDE أو GNOME)
بواسطة /etc/X11/Xsession.
إذا دخلت مستوى تشغيل دون إكس، يمكنك تشغيل إكس بكتابة
startx الذي يستخدم الأداة xinit التي تحتوي
/etc/X11/xinit/xinitrc وتحاول
بدء الجلسة المعرفة في ~/.xinitrc من بيت
المستخدم إن وجد وإلا فإنه يشغل الجلسة التلقائية المعرفة في
/etc/X11/Xsession
4.3.12 رسومات قبل ودون إكس
في قديم الزمان كان برنامج تركيب توزيعة ريدهات 7.x
تظهر صورة بِطريق قبل دخول إكس! (بل وحتى قبل تشغيل init)
أيضاً في توزيعة ماندريك منذ 8.2 (وربما قبل) عند إقلاع التوزيعة وأثناء تحميل الخدمات تجد خلفية
زرقاء رسومية ومؤشر progress bar رسومي حتى قبل دخول إكس وبعد الخروج منه!
وفي الكثير من Live CDs تجد في سطر الأوامر الحقيقي console
يوجد ظل بِطريق كما أن هناك عدد كبير من الأسطر!
كل هذا يتم بواسطة frame buffer device (انظر http://linux-fbdev.sf.net)
يتم تفعيله بإضافة الوحدة المناسبة باستعمال modprobe
متبوعة باسم الوحدة من بين تلك الموجودة في دليل video الفرعي، لعرض قائمة بها
اكتب ls /lib/module/$(uname -r)/kernel/video،
اكتب 'modprobe vga16' أو 'modprobe vga16fb' (في أنوية 2.6)
لتشغيله في طور 640x480x4 (أي 16 لون).
قد تجد واحد عام generic اسمه VESA مبني في النواة (دون الحاجة لوحدة تعريف)
يتم تشغيلها بواسطة vga=0301 في برامج الإقلاع boot loader
مثل LILO أو GRUB (إذا لم تكن بطاقة العرض تدعم معايير VESA أو إذا وجد
لها وحدة أفضل عليك تمرير video=XXXX للنواة),
الرقم 0311 بالست-عشري (على عكس العرف الشائع فإن الصف يدل على الست-عشري وليس الثماني)
هنا هو لتحديد الكثافة النقطية
لتكون 640x480x16
و يمكن أن نستعمل العشري 785 دون الصفر في البداية لنفس الهدف.
هذا جدول بالست-عشري لأهم الأطوار:
Colours 640x400 640x480 800x600 1024x768 1152x864 1280x1024 1600x1200
--------+--------------------------------------------------------------
4 bits | ? ? 0302 ? ? ? ?
8 bits | 0300 0301 0303 0305 0161 0307 031C
15 bits | ? 0310 0313 0316 0162 0319 031D
16 bits | ? 0311 0314 0317 0163 031A 031E
24 bits | ? 0312 0315 0318 ? 031B 031F
32 bits | ? ? ? ? 0164 ?
الأداة fbset تمكنك من تعديل خصائص وحدة ال frame buffer مثل الكثافة
النقطية وموقع(توسيط) الجزء المرئي (لا تعمل مع وحدة VESA العامة).
مثلاً لعرض معلومات عن الطور الحالي اكتب fbset دون معاملات.
لمعلومات عامة عن كل الأطوار fbset -i
والخيار x لعرض معلومات عن التزامن (تلزم في إكس)
لاختيار أحد الأطوار يكفي ذكر اسمه (موجودين في /etc/fb.modes)
مثلاً fbset 800x600@65.
الخيار g متبوع بالأبعاد والأبعاد الافتراضية والعمق اللوني (بالبت) مثل
fbset -g 800 600 800 600 16
الخيار move متبوع بأحد الإتجاهات right أو left أو up أو down
ثم بالخيار step لتحديد المقدار من أجل تحريك الجزء المرئي لتوسيطه.
الخيار accel متبوع ب true أو false لتفعيل أو تثبيط التسريع.
إذا كان هناك أكثر من بطاقة عرض حدد أيها بالخيار fb متبوعاً بالجهاز مثلاً
fbset -i -fb /dev/fd0
انظر كتيبات fbset(1) fb.modes(5) fbdev(4)
في الإصدارات 3.x من XFree86 (وما قبله)
كان هناك أكثر من خادم إكس، واحد لكل نوع من البطاقات، في حين
أن الأحدث مثل 4 و X.org لها خادم وحيد متعدد التعاريف (عبر وحدات modules).
إن برنامج التركيب الرسومي في ريدهات لينكس 7.x يستخدم
XFree86 3.x وبسبب محدودية المساحة
فإن هناك مجال لخادم إكس واحد فقط(في مرحلة التركيب) ولكنه يعمل
على أغلب بطاقات العرض وذلك باستعمال خادم frame buffer X server (اسمه XF86_FBDev)
يستغل دعم النواة للعديد من البطاقات عبر frame buffer devices
(مثل وحدة VESA العام)
وبعد التركيب يكون النظام كاملاً فيتم استخدام خادم إكس الخاص
ببطاقة العرض. على الرغم من أن وثائق نواة لينكس في هذا المجال
(التي يقوم عليها Geert Uytterhoeven)
تدعي أن: "خادم Frame buffer X server (واسمه XF86_FBDev)
هو أهم تطبيق يستخدم جهاز frame buffer device."
ولكن هذا لم يعد صحيحاً في XFree86 4 لأنه يدعم عدد كبير
من البطاقات ويدعم التسريع بشكل أفضل كل ذلك عبر خادم وحيد
وتعريف VESA فيه أفضل من VESA frame buffer عبر النواة
(على الأقل تستطيع تغيير الكثافة النقطية).
في هذه الأيام لا يوجد أي توزيعة رئيسية تستخدم frame buffer في إكس
من تلقاء نفسها. ومع ذلك لا يزال Frame buffer مستخدماً
في العديد من التوزيعات لتوفير مؤشر إقلاع جميل
وصورة خلفية قبل تشغيل إكس ولتوفير شاشة سطر أوامر
بعدد كبير من الأسطر (تحتها خلفية).
تلميح
الإقلاع الرسومي في فيدورا لا يستخدم frame buffer بل إكس.
كما أنه مفيد جداً في الأنظمة المدمجة embedded systems
مثل تطبيقات GtkFB و Qt/Embedded (مثل بيئة Qtopia،انظر www.trolltech.com/products/qtopia).
هناك مشروع مختلف في موضوع مشابه اسمه Direct frame buffer
يبدو أنه يدعم التسريع (أنا غير واثق).
طريقة أخرى للرسوميات دون إكس هي استعمال
مكتبة SVGA library، إنها تستخدم الوصول المباشراً لعتاد العرض لتوفير
العمليات الدنيا على أطوار VGA و SVGA القياسية.
تعمل على عدد قليل من العتاد وأهم تطبيقاتها الألعاب مثل lxdoom.
مراجع
|