sane-scsi(5) SANE Scanner Access Now Easy sane-scsi(5)

sane-scsi - نکاتی درباره آداپتور SCSI برای اسکنرها

این صفحه راهنما شامل نکات و ترفندهای مختلف ویژه سیستم‌عامل در مورد نحوه راه‌اندازی و استفاده از اسکنرهای دارای رابط SCSI است.

برای اسکنرهای دارای رابط SCSI، ممکن است لازم باشد قبل از استفاده از SANE برای نخستین بار، پرونده پیکربندی بک‌اند مربوطه را ویرایش کنید. در بیشتر سیستم‌ها، پرونده پیکربندی باید نام دستگاه عمومی SCSI را که اسکنر به آن متصل است فهرست کند (برای مثال، در لینوکس، /dev/sg4 یا /dev/sge چنین دستگاه عمومی SCSI است). مرسوم است که یک پیوند نمادین از /dev/scanner به دستگاه عمومی SCSI که اسکنر به آن متصل است ایجاد شود. در این حالت، پرونده پیکربندی صرفاً خط /dev/scanner را فهرست می‌کند. برای توضیحات دقیق درباره پرونده پیکربندی هر بک‌اند، لطفاً به صفحه راهنمای بک‌اند مربوطه مراجعه فرمایید (برای مثال، sane-epson(5) برای اسکنرهای Epson،‏ sane-hp(5) برای اسکنرهای HP، و غیره).

برای برخی از سیستم‌عامل‌ها (مانند لینوکس و OS/2)، روش جایگزینی برای مشخص کردن دستگاه‌های اسکنر وجود دارد. این روش جایگزین امکان شناسایی اسکنرها را بر اساس رشته سازنده و مدل SCSI و/یا بر اساس نشانی دستگاه SCSI (شامل شماره گذرگاه، شماره کانال، شناسه و شماره واحد منطقی) فراهم می‌کند. نحو مشخص کردن اسکنر به این روش عبارت است از:

scsi VENDOR MODEL TYPE BUS CHANNEL ID LUN

که در آن VENDOR رشته سازنده SCSI،‏ MODEL رشته مدل SCSI،‏ TYPE رشته نوع دستگاه SCSI،‏ BUS شماره گذرگاه SCSI (که در /proc/scsi/scsi به نام "host" مشخص شده است)، CHANNEL شماره کانال SCSI،‏ ID شناسه SCSI، و LUN شماره واحد منطقی (logical unit number) دستگاه اسکنر است. دو فیلد اول رشته‌هایی هستند که اگر حاوی فاصله خالی باشند باید در داخل علامت نقل‌قول دوتایی قرار گیرند. چهار فیلد باقیمانده اعداد صحیح غیرمنفی هستند. مقادیر صحیح برای این فیلدها را می‌توان با استفاده از ابزارهای ویژه سیستم‌عامل به دست آورد، به عنوان مثال در لینوکس با نگاه کردن به خروجی دستور cat /proc/scsi/scsi. برای ساده‌سازی پیکربندی، می‌توان مقدار یک فیلد را با نماد ستاره (``*'') جایگزین کرد. ستاره این اثر را دارد که هر مقداری برای آن فیلد خاص مجاز است. این می‌تواند باعث شود که یک خط scsi با چندین دستگاه مطابقت داشته باشد. هنگامی که این اتفاق می‌افتد، هر دستگاه منطبق یکی یکی توسط بک‌اند کاوش شده و در صورتی که بک‌اند تشخیص دهد دستگاهی سازگار است، ثبت می‌شود. برای مثال، خط

scsi MUSTEK MFS-06000CX Scanner 0 00 03 00

اسکنر Mustek SCSI را با ورودی زیر در /proc/scsi/scsi متصل می‌کند:

Host: scsi0 Channel: 00 Id: 03 Lun: 00
  Vendor: MUSTEK   Model: MFS-06000CX Rev: 4.04
  Type:   Scanner  ANSI SCSI revision: 0

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

scsi MUSTEK * * * * * *

این اثر را خواهد داشت که تمام دستگاه‌های SCSI در سیستم با رشته سازنده MUSTEK توسط بک‌اند کاوش و شناسایی شوند.

اگر باقی‌مانده یک رشته scsi فقط شامل ستاره باشد، می‌توان ستاره‌ها را حذف کرد. برای مثال، خط زیر معادل خط مشخص‌شده در قبل است:

scsi MUSTEK

در برخی پلتفرم‌ها (مانند OpenStep)، نام‌های دستگاه SANE شکل خاصی به خود می‌گیرند. این موضوع در زیر در بخش مربوط به پلتفرم مربوطه توضیح داده شده است.

