My Shiny Weblog!

programming, photography and lifestyle

HP LaserJet 1020

Крайно време беше да си купя принтер. Отлагам го от години, не за друго, а защото знам, че един истински принтер струва доста пари, също както повечето истински неща. Затова се изправих пред дилемата – дали да дам 1000 лева и да знам, че имам или да дам 200 лева и да го псувам. Оформи се и някакъв компромисен вариянт, да дам 350 лева и да взема евтин принтер с D-Link print server. Това ми звучеше разумно, идеята беше да си сложа принтера в килера и да го вържа към мрежата през този “преходник”. Ентусиазмът му обаче се изчерпа, когато погледнах на сайта на D-Link, че този принтер не е в списъка с поддържаните. Не ми се рискуваше, реших да взема принтера (така или иначе трябваше да се купи), а преходника да го оставя за после в случай, че не успея да подкарам принтера под FreeBSD. Знаех си, че този принтер е голяма измислица и, че каквото може да му бъде спестено му е спестено. Разбира се на места творчеството на HP по този въпрос ме изненада. Първото нещо, което ми направи впечатление веднага след, като го извадих от кашона – липсата на кабел. HP бяха спестили няколко цента, като не бяха дали заедно с принтера USB A – USB B кабел. Вкиснах се, защото нямах такъв кабел, а и беше петък вечер. Нямаше начин, работата продължи в понеделник. Включих го, завъртя механиката, запали лампата за “ready”, направо човек да си помисли, че още малко и ще изкара test page. Операционната система гордо го разпозна, заяви че това бил “HP LaserJet 1020” и му закачи ulpt драйвера. Зарадвах се, реших че ще тръгне и реших да го пробвам:

1
echo "hello world" > /dev/ulpt0

Това го изстрелях на посоки, не че очаквах да се случи нещо смислено. Изплю ми някаква тъпа грешка и принтера не реагира по никакъв начин. Пуснах един google и почнах да ровя. Оказа се, че няма много информация по въпроса, но на няколко места твърдяха, че ulpt драйвера не работел с този принтер. Единствената смислена статия, която можах да намеря беше на руски. Там се описваше стъпка по стъпка пускането на принтера. Руския не ми пречеше, ориентирах се по командите. Най-напред трябваше да се махне ulpt драйвера от ядрото, това и направих. Следващите стъпки бяха да се инсталира firmware и програмката foo2zjs. Нещата лека полека започнаха да ми се изясняват, но при качването на firmware файла нищо не се получаваше. След дълго ровене и чудене се оказа, че този firmware, който качвам, преди това трябвало да се компилира с една команда (пише го в документацията на foo2zjs). Компилирах, качих firmware картинката и принтера даде признаци на живот, завъртя механиката и замига и двете лампи. Браво, страшен кеф, след още доста борене с ghostscript, foo2zjs и lpd успях да го накарам да отпечата един Post Script файл с един тигър (още си го пазя за спомен…). Мислех си, че съм се справил и, че живота е много хубав. Оказа се обаче, че поради една от много икономии на HP, този firmware не трябва да се качва само веднъж в началото (както наивно си мислех аз). Той трябва да се качва при всяко пускане на принтера. Тъй като не ми се занимава, а и мисля да не го изключвам, още не съм написал скрипта за usbd, който да върши тази работа. Насочих усилията си към правилна настройка на lpd филтрите, така че малоумните Windows print services на няколко машини от мрежата да могат да печатат на този принтер. Покрай тази работа мога да напиша поне още една статия. Накратно проблемът се състои в това, че Windows по някакви причини не обработва грешките, които му връща lpd. Вместо това изпраща заявката отново и по този начин зацикля. И тъй, като lpd си мисли, че отсрешната машина е записала грешката, не я записва в неговия си журнал. Резултатът е следния – никаква грешка никъде, уж всичко е наред, а от принтера нищо не излиза. Никога нямаше да се оправя, ако не бях пуснал един ngrep port printer. Друг неприятен момент беше, че Windows праща някакъв PS файл, който не се харесва на ghostscript. По тази причина се наложи да прекарвам два пъти файла през ghostscript. В крайна сметка всичко тръгна, но процеса беше изнервящ, дълъг и отегчителен.

ПС: Всичко може би щеше да е много по-лесно, ако бях закачил принтера на някоя Windows машина. Но тъй като искам да е в килера, а там нямам Windows компютър, трябваше или да прекарвам дълъг USB кабел или да ползвам lpd под FreeBSD.