Installeer je eigen server voor oude printers en scanners

Tegenwoordig beschikken de meeste printers en scanners over een draadloze netwerkverbinding. Het is erg handig om vanaf je laptop of tablet in de woonkamer een document af te drukken op een printer elders in huis. Heb je nog een oude printer of scanner zonder netwerkmogelijkheden? Dan voeg je die functionaliteit toch gewoon toe met je eigen een Raspberry Pi!

Printers of scanners met netwerkmogelijkheden beschikken over een ingebouwde printserver. Zo kun je niet alleen via een USB-aansluiting printopdrachten versturen, maar ook via het netwerk. Maar is het ook mogelijk om USB-printers op één machine via het netwerk te delen met andere machines. Zo kun je bijvoorbeeld een lokaal aangesloten printer op je desktop delen met een of meerdere laptops in je netwerk. Het nadeel daarvan is dat je desktop steeds ingeschakeld moet zijn als je printopdrachten wilt versturen vanaf je laptop. Maar waarom installeer je geen aparte Linux-machine die uitsluitend dienst doet als printserver? Dan is jouw oude USB-printer of scanner steeds beschikbaar voor alle apparaten in je netwerk. Een printserver voor thuisgebruik stelt trouwens geen hoge eisen qua hardware. Een Raspberry Pi volstaat prima, zelfs de oudere single core modellen met slechts 256 of 512MB ram en 2 USB-poorten. Je hoeft ook geen randapparatuur, zoals een muis, toetsenbord of beeldscherm aan te sluiten. De installatie doe je volledig vanaf jouw pc en de configuratie verloopt via ssh en een webinterface. In deze workshop leggen we je van het begin tot het einde uit hoe je je eigen printserver installeert.

Raspbian Jessie Lite

Als distributie voor de Pi kiezen we Raspbian. Op het moment van schrijven was Jessie (ofwel versie 8) de laatste versie. Op http://bit.ly/1RtMgVU vind je twee verschillende downloads: een met de Pixel-desktop en een zonder. Voor deze workshop kiezen we de Lite-versie, omdat we de Pi als server en niet als desktop willen gebruiken. Download om te beginnen het zip-bestand van net geen 300MB groot. Sluit nu een SD- of microSD-kaart van minstens 2GB op je pc aan (SD voor oudere Pi’s, microSD voor nieuwere modellen). Download vervolgens Etcher vanaf https://etcher.io en unzip dat bestand. Dubbelklik op het .AppImage-bestand om Etcher te starten. Selecteer het zip-bestand van Raspbian Jessie Lite, kies je SD-kaart en klik op de Flash!-knop. Etcher kopieert nu een bootable image naar de SD-kaart. Dat kan enkele minuten duren, afhankelijk van de snelheid van de SD-kaart. Sluit nu Etcher en open je bestandsbeheerder. In de linkerbalk zie je twee nieuwe apparaten voor je SD-kaart: boot en 1.3GB Volume. Klik op boot en maak in die map een leeg bestand aan met de naam ssh. Werp nu de SD-kaart netjes uit vanuit je bestandsbeheerder en plaats ze in de Pi. Sluit je Pi aan op je netwerk en schakel de stroom in. 

Configuratie

Raspbian is standaard geconfigureerd om via dhcp een ip-adres op te vragen. Kijk dus even in de webinterface van jouw router welk ip-adres de Pi heeft gekregen. In ons voorbeeld is dat 192.168.1.7. Open een terminalvenster en log in met volgend commando (gebruik het wachtwoord raspberry):

$ ssh pi@192.168.1.7

Volg de instructies om het standaardwachtwoord te veranderen. Voor de rest van deze workshop moet je steeds als root-gebruiker werken. Een root-shell open je met volgend commando:

$ sudo -s

Het is een goed idee om eerst te controleren of er al updates beschikbaar zijn voor het Raspbian-image:

$ aptitude update

$ aptitude full-upgrade

Zat het raspberrypi-kernel-pakket tussen de updates? Dan moet je even herstarten om de update te activeren:

$ reboot

