Is het mogelijk om van een oude usb-printer een netwerkprinter te maken waarop bijvoorbeeld Android- of iOS-telefoons kunnen afdrukken? Ja, dat kan en in dit artikel leggen we uit wat daarvoor nodig is.


Henk van de Kamer

Brother HL 2030 2Op 1 november 2007 kocht ik voor 99 euro een Brother HL-2030 laserprinter ter vervanging van een overleden HP Laserjet 1100. In die tijd printte ik al bijna niets meer, maar helemaal zonder was en is nog steeds niet mogelijk. De vellen papier worden na bijna veertien jaar niet meer betrouwbaar via de lade in de printer ingevoerd, maar dat ongemak neem ik voor lief... 

PRINTERDRIVERS 
Brother was in die tijd een van de weinige fabrikanten die Linux-drivers maakte. In genoemd jaar werkte ik nog onder Debian Sarge (versie 3.1), dus het ontbreken van een 64-bits versie was  geen probleem. Het jaar daarop migreerde ik naar Debian Etch (versie 4.0) en deze ondersteunt de x86_64-architectuur. Voor de Brother-drivers moest ik echter de 32-bits bibliotheken toevoegen. Ik ontdekte dat Ubuntu bezig was om de broncode van Brother te compileren tot een 64-bits versie, maar deze is nooit als Debian-pakket beschikbaar gekomen. 
Net toen de LTS (Long Term Support)-ondersteuning van Etch stopte, moest ik in mijn nieuwe redactionele rol meer met en onder Windows doen. In de jaren 2010 tot en met 2016 gebruikte ik daarom voornamelijk Windows 7 en gebruikte ik de Brother via diens drivers. Na die tijd besloot ik midden 2017 om de huidige Obelix aan te scha_en en te voorzien van Debian Stretch (versie 9.0). De tussenliggende Debian-versies zijn door mij allemaal gebruikt op andere systemen, zowel grafisch als pure server. 
Tijdens het schrijven van een boek over de mogelijkheden van een Chromebook als vervanger van Windows werden in februari 2020 de Ubuntu Brother-drivers in een virtuele machine op Obelix geïnstalleerd. Daarna ontdekte ik dat deze nog steeds de 32-bits bibliotheken nodig hebben. 

IPP 
Bovenstaand experiment was nodig omdat Google had aangekondigd dat zijn Cloud Print-dienst zou verdwijnen. In feite was dat gebaseerd op IPP (Internet Printing Protocol), waarvoor de basis in 1996 werd gelegd door het ondertussen ter ziele gegane Novell. Het achterliggende idee was het verhuizen van de printerdriver naar de printer zelf. Met als extra voordeel dat opeens Windows, macOS, Linux, ChromeOS, Android of andere besturingssystemen alleen nog maar IPP-opdrachten hoeven te kennen. Omdat die opdrachten weer verstuurd worden via HTTP - inderdaad dezelfde als in je browser -, is het afdrukken naar willekeurige printers zonder installatie van drivers opeens een fluitje van een cent. Onder Linux en macOS wordt voor het afdrukken CUPS (Common UNIX Printing System) gebruikt. Het geheel is opensource en wordt door Apple onderhouden. Zoals de naam aangeeft, moet je het zien als dienst om een document af te drukken. Achter de schermen kan de printer verbonden zijn via de parallelle en seriële poort, usb, netwerk en andere (prehistorische) opties. Op de voorgrond kunnen de printopdrachten lokaal - op meerdere manieren - of via het netwerk worden aangeboden. Dat laatste kan onder andere via IPP, gedeelde Windows-printer (dankzij Samba) of Apple’s netatalk. Intern wordt alles echter vertaald naar IPP. 

PCL 
In juli moest ik een brief afdrukken en besloot ik eindelijk eens uit te zoeken waarom Ubuntu ondanks de beschikbare broncode van Brother nog steeds 32-bits bibliotheken nodig heeft. De details vind je terug in mijn labjournaal (hetlab.tk/?s=hl-2030). Hier is alleen de samenvatting van belang en die is: Brother maakt er een zooitje van. In CUPS is een zogenaamd PPD (PostScript Printer Definition)-bestand nodig. Dit beschrijft de mogelijkheden van de printer, zodat een PostScript-bestand correct op de uiteindelijke pagina verschijnt. PostScript is een van de latere PDL (Page Description Language)-talen die printerfabrikanten de afgelopen veertig jaar hebben bedacht. Tegenwoordig gebruikt iedereen on bewust PostScript als we bijvoorbeeld een pdf van een brief per e-mail versturen. 
PostScript is zeer uitgebreid en dit verwerken tot de uiteindelijke puntjes op een pagina vraagt veel rekenkracht. Een veel simpeler taal is PCL (Printer Command Language), dat in 1984 door Hewlett-Packard werd bedacht. De Brother gebruikt intern deze taal en dat betekent een conversie van het tegenwoordig gebruikelijke PostScript naar deze oudere variant. In CUPS is dat mogelijk via filters, oftewel een serie shell scripts en/of commandline-programma’s. Het eindresultaat is een bestand dat naar de printer gestuurd kan worden. Een van de programma’s die Brother in bovenstaande keten gebruikt, is brcupsconfig3 en daarvan is de broncode vrijgegeven. Verderop in de keten wordt rawtobr2 aangeroepen en de broncode daarvan is niet beschikbaar, hetgeen de benodigde 32-bits bibliotheken verklaart. Een zoektocht naar de functie van dit programma leert dat het compleet overbodig is! Dat leidde tot een website die een betere PPD aanmaakt, met als eindresultaat een bestand in PCL op basis van een generieke HP-laserjet. 