هنگام استفاده از یک اسکنر SCSI، اطمینان حاصل کنید که مجوز دسترسی برای دستگاه عمومی SCSI به درستی تنظیم شده باشد. توصیه می‌کنیم گروه "scanner" را به /etc/group اضافه کنید که شامل تمام کاربرانی باشد که باید به اسکنر دسترسی داشته باشند. سپس مجوز دستگاه باید برای اجازه دسترسی خواندن و نوشتن گروهی تنظیم شود. برای مثال، اگر اسکنر در دستگاه عمومی SCSI /dev/sg0 قرار دارد، دو دستور زیر مجوز را به درستی تنظیم می‌کنند:

$ chgrp scanner /dev/sg0
$ chmod 660 /dev/sg0

هنگامی که سیستم شما از فایل‌سیستم دستگاه (devfs) استفاده می‌کند، باید /etc/devfs/perms را ویرایش کنید. در آنجا باید خط

REGISTER ^sg[^/]* PERMISSIONS root.root 0600

را جستجو کرده و خط جدیدی اضافه کنید (برای مثال برای تغییر مجوزهای sg4):

REGISTER ^sg4 PERMISSIONS root.scanner 0660

پیکربندی خودکار با استفاده از خطوط "scsi *" در پرونده‌های پیکربندی تنها در صورتی کار می‌کند که کاربری که فرانت‌اند را اجرا می‌کند دسترسی خواندن/نوشتن به /dev/xpt0 داشته باشد. در عوض، می‌توانید یک پیوند /dev/scanner به دستگاه مناسب /dev/uk نیز برقرار کنید.

گزارش شده که تحت FreeBSD 2.2.2R با درایور aha به خوبی کار می‌کند.
گزارش شده که تحت FreeBSD 2.2.2 به خوبی کار می‌کند.
اسکنر به درستی کاوش می‌شود اما هرگونه تلاش برای دسترسی به آن کل سیستم را متوقف می‌کند (hang) . به نظر می‌رسد چیزی وقفه‌ها را غیرفعال کرده و سپس آن‌ها را مجدداً فعال نمی‌کند، بنابراین شبیه یک اشکال در درایور aic در FreeBSD به نظر می‌رسد.
روی FreeBSD 2.2.5R و 3.0 با استفاده از درایور aic کار می‌کند، به شرطی که پشتیبانی Plug-and-Play روی کارت غیرفعال باشد. اگر دستگاه‌های uk وجود ندارند، کافی است دستور sh MAKEDEV uk0 را در دایرکتوری /dev اجرا کنید. در این صورت اگر اسکنر هنگام راه‌اندازی شناسایی شده باشد، باید به صورت /dev/uk0 قابل دسترسی باشد.
گزارش شده که تحت FreeBSD 2.2.2R با درایور amd به خوبی کار می‌کند.

ابتدا اطمینان حاصل کنید که هسته شما پشتیبانی عمومی SCSI را فعال دارد. در make xconfig، این مورد زیر ``SCSI support->SCSI generic support'' نمایش داده می‌شود.

برای به حداقل رساندن زمان اسکن، به شدت توصیه می‌شود از اندازه بافر بزرگ برای درایور عمومی SCSI استفاده کنید. از نسخه 2.0 درایور SG به بعد، حداکثر اندازه بافر را می‌توان در زمان اجرای برنامه تغییر داد و هیچ محدودیتی در اندازه وجود ندارد. این نسخه درایور بخشی از هسته‌های لینوکس از نسخه 2.2.7 به بعد است. اگر درایور جدید SG در دسترس باشد، برخی بک‌اندها (مانند sane-umax(5)، sane-mustek(5)، sane-sharp(5)) به طور خودکار بافرهای SCSI بزرگتری را درخواست می‌کنند. اگر یک بک‌اند به طور خودکار بافر بزرگتر درخواست نمی‌کند، متغیر محیطی SANE_SG_BUFFERSIZE را به اندازه بافر مورد نظر بر حسب بایت تنظیم کنید. توصیه نمی‌شود بیش از 1 مگابایت استفاده شود، زیرا برای مقادیر بزرگ این احتمال افزایش می‌یابد که درایور SG نتواند بافر(های) لازم را تخصیص دهد. برای کارت‌های ISA، حتی 1 مگابایت ممکن است مقدار خیلی بزرگی باشد. برای بحث مفصل درباره درایور لینوکس SG SCSI ببینید: https://tldp.org/HOWTO/SCSI-Generic-HOWTO.