De software om printers aan te sturen heet CUPS (Common UNIX Printing System), dus dat installeren we nog even:

$ aptitude install cups

Sluit intussen je printer aan op de Pi, schakel hem in en controleer met lsusb of Raspbian de printer ziet:

$ lsusb

Word de printer herkend en is CUPS intussen geïnstalleerd? Dan ben je klaar om de printer te configureren. 

Webinterface

CUPS beheer je via een gebruiksvriendelijke webinterface, maar die is niet standaard beschikbaar voor andere machines in je netwerk. Open daarom het bestand /etc/cups/cupsd.conf:

$ nano /etc/cups/cupsd.conf

Zoek daarin naar de volgende regel:

Listen localhost:631

en vervang die door:

Listen *:631

Zoek daarna volgende regels:

<Location />

  Order allow,deny

</Location>

En vervang die door:

<Location />

  Order allow,deny

  Allow from 192.168.1.*

</Location>

Dat is een voorbeeld voor een thuisnetwerk met ip-adressen die beginnen met 192.168.1. In jouw geval zou het ook 192.168.0. kunnen zijn. Wil je slecht één bepaalde machine in je netwerk toegang geven tot de webinterface? Gebruik dan dat ip-adres, bijvoorbeeld 192.168.1.11. Doe hetzelfde voor de configuratieblokken die beginnen met <Location /admin> en <Location /admin/conf>. In afbeelding 3 zie je alle benodigde aanpassingen.

Bewaar het bestand vervolgens met Ctrl-X en lees de aangepaste instellingen in:

$ service cups reload

Voeg tot slot de Pi-gebruiker toe aan de lpadmin-groep, zodat je niet als root hoeft in te loggen om je printers te beheren:

$ gpasswd -a pi lpadmin 

Printer toevoegen

Surf nu naar de volgende url om de webinterface te openen: http://192.168.1.7:631. Klik op Administration en Add Printer om jouw printer toe te voegen. Je wordt nu doorgestuurd naar een https-website met een self-signed certificate. Voeg een uitzondering toe in je browser voor dat certificaat. Klik nogmaals op Add Printer en log in met de gebruiker Pi en het eerder gekozen wachtwoord. Selecteer jouw printer in de lijst en klik op Continue. In het volgende venster vink je de optie Share This Printer aan en klik je nogmaals op Continue. De andere velden (naam, beschrijving, locatie) pas je eventueel naar wens aan. In het volgende venster kies je de te gebruiken driver. Staat jouw model niet in de lijst van beschikbare drivers? Lees dan even de volgende paragraaf voordat je verder gaat. Heb je de juiste driver gevonden, klik dan op Add Printer. In het volgende scherm stel je eventueel nog een aantal standaardopties in voor jouw printer (kwaliteit, dubbelzijdig printen, enzovoorts). De precieze opties verschillen uiteraard van printer tot printer. Ben je klaar met instellen, klik dan op Set Default Options. Daarna kom je op de statuspagina van de printer terecht, die ook bereikbaar is via de Printers-knop rechtsboven. Klik nu op Maintenance en Print Test Page om te controleren of jouw printer correct is geïnstalleerd.

Open source

In onze test gingen we aan de slag met een Samsung Xpress M2022 zwart/wit laserprinter. Helaas bevat CUPS standaard niet de juiste driver voor dat model. In zulke gevallen raadpleeg je de OpenPrinting Printer Compatibility Database op http://bit.ly/2pvO4up. Die pagina bevat voor elke printer een overzicht van beschikbare open source drivers met bijhorende installatie-instructies. De M2022 stond niet tussen de lijst, maar de M2022W wel. Dat is dezelfde printer, maar dan met ingebouwde draadloze netwerkverbinding. In dit geval is er maar één driver die werkt, namelijk de splix-driver. Je kunt de driver installeren via een rpm- of deb-package, maar voor de Raspberry werkt dat niet. De packages zijn alleen beschikbaar voor 32- en 64-bits-Intel machines en de Pi bevat een ARM-cpu. In dat geval kies je voor de optie Directly download PPD. In het Add Printer-scherm selecteer je dan niet het model uit de lijst van beschikbare drivers, maar klik je op Browse bij Or Provide a PDD File. Selecteer dan het gedownloade .ppd-bestand om de juiste driver te gebruiken. Heb je de naam van de driver gevonden, controleer dan ook even of die niet via de package manager beschikbaar is:

