Maak je eigen all-in-one printer met een Pi
Kopiëren, scannen en mobiel printen met de Raspberry Pi
De Raspberry Pi stelt met de standaard Linux-tools al veel usb- en netwerkprinters beschikbaar voor Android en iOS. Samen met een usb-scanner wordt hij bovendien een kopieerapparaat of kun je scans op een netwerkshare opslaan – en dan flexibeler dan veel gewone multifunctionele printers.
Moderne all-in-one printers zijn erg handig. Je kunt er niet alleen mee printen, maar ook scannen en kopiëren. Ze ondersteunen alle protocollen, zodat ook iOS-apparaten ermee kunnen werken. Maar nieuwkoop loont niet altijd, zeker niet omdat je voor apparaten die wat sneller kunnen printen flink wat geld moet neerleggen. Misschien kun je sowieso geen afscheid nemen van je gebruikte kantoorlaserprinter en heb je nog een scanner liggen die eigenlijk op de nominatie staat naar het grofvuil te gaan omdat hij tot teveel gedoe met drivers leidt. In dat geval kun je beide met de Raspberry Pi combineren tot een multifunctioneel apparaat om mee te scannen en printen – en dus kopiëren.
De Raspberry Pi moet eerst overweg kunnen met de printer. De verbinding met de printer wordt gemaakt met het Linuxprogramma Cups, het Common Unix Printing System.
Het configureren verloopt geheel via de commandline. Installeer een Raspberry Pi met een schone versie van Raspbian en open een Terminal-venster. Met de volgende commando's breng je het besturingssysteem helemaal bij de tijd en installeer je Cups: sudo apt update sudo apt upgrade sudo apt install cups
Om ervoor te zorgen dat de standaard Raspbian-gebruiker 'pi' Cups kan beheren, moet hij in de groep lpadmin worden opgenomen. Voer daarvoor in Terminal het volgende commando uit:
sudo usermod -aG lpadmin pi
Dan is het nu een mooi moment om het standaard wachtwoord 'raspberry' voor de gebruiker 'pi' te veranderen. Met sudo passwd wordt je naar een wachtwoord gevraagd.
Cups wordt geconfigureerd via een webinterface in de browser. Om ervoor te zorgen dat die via het netwerk ook bereikbaar is en Cups de printer volgens de standaard 'IPPEverywhere' beschikbaar maakt voor mobiele apparaten, moet je een paar regels veranderen in het configuratiebestand van Cups. Open dat bestand in een teksteditor, bijvoorbeeld nano:
sudo nano /etc/cups/cupsd.conf
Cups moet op alle netwerkkaarten (dus via de netwerkkabels, maar ook via wifi) werken op poort 631 en in het hele netwerk bekendmaken welke printer hij aanbiedt. De eerste benodigde verandering is in de regel Listen localhost:631. Vervang dat door Port 631. Voeg op een nieuwe regel daarna het volgende in:
BrowseAddress @LOCAL
Scrol daarna door naar het volgende blok:
<Location />
Order allow, deny </Location>
Voeg op een nieuwe regel in na Order allow, deny:
Allow @LOCAL
Als de beheerinterface via het netwerk bereikbaar moet zijn, voeg je dezelfde regel ook toe bij het deel met <Location /admin> meteen daaronder.
Het werk aan het configuratiebestand is daarmee klaar, dus je kunt de editor sluiten (met Ctrl+O en Ctrl+X) en Cups vervolgens herstarten:
sudo systemctl restart cups
Verbind de Raspberry Pi nu met je thuisnetwerk – dat kan met een netwerkkabel of via wifi. Bij een nieuwe Raspbian-installatie moet je daarvoor naar het frambozenmenu linksboven en dan naar 'Voorkeuren / Raspberry Pi Configuratie programma'. Op het tabblad Localisatie stel je het 'WiFi Land' in, waarna Raspbian het wifimenu vrijgeeft.
Om de printer te configureren, open je in een browser het ip-adres van de Raspberry, gevolgd door ':631', dus bijvoorbeeld 'http://192.168.0.125:631'.
De eerste afdruk
Als je een usb-printer hebt, moet je hem nu op de Raspberry Pi aansluiten. Als het om een netwerkprinter gaat, dan hoef je er alleen maar voor te zorgen dat hij zich in hetzelfde netwerk bevindt. Op de startpagina van Cups kies je 'Adding Printers and Classes'. De browser zal je naar een wachtwoord vragen en proberen je naar een HTTPS-pagina om te leiden – dat leidt afhankelijk van de browser tot een security-foutmelding omdat je geen geldig certificaat toegevoegd hebt. In je lokale netwerk kun je dat negeren en je aanmelden als gebruiker 'pi' met het bijbehorende ingestelde wachtwoord.
Klik op 'Add Printer' en selecteer je printer. Cups vraagt je bij de volgende stappen vervolgens naar een naam een en een locatie voor de printer. Daarbij is het belangrijk een vinkje bij 'Share This Printer' te zetten. Hoe gecompliceerd het configureren is, is afhankelijk van de printer. Bijna alle HP-printers werken dankzij een omvangrijk driverpakket zonder verdere moeite. Installeer daar eenvoudig het pakket 'hplip' voor:
sudo apt install hplip
De meeste printers werken door de meegeleverde Gutenprint-driververzameling ook meteen. Als je model niet op de lijst staat, moet je op zoek naar een passend PPD-bestand en dat uploaden bij de Cupsinterface. De database bij openprinting.org vergemakkelijkt het zoeken. Vervolgens vraagt de installatie-assistent naar een paar standaardinstellingen en is de printer klaar voor gebruik.
Op een iOS- of Android-apparaat (wel vanaf Android 4.3) dat zich in hetzelfde netwerk bevindt, moet je de printer dan kunnen zien en bijvoorbeeld met een browser of de mail-app kunnen printen. Zo niet, controleer dan eerst in de Cupsinterface onder 'Printers' of de printer inderdaad wel gedeeld is. Klik daarvoor op de naam en kijk of er 'Shared' achter de naam staat. In de webinterface kun je bij 'Maintenance / Print Test Page' een testpagina laten printen en de printtaken laten weergeven.
De eerste scan
De tweede component voor een multifunctionele printer heet 'SANE', wat een afkorting is voor 'Scanner Access Now Easy'. Het instellen gaat inderdaad erg makkelijk.
De benodigde pakketten zijn al geïnstalleerd. Of je scanner door SANE herkend wordt, kun je met het volgende commando achterhalen:
scanimage -L
Op de commandline moet je dan de naam van de scanner kunnen zien. Verschijnt daar alleen een foutmelding, dan kan dat meerdere redenen hebben. Het kan zijn dat het SANE-project geen ondersteuning voor de scanner biedt – een overzicht staat bij de link onderaan dit artikel – of dat het apparaat simpelweg te weinig stroom krijgt. Bij sommige scanners die via usb aangesloten worden, is de stroomtoevoer van de usbpoorten van de Raspberry Pi niet toereikend. Je kunt die limiet softwarematig wel verwijderen, maar het is voor de Raspberry Pi gezonder als je de scanner op een aparte usb-hub met een externe voeding aansluit. Als de scanner door SANE herkend wordt, dan krijg je met scanimage -L de productnaam en de fabrikant te zien. Tussen aanhalingstekens staat de Linux-scannernaam, en die moet je bij de volgende regel voor een testscan invoegen:
scanimage -d <naam van de scanner> --resolution 300 --mode Color -x 210
-y 297 --format=png >test.png
De scanner moet dan met zijn werk beginnen en het bestand test.png in kleur met 300 dpi aanmaken in de huidige directory. Sommige scanners hebben waarden voor x en y nodig om een compleet vel A4-papier te kunnen scannen. Een overzicht van verdere instellingsmogelijkheden krijg je met
scanimage -h
Van veraf
Met SANE is het mogelijk ook vanaf afstand een scanner te bedienen. Om ervoor te zorgen dat dit werkt, moet je toegang tot de scanner toestaan. Bewerk daarvoor het configuratiebestand:
sudo nano /etc/sane.d/saned.conf
Ga daar naar het blok 'Access List'. Daar staan al een paar ip-adressen als voorbeeld, uitgecommentarieerd met #. Om de toegang voor een afzonderlijk adres toe te staan, volstaat het om dat toe te voegen. Om scannen vanuit het hele thuisnetwerk toe te staan, voeg je het adres van je netwerk met een 0 aan het eind toe, gevolgd door /24. Sla het bestand op en start SANE opnieuw met
sudo systemctl restart saned.socket
Er zijn meerdere mogelijkheden om via het netwerk te scannen. Voor Windows is er het gratis programma SaneTwain (zie de link onderaan dit artikel), dat een verbinding met de Windows-scannerinterface maakt. Gebrui-
kers van macOS krijgen contact met 'TWAIN SANE' – zie ook de link onderaan.
Linux-gebruikers kunnen zonder extra's bij je netwerkscanner. Zij hoeven op de client alleen maar het bestand /etc/ sane.d/net.conf te openen en het ip-adres of de hostnaam van de Raspberry-scanserver toe te voegen. Dan moet scanimage -L de scanner die op de Raspberry Pi is aangesloten laten zien. Voor Android is er de gratis app SaneDroid, die zijn taak prima vervult. Maar als je tijdens het scannen op het display tikt, breekt het programma af. Voor iOS ontbreekt een dergelijk aanbod helaas nog in de App Store.
Samenwerking
De printer en scanner werken nu allebei en zijn door de goed ondersteunde netwerkprotocollen door veel apparaten te bereiken. Alleen de mogelijkheid om snel een kopie te maken ontbreekt nog. Dat moet kunnen zonder dat je daar een pc voor hoeft aan te zetten. Daar hebben we een klein programmaatje voor gemaakt in Python, dat je makkelijk naar eigen inzichten kunt uitbreiden. Om het te gebruiken is een numeriek usb-toetsenbord als invoerapparaat al genoeg. Die zijn er al voor net iets meer dan 10 euro.
Het installeren van de kopieersoftware werkt via de commandline. Open een Terminal-venster en blijf in je home-directory. Installeer eerst de dependency's met
sudo apt install python-cups
Download het programma met git uit onze repository met de volgende regel:
git clone
https://github.com/jamct/raspi-copy Ga met cd raspi-copy vervolgens naar de nieuw aangemaakte directory en maak het programma uitvoerbaar met chmod 755 copy.py. Dan moet je het programma alleen nog zover krijgen dat het ook automatisch start als de Raspberry Pi opstart. Het programma werkt via de commandline en je zou het in plaats van de desktop uit kunnen voeren bij het opstarten, maar als de Raspberry Pi daarnaast nog andere taken moet vervullen, kun je het bij het opstarten als Terminal-venster starten. Daar staat in de directory het bestand copy. desktop voor. Kopieer dat bestand naar de autostart-directory met
cp copy.desktop
/home/pi/.config/autostart
Na een herstart van de Pi opent een blauw Terminal-venster met de kopieerinterface. Die is snel uitgelegd: met de functietoetsen F1 tot en met F4 op het grote toetsenbord selecteer je een scanner en met de knoppen F5 tot en met F8 de printer. Met de cijfers op het numerieke toetsenbord geef je het aantal kopieën op, waarbij + en - het aantal verhogen respectievelijk verlagen. Door op de Enter-toets te drukken begint het kopiëren. Met de kommatoets zet je het aantal kopieën weer terug en met de rekentekens * en / wissel je tussen een kleur- en zwart-witkopie.
Alle instellingen (behalve het aantal kopieën) worden door raspi-copy in een instellingsbestand opgeslagen en bij een herstart weer ingelezen.
Als je eenmaal een scanner en printer hebt geselecteerd, is een groot toetsenbord verder eigenlijk niet meer nodig en hebben ook de interface en het display hun diensten volbracht – de Raspberry Pi is nu klaar voor zijn nieuwe taak als kopieerapparaat.
Uitbreidingsmogelijkheden
De software is natuurlijk nog naar believen uit te breiden. Elke scan wordt tijdelijk als jpg-bestand opgeslagen en dan geprint. Om een document naar een netwerkshare of een usb-stick te scannen, zou je daar het aantal kopieën voor kunnen misbruiken. Als je aanneemt dat niemand meer dan 999 kopieën nodig heeft, kun je met een invoer als 999 en Enter de scan op een usb-medium laten opslaan. In het bestand copy.py hebben we dat al ingebouwd om zelf aan te kunnen passen.