Головна

 Налагодження принтеру та друк з Linux на будь-який win-принтер, на прикладі Canon LBP-810


Цей документ з'явився, як результат 3-х днів напружених експериментів з принтером Canon LBP-810, на предмет друку його в ОС Linux через локальну мережу на ПК з Windows. Намучився я з ним добре, а тому поспішаю доповісти світу, як це можна зробити у найпростіший спосіб.

Історична довідка: Останнім часом на ринку периферійного обладнання з'явилось багато так званих win-принтерів. Особливостями їх реалізації та експлуатації є те, що ці принтери не розуміють стандартизованої мови передачі графічної інформації такої як PostScript чи PCL. Вся логіка роботи цих принтерів зберігається у Windows-драйвері, і тільки він знає у якому форматі дані передавати на принтер. Ускладнює ситуацію, ще й те, що фірми-виробники периферійного обладнання, ретельно приховують особливості реалізації своїх протоколів передачі даних (принтер – ПК), а відповідно, для аматорів, що мають змогу написати драйвер, не має ніякої можливості створити власну реалізацію драйверу для іншої операційної системи, що відрізняється від MS Windows. Ускладнює ситуацію, ще й механізм друку у операційних системах сімейства Windows.

Розгляну це на прикладі. Коли мова йде про локально під'єднаний до ПК принтер схема його роботи зрозуміла:

Програма –> ОС –> Драйвер принтеру –> Спул друку–> Принтер

Якщо друк відбувається на мережевий принтер, то схема більш заплутана:

Програма –> ОС –> Драйвер принтеру –>Мережа –> Спул друку на ПК з принтером –> Принтер

Вадою мережевого друку у Windows на мій погляд є те, що віддалений ПК повинен знати, всі особливості мережевого принтеру, тобто мати його драйвер.

У операційних системах сімейства Unix, друк через мережу відбувається за іншою схемою:

Програма –> ОС –> Документ у форматі PostScript –>Мережа –> Сервер друку на ПК з принтером –> Драйвер принтеру –> Принтер

Використання стандартизованої мови PostScript спрощує доступ до мережевих принтерів. Ваша прикладна програма відправляє дані по мережі у вигляді PostScript, а вже віддалений сервер друку форматує документ відповідно до вимог конкретного принтеру.

Але ми маємо справу з Windows ідеологією, а тому слід вирішувати проблему друку на win-принтері з інших операційних систем.

Одразу скажу, що примусити друкувати принтер, що локально під'єднаний до Linux комп'ютера мені не вдалося. Якщо на ПК не використовується VMWare, то це взагалі дуже важко. Гадаю що існує один теоретичний спосіб, але тільки у моїй уяві. Суть його полягає в тому, щоб використати можливості емуляції Windows (мова йде про Wine). Але про це потім.

В мою задачу входило налагодження друку на принтері, що під'єднаний до Windows комп'ютера, з операційної системи Linux. Після ознайомлення з відповідною документацією в мережі Internet, я виробив методику налагодження друку на будь-якому windows-принтері з Linux. Для чистоти опису експерименту наведу характеристики програмних та апаратних засобів, що були в мене під час проведення експериментів:

ПК з Windows: Pentium-II 233MHz / 64Mb RAM / Chipset 440BX / AGP ATI Rage II 4Mb / HDD 3,2Gb / CD-ROM Samsung 32x / FDD / Ethernet card DEC PCI 10-BaseT / ATX 250W. Операційна система - Windows 98. Принтер – Canon LBP-810 з паралельним інтерфейсним кабелем.

ПК з Linux: Pentium-MMX 166MHz / 64MbRAM / Chipset 430VX / PCI s3 1Mb / HDD 3,2Gb / CD-RW Teac W54E / FDD / Ethernet card Realtek 8029 PCI 10-BaseT / AT 200W. Операційна система – ASP Linux 7.3.

На комп'ютері з Linux використовувалась система друку LPRng, тому на її прикладі і буде наведена методика встановлення.

Linux-комп'ютер посилає по локальній мережі документ у форматі PostScript. Операційна система Windows не знає, що з цим форматом робити, а тому потрібне програмне забезпечення, що може конвертувати файл з PostScript у формат зрозумілий Windows (GDI контекст). І таке програмне забезпечення є, до того ж воно вільно розповсюджується. Інтерпретатор мови PostScript носить назву Ghostscript і створений практично для усіх відомих операційних систем включаючи Linux, Windows, DOS тощо. Для спрощення роботи з PostScript файлами інтерпретатор поряд з переглядачем, що у системах Windows має назву GSView.

