تعريف الماسح الضوئي (سكانر) في نظام لينكس
تجربة على ماسحة Benq 5000
مقدمة
في هذه المقالة سنرى كيف نجعل الماسحة الضوئية تعمل في نظام غنو/لينكس.
أنا أستخدم عدة توزيعات لينكس مثل Ubuntu 7.04 وفيدورا كور Fedora Code 5.0،
لكن هذا الإجراء يفترض أن يعمل على أي نواة لينكس حديثة ذات نظام
udev
مفعّل.
سنناقش ماسحة BenQ 5000 على وصلة USB الماسحات الأخرى يفترض أن تكون مماثلة.
هناك 3 أمور مهمة تتعلق بالماسحات، أولها أن تمتلك التعريف العامل في عالم المستخدم user-land back-end.
ثانيها أن يتم تحميل ملف ال firmware إلى الماسحة عند اللزوم. وأخيراً أن تكون الأذونات معدة بشكل سليم.
في لينكس لدينا نظام "عاقل SANE" للماسحات، وهو نظام متعدد المنصات
(يقابل نظام TWAIN في ويندوز).
كلمة SANE اختصار للعبارة Scanner Access Now Easy أي الوصول للماسحة أصبح الآن سهلاً.
وهناك عدة أساليب للوصول إليه، بالتأكيد في مقدمتها ادوات سطر الأوامر كما أن لدينا
برنامج XSANE ذي واجهة
GTK+
الرسومية، ولدينا واجهة أخرى تستخدم QT من أجل KDE تسمى "Quite insane!"
(وعلى الرغم من الاسم الذي يعني "جنون مطلق" إلا أنها رائعة)
وغيرها الكثير.
لابد أنك تعرف جمب GIMP افضل اداة أعرفها لتحرير الصور ومعالجتها.
فيه إضافات plug-ins للتعامل مع XSANE و "Quite insane"
ولكن في أغلب الأحيان لا تجد إلا الأول مركب مسبقاً.
تجدها تحت قائمة
File -> Acquire
في شاشة جمب الرئيسية (التي تحتوي صندوق الأدوات).
الكشف Detection
تستطيع رؤية كل أجهزة USB عبر تفحص محتويات الملف الوهمي
/proc/bus/usb/devices.
ولأننا نبحث عن ماسحة سأبحث عن كلمة "Scan" وأعرض ما يحيط بها من سياق،
قد تحب استخدام محررات نصوص رسومية GUI، لكن لما التعب؟! إليك أمر واحد يفعل كل ذلك
(فقط اطبع السطر الغامق ما بعد المحث "bash$")
bash$ grep -A6 -B5 -i 'Scan' /proc/bus/usb/devices
T: Bus=05 Lev=01 Prnt=01 Port=04 Cnt=01 Dev#= 6 Spd=480 MxCh= 0
D: Ver= 1.00 Cls=ff(vend.) Sub=ff Prot=ff MxPS= 8 #Cfgs= 1
P: Vendor=04a5 ProdID=20f8 Rev= 1.15
S: Manufacturer=Color
S: Product= FlatbedScanner 22
C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 8 Ivl=0ms
E: Ad=83(I) Atr=03(Int.) MxPS= 8 Ivl=16ms
تخبرنا بأن الماسحة موصولة وتعمل، كما وتخبرنا أين هي موصولة
(في هذه الحالة الجهاز السادس على الناقل الخامس T: Bus=05 ... Dev#= 6 ...
وهو رقم يتغيّر عند إعادة التشغيل أو إعادة وصل الماسحة)
وما هو معّرف ID البائع والمنَتج.
(في هذه الحالة 04a5
وهي معرف ماسحات Acer التي أصبحت ماسحات BenQ و
20f8 التي تشيل للطراز BenQ 5000).
إذا كنت ترغب في اللعب بالنواة ونظام udev، متّع نفسك بتجربة الأوامر التالية:
bash$ cat /sys/class/usb_device/usbdev5.6/device/product
FlatbedScanner 22
bash$ cat /sys/class/usb_device/usbdev5.6/device/idProduct
20f8
bash$ udevinfo -q path -n bus/usb/005/006
/class/usb_device/usbdev5.6
bash$ udevinfo -q all -p /class/usb_device/usbdev5.6
P: /class/usb_device/usbdev5.6
N: bus/usb/005/006
S: scanner-usbdev5.6
bash$ udevinfo -a -p /class/usb_device/usbdev5.6 | less
... display long information تعرض معلومات كثيرة
لاحظ أنه عليك أن تضع مكان 5 و 6 برقم الناقل والجهاز كما ظهر في الأمر الأول.
نظام udev يشير للأجهزة إما بالاسم
(في هذه الحالة bus/usb/005/006)
أو المسار (في هذه الحالة
/class/usb_device/usbdev5.6
وهو ما بعد /sys/... في الاسم الكامل)
قد يكون للجهاز روابط symbolic links تجعل الإشارة له
أسهل أو بطريقة مريحة أكثر كما في scanner-usbdev5.6
(الاسم الكامل هو /dev/scanner-usbdev5.6)
يتم التحكم بكل هذا عبر مجموعة قواعد rules في نظام udev.
الأمر قبل الأخير يخبرنا بكل ذلك، حيث
P: قبل المسار،
N: قبل الاسم، S: قبل الروابط.
تلك كانت النواة، لكن يجب أن تتوفر أدوات في عالم المستخدم user-land لتأخذ الصورة.
إنه الطرف الخلفي back-end في نظام SANE.
إذا كان كل شيء يسير كما يجب، فإن أداة سطر الأوامر scaneimage
يجب أن تتمكن مع كشف الماسحة بالخيار -L،
على الأقل عند تنفيذه باسم الجذر root (المستخدم الخارق super user).
أصبح جذراً
(وذلك بكتابة "su" ثم أجب بكلمة سر الجذر أو إذا كان حساب الجذر ملغياً كما في
Ubuntu اكتب
"sudo su" أو
"sudo -i" ثم أجب بكلمة سرك)
ثم جرب الأمرين (فقط اطبع النص الغامق
بعد محث Bash للجذر وهو bash#)
bash# scanimage -L
device `snapscan:libusb:005:006' is a Acer FlatbedScanner22 flatbed scanner
bash# sane-find-scanner
#... long long tips الكثير من النصائح ...
found USB scanner (vendor=0x04a5 [Color], product=0x20f8 [ FlatbedScanner 22]) at libusb:005:006
#... long long tips الكثير من النصائح ...
تحميل ال Firmware
لكي نعرف ما هو الطرف الخلفي (التعريف) في SANE الذي نحتاج فلنبحث عن اسم "BenQ"
بل والأفضل عن معرّف المنتج Product ID الخاص بالماسحة
(وهو 20f8 في حالتنا)
bash$ grep -i '20f8' /etc/sane.d/*
/etc/sane.d/snapscan.conf:usb 0x04a5 0x20f8
إنه يخبرنا أن snapscan هو الطرف الخلفي المسؤول عن هكذا ماسحات (وربما عن غيرها) وأن الملف
/etc/sane.d/snapscan.conf
يحتوي الإعدادات الخاصة بالتعريف.
يخبرنا ذلك الملف بأن تلك الماسحات تحتاج نقل ال firmware من الحاسوب إلى الماسحة.
وقد لاحظت أنها لا تحتاج تحميل firmware من جديد
طالما أنها مضاءة.
(مثلاً إذا كان فيدورا كور Fedora Core معداً جيداً ليحمل ال firmware واستعملت فيه
فإذا إعدت إقلاع الحاسوب إلى Ubuntu ولم يكن معداً ليحمل ال firmware مع ذلك ستعمل).
ليس صعبا الحصول على ال firmware، ضع القرص المدمج الذي يأتي مع الماسحة
وضمه ثم ابحث فيه عن ملف .bin
(غالباً ما يحمل رقم المنتج ورقم الإصدار)
لعمل ذلك استعمل الأمر التالي
(قد تحتاج لتغيير /media/cdrom0 بالذي عندك)
bash$ cd /media/cdrom0
bash$ find ./ -iname '*.bin'
...
./driver/bin/20f8v115.bin
...
انسخ هذا الملف على نظام الملفات على القرص الصلب
(مثلاً إلى /usr/share/sane/snapscan/)
وذلك بكتابة الأمر باسم الجذر
(وقد أخبرتك كيف تصبح جذراً من قبل)
في نفس مجلد القرص المدمج (أي cd /media/cdrom0 ثم تابع إلى البقية)
bash# mkdir -p /usr/share/sane/snapscan/
bash# cp -v driver/bin/20f8v115.bin /usr/share/sane/snapscan/
عليك تغييّر driver/bin/20f8v115.bin لتصبح اسم
الملف الذي وجدناه قبلاً
(أو اضغط TAB ليكمل BASH الاسم عنك).
إذا كنت تجد هذا معقداً تستطيع استخدام الواجهة الرسومية وذلك بتشغيل مدير الملفات في طور المستخدم الخارق
"file manager in super-user mode" ثم نسخ ثم لصق الملف.
في غنوم مدير الملفات هو nautilus وفي KDE هو konqueror.
الآن نخبر التعريف أين وضعنا ملف firmware،
افتح ملف إعداد الطرف الخلفي (أي /etc/sane.d/snapscan.conf)
في محرر النصوص المفضل لديك
(وبصلاحيات الجذر، مثلاً بالأمر "gksu gedit /etc/sane.d/snapscan.conf" أو "gksudo" مكان "gksu" ... إلخ إذا كان حساب الجذر ملغياً)
ثم عدل هذا السطر (الذي يشير إلى ملف غير موجود) ليشير إلى الملف الذي نسخناه
firmware /usr/share/sane/snapscan/20f8v115.bin
ثم احفظ الملف.
جرب الآن أن تكشف عن الماسحة الضوئية من خلال SANE، باستعمال
scanimage -L أو sane-find-scanner
(بصلاحيات الجذر) يجب أن تعمل الآن.
الصلاحيات والأذونات
بالتأكيد، مسح الصور ليس من الأشياء التي تقوم بها وأنت جذر،
لهذا يجب أن نجعل الأمرين الأخيرين يعملان مع المستخدمين العاديين،
لكن الأذونات الموضوعة على ملفات الأجهزة المقابلة لماسحة USB متزمتة جداً
لهذا لا يمكنك ذلك.
bash$ scanimage -L
No scanners were identified. If you were expecting something different,
check that the scanner is plugged in, turned on and detected by the
sane-find-scanner tool (if appropriate). Please read the documentation
which came with this software (README, FAQ, manpages).
في الحقيقة، السبب هو أن هذه الماسحة ليست موجودة ضمن قائمة قواعد
udev للماسحات، لهذا لا يسمح النظام إلا للجذر بالوصول إليها.
في هكذا حالة قد تفكر في تغير الأذونات الخاصة بملفات الأجهزة لكنك ستواجه مشكلتان
الاولى، أنها قد تفصل وتركب مرة أخرى فتأخذ جهاز USB آخر.
الثانية أن ملفات الأجهزة لم تعد ملفات أجهزة حقيقية بل هي
ملفات وهمية يظهرها نظام udev فعند إعادة التشغيل تعود الأذونات كما حددها
سياسة قواعد udev.
بغرض اللعب قد تحب أن تجرب تغيير الأذونات بكتابة (وانت جذر)
bash# chown root:scanner /dev/bus/usb/005/006 /proc/bus/usb/005/006
bash# chmod 664 /dev/bus/usb/005/006 /proc/bus/usb/005/006
هذا الأمر يعطي مجموعة من المستخدمين اسمها "scanner" صلاحية القراءة والكتابة
عند الوصول للماسحة
(وهناك اقتارح آخر أن تكون أنت ملك الملف بوضع اسم الدخول خاصتك مكان "root:scanner")
جرب الآن المسح أو الكشف عن الماسحة كمستخدم عادي.
الطريقة الصحيحة هي بأن تضع قواعد udev بشكل صحيح.
لدينا قواعد جاهزة من أجل الماسحات في أغلب التوزيعات،
اسم الملف هو /etc/udev/rules.d/??-libsane.rules
(حيث ?? رقم من منزلتين, في Fedora Core يكون 60 وفي Ubuntu يكون 45)
هذا الملف يجب أن يحتوي على مدخلة تشير للماسحة خاصتنا من أجل
أن تطبّق سياسة التوزيعة على مفات الأجهزة الخاصة بها،
ففي فيدورا كور Fedora Core الملف /etc/udev/rules.d/60-libsane.rules
يجب أن تضاف له المدخلة التالية بعد أي سطر يخص أي ماسحة أخرى
(كرر سطر أي ماسحة ثم عدل رقم المعرّفين بدلاً من كتابته كاملاً)
SYSFS{idVendor}=="04a5", SYSFS{idProduct}=="20f8", SYMLINK+="scanner-%k"
وفي ديبيان Debian و Ubuntu (و MEPIS ...إلخ) لدينا الملف
/etc/udev/rules.d/45-libsane.rules
الذي يجب أن يحتوي مدخلة كتالية:
SYSFS{idVendor}=="04a5", SYSFS{idProduct}=="20f8", MODE="664", GROUP="scanner"
لا تتعب نفسك بكتابته فقط كرر السطر الخاص بأي ماسحة ثم عدل المعرفيّن.
الفرق بين السياستين أنه في فيدورا كور فإن مستخدم الطرفية (المستخدم الذي أمام الشاشة الذي وصل الماسحة) هو الذي يملك ملف الماسحة
في حين أنه في Ubuntu فإن أعضاء مجموعة المستخدمين "scanner" تملك تلك الملفات.
الفرق الآخر هو بأنه في فيدورا فإن القواعد تنشئ رابط باسم
"scanner-usbdevX.Y"
في حين أن Ubuntu تعمل على الملفات الأصلية لأن هذه القاعدة تحمل رقم أقل من
رقم القاعدة التي تنشئ ملفات أجهزة ال USB بنكهة الفانيلا
إن جاز التعبير (ملاحظة: الفانيلا نكهة ما لا نكهة له).
تمتع بالمسح
بعد أن لعبنا مع نواة لينكس، وتدربنا على بعض الأوامر آن الأوان أن نعيد تشغيل الحاسوب
(ليس ضرورياً لكن لكي نتأكد أن التغيرات التي قمنا بها كانت دائمة التأثير)
فلنتمتع بالماسحة الضوئية تعمل.
برنامج XSANE مزدحم جداً، عليك أن تبدأ بالنظر إلى نافذة المعاينة preview
(إذا لم تكن موجودة، أظهرها من نافذة XSANE الرئيسية وذلك من قائمة Windows -> Preview أو ما شابه).
هناك الكثير من الخيارات في XSANE، بعضها خاص بالطرف الخلفي الخاص بماسحتك
وأخرى عامة لكل الماسحات وهكذا.
ولأني أرتاح أكثر مع جمب GIMP
، فإني أعاين ثم أحدد المنطق التي أريد مسحها
وأحدد الإستبانة (الدقة) resolution
ثم أقوم بالمسح.
وبعد ذلك أقوم بكل عمليات التحرير من داخل جمب GIMP (على الرغم من أن XSANE غني بالأدوات)
هناك ميزة تسمى "batch scanning"
تسمح لك بأن تمسح العديد من الصور المختلفة دفعة واحدة بحركة واحدة.
قد تظن أحياناً أن XSANE قد تجمد أو علق إلا أن هذا غير صحيح،
السبب ظهر لي عندما قمت بذلك من سطر الأوامر فلاحظت هذه الرسالة:
[snapscan] Scanner warming up - waiting 21 seconds.
أظنها ترجع إلى إدارة الطاقة أو إلى تحميل firmware أو كلاهما.
(بنطبق ذلك على ويندوز ولكن هناك يعلق النظام بأكمله من أجل التحمية!)
كما لاحظ بأنه إذا كان برنامج ما يستعمل الماسحة فإن البرامج الأخرى لا تراها.
في برنامج SANE يوجد العديد من المزايا التي لم تكن لتخطر ببالي،
مثل المسح عبر شبكة عبر مراقب daemon خاص ببرنامج SANE!
(هذه الميزة تكون غير مفعلة أو ملغية من أغلب التوزيعات)
|