$ aptitude search splix

Voor de splix-driver bleek dat het geval te zijn. Na installatie van het pakket printer-driver-splix verschenen er heel wat meer Samsung-printers in de CUPS-lijst van ondersteunde printers, maar de M2022 stond er vreemd genoeg nog steeds niet tussen. Ook rechtstreeks downloaden van het .ppd-bestand van de OpenPrinting-website bleek geen optie te zijn. Het gelinkte driver-bestand voor de M2022W was leeg.

Of toch closed?

Als laatste optie kun je ervoor kiezen om de officiële closed source drivers van de fabrikant te installeren. Maar let goed op: er zijn niet voor alle printers Linux-drivers beschikbaar. Een korte zoektocht op Google leerde ons dat Samsung inderdaad Linux-drivers aanbiedt voor onze printer. Helaas bleken die alleen te werken op 32- of 64-bits Intel-systemen en niet op onze Raspbian-installatie. Er is wel een workaround om alsnog die drivers te gebruiken op de Pi, maar dan moet je een zogenaamde soft float distributie installeren (Raspbian Jessie is een hard float-distributie). Vind je voor jouw printer écht geen bruikbare Linux-driver, dan is er nog één oplossing: de drivers volledig op de clients configureren. In dat geval klik je bij het toevoegen van de printer op Select Another Make/Manufacturer en kies je Raw als merk. Klik dan op Continue en selecteer Raw Queue als model. Het nadeel van die aanpak is dat je vanaf de Pi zelf niets kunt afdrukken. Maar in ons geval laat het ons wél nog toe om zowel vanaf Windows- als (Intel-gebaseerde) Linux-machines onze printer te gebruiken. 

Clients

Onze printserver is nu helemaal klaar, dus kunnen we de printer configureren op andere machines. Onder Linux heeft elke desktop (Gnome, KDE, …) wel zijn eigen tools daarvoor. Gelukkig is de CUPS webinterface ook gewoon beschikbaar op jouw desktop of laptop, dus nemen we die als voorbeeld. Open volgende url: http://localhost:631 en voeg een printer toe zoals je op de server hebt gedaan. In het eerste scherm kies je Internet Printing Protocol (https). In het volgende scherm vul je de url van de printerpagina van CUPS op je Pi in, bijvoorbeeld:

https://192.168.1.7:631/printers/Samsung_M2020_Series.

Vervolgens vul je een naam (en eventueel beschrijving en locatie in) en vink je de optie Share This Printer uit. Het is niet de bedoeling dat jouw laptop de printer op zijn beurt óók gaat delen in het netwerk. Tot slot kies je de correcte driver, die je al dan niet op voorhand geïnstalleerd had. Controleer daarna of de printer werkt door een testpagina af te drukken. In onze test hebben we Samsung’s eigen driver op onze Linux-laptop geïnstalleerd en de printer als Raw Queue op de Pi geconfigureerd. Dit bleek perfect te werken: dankzij de Pi heeft onze M2022 printer dus dezelfde functionaliteit als de duurdere M2022W!

Printen op Android