Щоб наступний опис був більш зрозумілим, спробую схематично пояснити, як ми примусимо систему Windows розуміти PostScript-файли, та друкувати їх на “безмозгому” windows-принтері. План такий: на мережевий “фіктивний” PostScript принтер (який ми створимо трохи пізніше”) приходить по локальній мережі PostScript-файл, що був посланий з Linux-ПК. Принтер без жодної зміни документу відсилає його на віртуальний порт, що буде існувати завдяки програмі RedMon (описано теж далі по тексту, наберіться терпіння). Віртуальний порт RedMon (наприклад, RPT1: ) передає дані інтерпретатору мови PostScript (тобто її реалізації Ghostscript), яка в свою чергу передає їх на реальний win-принтер для друку. Якщо Вам все зрозуміло, можете далі не читати цей манускрипт. А для тих хто зрозумів не дуже чітко спробую пояснити більш детально.

Отже першим кроком для налагодження друку на win-принтері буде скачування з мережі Інтернет Ghostscript та GSView.

Знайти їх ви зможете за такою адресою: http://www.cs.wisc.edu/~ghost/index.html

Мені до рук потрапив Ghostscript версії 5.10 (файли gs510fn1.zip, gs510fn2.zip, gs510ini.zip та gs510w32.zip) та GSView версії 2.4 (файл gsview24.zip). Згідно інструкції по встановленню, я розгорнув архів GSView до тимчасової директорії і в неї скопіював 4 файла з архівами від Ghostscript. Запустив програму інсталяції (setup.exe), яка встановила переглядач PostScript файлів (GSView) та сам інтерпретатор Ghostscript. У моєму випадку це були директорія c:\gstools\gs5.10 (на майбутнє, важливо запам'ятати цю папку).

Настала черга перевірити роботу Ghostscript. Знаходимо будь-який файл з розширенням *.PS (у форматі PostScript) та відкриваємо у переглядачі GSView. Перевірка роботи Ghostscript через використання GSView обов'язкова, тому що без належно встановленого Ghostscript далі буде дуже важко.

Якщо файл на екрані виглядає належним чином, спробуємо його надрукувати. Тут я зіштовхнувся з великою перешкодою. Після натиску на кнопку зі зображенням принтеру, на екрані з'явилось діалогове вікно, в якому необхідно було обрати драйвер принтеру. Як ви самі розумієте, драйвера до Canon LBP-810 там не було. Всі спроби обрати інший наче “схожий” драйвер закінчувались марно. Принтер не хотів нічого друкувати.

Довелось поринути у простір Інтернет та шукати відповіді на це питання. На щастя вона не примусила себе довго чекати. Виявляється, що існує універсальний драйвер для друку на будь-якому windows-принтері, якщо він розуміє графічний друк. Цей драйвер називається mswinpr2. Особливостями цього драйверу є те, що він конвертує елементи мови PostScript у виклики Windows GDI.

Після обрання драйверу друку – mswinpr2, нарешті, з мого Canon LBP-810 з'явилась надрукована сторінка.

Якщо Ghostscript на вашому комп'ютері працює, можна переходити до другого етапу – встановлення RedMon – утиліти, що дозволяє встановити перенаправлення даних з порту на прикладну програму. Знайти її можна на цьому сайті: http://www.ghostgum.com.au

Інсталяція RedMon не повинна викликати у вас складнощів.

Встановлюємо фіктивний PostScript принтер. Наприклад, “HP LaserJet 4/4MP PostScript”. Далі в параметрах принтеру необхідно встановити друк у віртуальний порт RedMon. Для цього відкриваємо вікно властивостей встановленого принтеру, та натискаємо кнопку Додати порт... . З вікна вибору порту обираємо пункт – Redirect Monitor, та погоджуємось із назвою RPT1:. Пам'ятайте, що всі ці маніпуляції ви повинні зробити для нового фіктивного (HP LaserJet 4/4MP PostScript), а не для реального (Canon LBP-810) принтеру. Забороніть також використання двостороннього обміну даних в параметрах черги друку.

Нарешті дійшла черга до пояснення утиліті RedMon, як здійснити друк за допомогою Ghostscript. В параметрах PostScript принтеру натискаємо кнопку “Параметри порту ...”, у діалоговому вікні у полі введення “Enter the program name”записуємо шлях до програми Ghostscript, в моєму випадку це

c:\gstools\gs5.10\gswin32c.exe

У наступному полі вводимо командного для запуску інтерпретатора Ghostscript. В мене вона була такою:

-Ic:\gstools\gs5.10;c:\gstools\gs5.10\fonts -sDEVICE=mswinpr2 -sPAPERSIZE=a4 -dNOPAUSE -sOutputFile="//spool/Canon LBP-810" -

Зверніть увагу на параметр -I. Він вказує де у системі розташований Ghostscript та шрифти до нього. Дуже важливий рядок -sOutputFile="//spool/Canon LBP-810" – тут вказано ім'я вашого справжнього принтеру. Якщо воно відрізняється від Canon LBP-810 вкажіть власну назву, але літера в літеру. В кінці команди необхідно дописати пробіл та дефіс, без них ваша команда не спрацює. Параметр -sPAPERSIZE=a4 я додав потім, коли зрозумів, що ніяк не можу надрукувати внизу сторінки, щось ближче до краю за 2,4 см. Якщо вас дратують блимаючі консольні вікна під час друку встановіть параметр Run у “Hidden”.

Перевірте друк на PostScript принтері спочатку з будь-якої програми системи Windows. Для цього у стандартному діалозі друку вкажіть Ваш фіктивний “HP LaserJet 4/4MP PostScript”. Якщо принтер надрукує саме те, що ви очікували, вважайте, що налагодження win-принтеру майже завершено. Залишаться одні дрібниці: встановлення доступу до принтера з мережі, налагодження Samba і друк з Linux комп'ютера через будь-який PostScript-драйвер.

У моєму випадку я зупинився на системі друку через використання Samba. Драйвер друку вказав як звичайний PostScript (якщо налагодження друку через Samba, у вас викликає проблеми, зверність до відповідної документації. Як на мене, то це доволі просто).

Але існує альтернативний засіб друку на win-принтерах. Для цього необхідно використати LPD серверу для Windows. Я спробував демо-версії SDI LDP, Mocha LDP, WinLPD і жоден з них мене не вразив. Справа в тому, що друк на принтер відбувається доволі просто, але конвертації даних з формату PostScript у мову зрозумілу принтеру ні. А як підключити до цих серверів Ghostscript я так і не зрозумів. Використовувати ж при цьому RedMon та “фіктивний” PostScript принтер мені вважається недоречним. До того ж всі LDP сервери, що були мною використанні платні (приблизно 25$), а платити за програмні продукти користувачі Linux м'яко кажучи не звикли.

Пам'ятаєте, як на початку цього документу я згадував про існування “уявного” методу друку із застосуванням програмного комплексу Wine. На жаль, не можу приписати себе до “гуру” чи хоча б знавців системи Wine. Але суть метода полягає в тому, щоб примусити працювати драйвер написаний для системи Windows. Це звичайно плід моєї уяви, не зважайте ... .

Для закінчення хочу висловити ряд думок з приводу використання системи друку у системі Linux. На превеликий жаль виробники апаратного обладнання ігнорують цю систему. Можливо у майбутньому ситуація виправиться на краще. Принаймні системи друку LPRng значно повільніша за відповідну систему друку Windows, це особливо стосується роздруку документів, що містять графіку. При використанні друку через Ghostscript, що був описаний на цій сторінці, швидкість друку значно збільшується. Так мій Canon LBP-810 друкує швидше ніж HP 1200 у сусідньому офісі. Навіть якість роздруку краща, все ж такі використовується рідний драйвер принтеру від виробника.

P.S. Коли ця стаття була мною написана, я вирішив скристатися цією методикою по налагоджуванню друку на win-принтері з Linux комп'ютера. Цікаво, що ПК який потрапив до моїх рук теж мав принтер Canon LBP-810 та ліцензійну систему Windows 98, але другу редакцію (SE). Першою несподіванкою було зависання системи при встановленні GSView. Коли я перезавантажив ПК GSView став без проблем. Але проблеми на цьому не закінчились. При перевірці друку через фіктивний PostScript принтер – з програми OpenOffice з принтеру з'явились лише порожні аркуші. А програма Блокнот (Notepad.exe) надрукувала сторінку вірно. Коли відбувався друк з Linux, то латинські літери друкувались без змін, а всі українські були величезного розміру і розташовувались у верхньому лівому куті аркуша (комусь це може здатися жартом, але насправді все так і було – наче у страшному сні). Я цілий день провів у порівнянні параметрів двох принтерів та 3-х персональних комп'ютерів (2-х з Windows та 1-го з Linux). І тільки в 15 годин 42 хвилини вдача посміхнулась мені. Порівнюючи параметри RedMon при друці через Ghostscript я знайшов помилку. Замість маленького дефісу в кінці рядка там стояло велике тире. А з'явилось воно там тому, що конфігурації двох ПК були настільки схожі, що з природної лінноші, я просто скопіював з цього опису рядок параметрів, а “розумний” OpenOffice Writer, при створенні цього документу, взяв і замінив дефіс на тире.