NETWERKPRINTER 
Van de 74 (kleuren)laserprinters die op het moment van schrijven te bestellen zijn bij een grote webshop, hebben 68 de mogelijkheid om via wifi af te drukken. Waarschijnlijk hebben de meeste van deze tevens een ethernetpoort en mogelijk ook nog een usb-aansluiting. Deze laatste twee opties konden niet als zoekfilter worden gebruikt. Van de overige zes heb ik de specificaties opgevraagd en deze hadden allemaal een usb-aansluiting en drie hadden ook een ethernetpoort. Bovenstaand ‘marktonderzoek’ toont aan dat een netwerkaansluiting de norm is. Er is een grote kans dat deze allemaal intern een embedded computer gebruiken om CUPS via een Linux-omgeving te draaien. Zelfs de drie pure usb-printers hebben functionaliteit die hierop duiden. De eerder genoemde Chromebook vond zonder problemen de via usb op Obelix aangesloten Brother HL-2030, dankzij het IPP in CUPS.  

nanopineo
NanoPi NEO 

MAF IDEE? 
Dankzij mijn onderzoek is het aansturen van de Brother HL-2030 nu compleet opensource en daarmee processor-onafhankelijk! Oftewel: waarom stoppen bij de x86_64-architectuur? De Brother kan nu ook op, zeg, een Raspberry Pi gebruikt worden. En daarmee ontstond het idee voor dit artikel. Begin dit jaar kocht ik een NanoPi NEO (zie de afbeelding hierboven) en deze is ideaal om als printserver te gebruiken! Het geheel is 4 bij 4 cm groot en zou zelfs in de kast ingebouwd kunnen worden. De 10/100 ethernetpoort en USB 2.0-aansluiting zijn afdoende voor het afdrukken. Het enige wat ontbreekt is wifi, maar dat kan eventueel via het micro-sd-slot of een usb-hub worden toegevoegd. Persoonlijk ben ik geen voorstander van wifi voor dit soort toepassingen. Zo maakt een Android-telefoon meestal via wifi contact met de router en die heeft immers ook vaste aansluitingen voor bijvoorbeeld de NanoPi NEO. Met dit maffe idee kun je als lezer veel beter begrijpen wat er in de hedendaagse printers is verstopt. 

Onnda V972 3
De Onda V972-Android-tablet, waarop we het printprotocol installeren

Nu worden bordjes zoals de NanoPi NEO vanuit de fabriek compleet leeg opgeleverd. De boot code in de ROM probeert daarom te starten vanaf de micro-sd-kaart en vervolgens vanaf de aanwezige eMMC. Als dat niet lukt, valt het geheel terug op de zogenaamde FEL-mode. Dit is bij mijn weten specifiek voor de Allwinner SOC (system-on-a-chip) en maakt het mogelijk om een systeem te installeren via USB OTG. In de afbeelding hieronder zie je in de eerste opdrachtregel het benodigde usb device (de regel die begint met Onda) na een seconde of tien verschijnen, omdat het geheel nog maagdelijk leeg is. Vervolgens kunnen we als root wat informatie over de SOC opvragen..

 nanopineo fel 2
Maagdelijke NanoPi NEO in FEL mode  

TOT SLOT 
Via FEL - of gewoon door de juiste Linux-distributie naar een micro-sd-kaart weg te schrijven - kan het geheel starten. Het instellen van de Linuxdistributie kan via een seriële verbinding of via het netwerk door het installeren van OpenSSH. Vervolgens kunnen we CUPS installeren en via deze de PPD voor onze Brother HL-2030 toevoegen. Deze sluiten we vervolgens aan op de usb-poort, waarna de rest van de computers opeens een veertien jaar oude netwerkprinter zien verschijnen. Dat voert te ver voor dit artikel, maar op mijn website (hetlab.tk/artikelen/printserver) kun je een uitgebreide handleiding vinden. Wie kennis over een ander bordje bezit, kan deze met wat kleine aanpassingen ook gebruiken.