Misschien wil je je printer ook gebruiken vanaf een Android-smartphone of tablet. Dat kan met de gratis CUPS Printing-app van UpActivity (http://bit.ly/2oWloHM). Na installatie krijg je een notificatie met de vraag of je de CUPS Print-service wilt inschakelen. Zodra die is ingeschakeld, vindt de app jouw gedeelde printer vaak automatisch. Probeer nu iets af te drukken uit een app die dat ondersteunt, bijvoorbeeld Gmail. De eerste twee pogingen mislukken waarschijnlijk: je moet nog twee keer bevestigen dat je wel degelijk wilt verbinden met je Pi (een keer voor het ssl-certificaat en een keer voor de hostname). Vanaf de derde keer zou het wel prima moeten werken. Maar let op: printen vanaf Android werkt niet correct als je je printer als Raw Queue hebt geconfigureerd op je Pi! 

Scanner

We willen ook nog een oude USB-scanner delen in ons netwerk. SANE (Scanner Access Now Easy) is de software om scanners aan te sturen onder Linux. De installatie van CUPS heeft de benodigde software reeds klaargezet, maar controleer toch even of het pakket sane-utils aanwezig is:

$ dpkg -s sane-utils

Krijg je een foutmelding dat het pakket niet geïnstalleerd is, dan moet je het alsnog installeren:

$ aptitude install sane-utils

Sluit vervolgens je scanner aan en controleer of die herkend wordt door je Pi:

$ lsusb

$ scanimage -L

Het eerste commando toont of je scanner zichtbaar is op het systeem en het tweede commando vertelt je meteen of SANE een driver bevat voor jouw scanner. In onze test met een Canon CanoScan LiDE25 bleek SANE de plustek-driver te gebruiken. De configuratie van die driver vind je in /etc/sane.d/plustek.conf en de documentatie via man sane_plustek. Over het algemeen hoef je niets te veranderen aan de driverconfiguratie. Mocht jouw scanner niet correct herkend worden, dan los je dat meestal op door een extra configuratiebestand aan te maken in /etc/sane.d. Voor meer informatie verwijzen we je naar http://bit.ly/2oOI7cH.

Testen en delen

Met het volgende commando voert SANE een snelle test uit om te controleren of de scanner naar behoren werkt:

$ scanimage -T

Zie je uitsluitend ‘PASS’ in de resultaten verschijnen, dan is alles in orde (zie afbeelding). Om aan te geven welke clients in je netwerk de scanner mogen gebruiken, open je het bestand /etc/sane.d/saned.conf in nano en voeg je één of meerdere ip-adressen toe aan het einde. Om je hele netwerk toegang te geven, gebruik je bijvoorbeeld:

192.168.1.0/24

Vervolgens schakel je saned in:

$ systemctl enable saned.socket

Op de client geef je tenslotte aan op welk ip-adres SANE naar scanners moet zoeken. Open het bestand /etc/sane.d/net.conf met nano en voeg volgende regels toe (uiteraard met het correcte ip-adres van jouw Pi!):

connect_timeout = 60

192.168.1.7

Open vervolgens een scanapplicatie zoals Simple Scan of XSane. Als er op jouw client geen andere scanner aangesloten is, hoef je verder niets te doen. Simple Scan en XSane detecteren automatisch de gedeelde scanner en gebruiken die meteen. In de applicaties merk je eigenlijk geen verschil tussen een gedeelde netwerkscanner of een lokaal aangesloten scanner. SANE stuurt de gescande data over het netwerk naar jouw client-applicatie. Je kunt de scans dus meteen op de client bewaren en hoeft ze niet nog manueel vanaf de printserver te kopiëren. 

Scannen op Android

Via SANE kun je ook scannen vanaf een Android-apparaat. Installeer SANEDroid van Matthew Baker Tools (http://bit.ly/2oXjjuu) en ga naar Preferences in het contextmenu. Klik op SANE_NET_HOSTS en vul het ip-adres van je Pi in. Eventueel kies je nog een andere directory om de scans te bewaren (Scan Directory). Klik vervolgens op Refresh Device List in contextmenu om je scanner te detecteren. Klik tenslotte op Scan om te starten met scannen. Opties zoals resolutie, kleur, enzovoorts stel je in via de tweede knop rechtsboven. 

Tweede leven

Een oude USB-printer of -scanner hoef je niet meteen te vervangen om draadloos te kunnen printen of scannen. Met een Raspberry Pi, CUPS en SANE zet je snel je eigen print- en scanserver op. In deze workshop hebben we uitgelegd hoe je jouw gedeelde printer of scanner in Linux en Android gebruikt. Je kunt ze trouwens ook in macOS of Windows gebruiken. Voor de printer heb je alleen de juiste printerdrivers nodig, maar voor de scanner moet je SANE nog installeren op de client.