برای هسته‌های لینوکس قبل از نسخه 2.2.7 اندازه بافر تنها 32 کیلوبایت است. این کار می‌کند، اما برای بسیاری از اسکنرهای ارزان‌تر باعث می‌شود اسکن در مقایسه با استفاده از اندازه 127 کیلوبایت، حدود چهار برابر کندتر باشد. لینوکس اندازه این بافر را با ماکروی SG_BIG_BUFF در پرونده سرآیند /usr/include/scsi/sg.h تعریف می‌کند. مگر اینکه سیستم به شدت با کمبود حافظه مواجه باشد، توصیه می‌شود این مقدار به حداکثر مقدار مجاز یعنی 128*1024-512=130560 بایت افزایش یابد. پس از تغییر این مقدار، کامپایل مجدد هر دو مورد یعنی هسته (یا ماژول عمومی SCSI) و بک‌اندهای SCSI ضروری است. به یاد داشته باشید که این کار فقط با هسته‌های قدیمی‌تر لینوکس ضروری است.

یک مشکل رایج در اسکنرهای SCSI این است که اگر سیستم را در حالی که اسکنر خاموش بوده راه‌اندازی کرده باشید چه باید کرد. در چنین حالتی، اسکنر توسط هسته شناسایی نمی‌شود و SANE نمی‌تواند به آن دسترسی پیدا کند. خوشبختانه لینوکس مکانیزم ساده‌ای برای کاوش درخواستی یک دستگاه SCSI ارائه می‌دهد. فرض کنید اسکنری متصل به گذرگاه SCSI شماره 2 دارید و شناسه SCSI اسکنر 5 است. هنگامی که سیستم روشن و در حال اجرا است و اسکنر روشن شده است، می‌توانید دستور زیر را صادر کنید:

echo "scsi add-single-device 2 0 5 0" > /proc/scsi/scsi

و هسته اسکنر شما را کاوش و شناسایی خواهد کرد (این کار باید با دسترسی ریشه انجام شود). همچنین با استفاده از دستور ``remove-single-device'' می‌توان یک دستگاه SCSI را به صورت پویا حذف کرد. برای جزئیات، لطفاً به راهنمای SCSI-2.4-HOWTO مراجعه فرمایید.

مشخص شده است که اسکنرها با آداپتورهای SCSI زیر تحت لینوکس کار می‌کنند. این فهرست کامل نیست؛ معمولاً هر آداپتور SCSI پشتیبانی‌شده توسط لینوکس باید کار کند.

آداپتورهای SCSI Acard/Advance
برخی نسخه‌های قدیمی درایور هسته (atp870u.c) اطلاعات inquiry را قطع می‌کردند. بنابراین اسکنر به درستی شناسایی نمی‌شد. از هسته به‌روز استفاده کنید.
گزارش شده که از زمان v2.0 با لینوکس به خوبی کار می‌کنند. اگر با توقف هسته یا رفتارهای غیرمنتظره دیگر مواجه شدید، آخرین هسته لینوکس را دریافت کنید (نسخه 2.2.17 به نظر کار می‌کند) یا اندازه بافر SCSI را به 32 کیلوبایت کاهش دهید.
گزارش شده که با لینوکس v2.0 به خوبی کار می‌کند.
برای پیکربندی کارت BusLogic، ممکن است لازم باشد این دستورالعمل‌ها را دنبال کنید (ارائه‌شده توسط Jeremy <jeremy@xxedgexx.com>): در هنگام راه‌اندازی، زمانی که آداپتور BusLogic شما در حال مقداردهی اولیه است، کلیدهای Ctrl-B را فشار دهید تا وارد تنظیمات آداپتور BusLogic شوید. نشانی مربوط به BusLogic که شامل اسکنر شماست را انتخاب کنید. گزینه ``SCSI Device Configuration'' را انتخاب کنید. سپس ``Scan SCSI Bus'' را انتخاب فرمایید. هر شناسه SCSI که شامل اسکنر شما است را انتخاب کرده و سپس ``View/Modify SCSI configuration'' را انتخاب کنید. مقدار ``Negotiation'' را به ``async'' و مقدار ``Disconnect'' را به ``off'' تغییر دهید. کلید Esc را فشار دهید، ذخیره کنید و مجدداً Esc را بزنید تا از شما خواسته شود سیستم را مجدداً راه‌اندازی کنید.
کارت ISA SCSI مدل NCR/Symbios 53c400/53c400a یا Domex DTC3181E/L/LE (DTCT436/436P)
این کارت توسط Mustek (و سایر سازندگان) ارائه می‌شود. از زمان لینوکس 2.2 پشتیبانی می‌شود. این کارت‌های SCSI توسط ماژول g_NCR5380 پشتیبانی می‌شوند. لازم است درگاه ورودی/خروجی و نوع کارت به هسته اعلام شود. مثال برای 53c400a: modprobe g_NCR5380 ncr_addr=0x280 ncr_53c400a=1 . به محض اینکه هسته کارت را شناسایی کند، باید به خوبی کار کند. با این حال، با اینکه باید کار کند، اما انتظار کارایی بالا از این کارت نداشته باشید؛ خط وقفه ندارد و بنابراین در حین انجام اسکن، سیستم تقریباً غیرقابل استفاده می‌شود. می‌توانید مقادیر ماکروهای USLEEP را در drivers/scsi/g_NCR5380.c تغییر دهید. برخی مستندات در این پرونده و NCR5380.c موجود است.
برای برخی اسکنرها ممکن است لازم باشد قطع/وصل مجدد (disconnect/reconnect) غیرفعال شود. برای این منظور از گزینه ncr53c8xx="disc:n" استفاده کنید. برخی افراد گزارش داده‌اند که اسکنر آن‌ها فقط با درایور 53c7,8xx کار کرده است، نه ncr53c8xx. در صورت بروز مشکل هر دو را امتحان کنید.
برای هسته‌های لینوکس قبل از 2.0.33 ممکن است لازم باشد مهلت زمانی (timeout) پروتکل SCSI افزایش یابد. مهلت زمانی پیش‌فرض برای هسته‌های لینوکس قبل از 2.0.33 برابر 10 ثانیه است که هنگام اسکن مساحت بزرگ بسیار کم است. اگر پیام‌هایی به شکل ``restart (ncr dead ?)'' در پرونده /var/log/messages یا در کنسول سیستم دریافت می‌کنید، نشانه‌ای از کوتاه بودن مهلت زمانی است. در این حالت، خط ``if (np->latetime>10)'' را در پرونده ncr53c8xx.c (معمولاً در دایرکتوری /usr/src/linux/drivers/scsi) پیدا کرده و مقدار ثابت 10 را برای مثال به 60 (یک دقیقه) تغییر دهید. سپس هسته/ماژول را بازسازی کرده و دوباره امتحان کنید.
درایور را می‌توان از http://www.garloff.de/kurt/linux/dc395 بارگیری کرد. برای برخی اسکنرهای قدیمی‌تر ممکن است لازم باشد همه ویژگی‌های پیشرفته‌تر با استفاده از دستوراتی مانند modprobe dc395x_trm dc395x_trm=7,5,1,32 غیرفعال شوند.
نسخه 1.11 درایور Tekram عمدتاً به نظر می‌رسد به خوبی کار می‌کند، به جز اینکه اسکن به درستی پایان نمی‌یابد (پس از 10 دقیقه باعث خطای مهلت زمانی SCSI می‌شود). درایور عمومی AM53C974 نیز به نظر می‌رسد به خوبی کار می‌کند و از مشکلات مهلت زمانی رنج نمی‌برد.

تحت Solaris، OpenStep و NeXTStep، نام دستگاه عمومی SCSI به گذرگاه SCSI اشاره دارد، نه یک دستگاه منفرد. برای مثال، /dev/sg0 به اولین گذرگاه SCSI اشاره دارد. برای اینکه به SANE بگویید از کدام دستگاه استفاده کند، نویسه 'a'+target-id را به نام دستگاه خاص اضافه کنید. برای مثال، دستگاه SCSI متصل به اولین کنترل‌کننده SCSI با شناسه هدف 0، به صورت /dev/sg0a نامیده می‌شود و دستگاه با شناسه هدف 1 روی همان گذرگاه به صورت /dev/sg0b نامیده می‌شود و الی آخر.

اگر کتابخانه با پشتیبانی اشکال‌زدایی کامپایل شده باشد، این متغیر محیطی سطح اشکال‌زدایی را برای زیرسیستم عمومی ورودی/خروجی SCSI کنترل می‌کند. برای مثال، مقدار 128 درخواست چاپ تمام خروجی‌های اشکال‌زدایی توسط بک‌اند را دارد. مقدار 255 همچنین پیام‌های هسته از زیرسیستم SCSI را (در صورت وجود) چاپ می‌کند. سطوح کوچکتر پرگویی را کاهش می‌دهند.
مقدار مهلت زمانی را برای دستورات SCSI بر حسب ثانیه تنظیم می‌کند. لغو مقدار پیش‌فرض 120 ثانیه تنها باید برای اسکنرهای بسیار کند ضروری باشد.

sane(7), sane-find-scanner(1), sane-"backendname"(5), sane-usb(5)

David Mosberger

14 Jul 2008