Printserwer - system wydruku CUPS
Ostatnia zmiana: 2020-12-30 21:26
CUPS jest systemem wydruku, stosowanym w linuksie oraz MacOS (właścicielem projektu od pewnego czasu jest właśnie Apple). Za tym systemem przemawiają duże możliwości tworzenia serwerów wydruku, drukarek sieciowych i innych elementów związanych z drukowaniem. Możliwe jest utworzenie drukarki
RAW (bez sterowników, wszystko co przyjdzie jest w takiej samej formie wysyłane do drukarki) lub zainstalować sterowniki w postaci plików
ppd i utworzyć normalną drukarkę sieciową. W OpenWrt w przypadku chęci wykorzystania tej drugiej opcji może być problem w braku dodatkowych plików niezbędnych do drukowania na niektórych modelach (np. specjalne filtry zamieniające drukowany format na postać zrozumiałą dla drukarki), jednakże w wielu przypadkach nie powinno być z tym problemu. CUPS ma też przewagę na
p910nd w postaci mechanizmów kontroli, kolejkowania i nadzoru nad wydrukami. Posiada też graficzny panel konfiguracyjny.
Zakładamy że router posiada złącze USB i zainstalowana jest jego obsługa (np. pakiet
kmod-usb2). Niezbędne będzie też ustawienie hasła w systemie dla użytkownika
root. Poniższy poradnik opisuje instalację drukarki typu RAW. Poniższy poradnik przetestowano na OpenWrt Attitude Adjustment z drukarką Xerox Phaser 3117. Sama instalacja CUPSa wymaga ok 6MB, więc niezbędne może okazać się utworzenie
extroota.
Pakiety CUPS nie są dostępne w bieżących wydaniach OpenWrt
Instalacja
Upewniamy się, że nie jest zainstalowany sterownik
kmod-usb-printer oraz
p910nd. CUPS samodzielnie korzysta ze złącza USB przy pomocy specjalnej biblioteki, więc ten sterownik nie jest mu potrzebny
# opkg remove kmod-usb-printer p910nd
Jeżeli były zainstalowane te pakiety to należy teraz zrestartować router.
W przypadku gargoyle należy pamiętać o wcześniejszym usunięciu pakietu plugin-gargoyle-usb-printer.
Jeżeli wyświetlony zostanie błąd że nie ma takiego pakietu, to oznacza że możemy pojąć dalsze czynności
# opkg install cups
# opkg install cups-locale-pl # dla wygody, nie jest to konieczne
Plik konfiguracyjny to
/etc/cups/cupsd.conf, wymaga on pewnych modyfikacji żeby praca z cupsem na OpenWrt była bezproblemowa. Zmiany w pliku można wykonać edytorem tekstowym lub skorzystać z podanych poniżej poleceń:
- zmieniamy użytkownika na którym działa cups
# sed -i 's/User nobody/User root/' /etc/cups/cupsd.conf
# sed -i 's/Group nogroup/Group root/' /etc/cups/cupsd.conf
- zmieniamy autoryzację
# sed -i 's/AuthClass.*/AuthClass Anonymous/' /etc/cups/cupsd.conf
- dodatkowo - ustawiamy odpowiednie prawa dostępu dla modułu usb w cupsie
# chmod 700 /usr/lib/cups/backend/usb
Domyślnie ustawiony jest dostęp z sieci 192.168.1.0/24. Jeżeli używamy innej klasy adresowej należy to zmienić (opcja
Allow) stosownie do używanej adresacji.
Wykrywanie drukarki
Podłączamy drukarkę do USB, uruchamiamy moduł i sprawdzamy czy jest widoczna
# /usr/lib/cups/backend/usb
Jeżeli tak, powinna wyświetlić się pewna informacja, w moim przypadku było to:
DEBUG: list_devices
DEBUG: usb_find_busses=1
DEBUG: usb_find_devices=5
direct usb://Xerox/Phaser%203117?serial=L93813649....... "Xerox Phaser 3117" "Xerox Phaser 3117" "MFG:Xerox;CMD:GDI;MDL:Phaser 3117;CLS:PRINTER;MODE:GDI;STATUS:IDLE;" ""
Uruchamiamy cupsa
# /etc/init.d/cupsd enable
# /etc/init.d/cupsd start
Konfiguracja
Uruchamiamy interfejs graficzny, wpisując w przeglądarkę adres
http://192.168.1.1:631/admin . Wybieramy teraz po kolei:
-
Add Printer-
Local printer, zaznaczamy nazwę drukarki (w tym przypadku było to
Xerox Phaser 3117 (Xerox Phaser 3117))
- Klikamy
Continue- Opisujemy drukarkę - można zostawić domyślne opcje ale zaznaczamy
Share This Printer- Klikamy
Continue- Jako sterownik zaznaczamy
RAW- Klikamy
Add PrinterZostaniemy zapytani o hasło - podajemy login
root oraz hasło do routera.
- Nastąpi pytanie o banery, ustawiamy na
None i wybieramy
Set Default OptionsTo już cała konfiguracja. Ważna jest nazwa drukarki jaką nadaliśmy - powinna ona także wyświetlić się na adresie URL. W moim przypadku było to
http://192.168.1.1:631/printers/Xerox_Phaser_3117.
Załadowanie firmware do drukarki
(nie testowane)
Niektóre drukarki np. HP LaserJet 1020 wymagają przed drukowaniem załadowania firmware. Można to wykonać skryptem umieszczonym w pliku
/etc/hotplug.d/usb/20-printer o następującej zawartości:
#!/bin/sh
fw="/usr/lib/sihp1020.img"
logger "loading firmware $fw to CUPS USB device ..."
(
for uri in `$USB_BACKEND 2> /dev/null | grep -i 'HP.*LaserJet.*' | grep -v FWVER | cut -d ' ' -f 2`; do
if DEVICE_URI="$uri" /usr/lib/cups/backend/usb 1 1 1 1 '' $fw 2> /dev/null; then
logger "$uri... download successful."
else
logger "$uri... download failed."
fi
done
) &
Drukowanie z Linuksa i MacOS
W linuksie instalujemy także CUPSa, w MacOS powinien on być standardowo. Wchodzimy w konfigurację (
http://127.0.0.1:631/), wybieramy Administrację, Dodawanie drukarki i wybieramy
Internetowy protokół druku (https). Jako połączenie podajemy nazwę uzyskaną wcześniej, czyli
http://192.168.1.1:631/printers/Xerox_Phaser_3117. Dalej postępujemy wg własnego uznania, ale wybieramy konkretny sterownik, czyli nie
RAW a
Xerox / Phaser 3117. Poprawność działania można przetestować wysyłając stronę testową do drukarki.
W zależności od używanej wersji CUPSa można spróbować używać innego protokołu - IPP (dla CUPSa 1.5.x -
ipp://192.168.1.1:631/printers/Xerox_Phaser_3117) lub IPP14 (dla CUPSa -
ipp14://192.168.1.1:631/printers/Xerox_Phaser_3117). Niektóre drukarki/konfiguracje mogą wymagać użycia starszej wersji protokołu IPP14.
Drukowanie z Windows
W przypadku Windows 7 Home: z menu wybieramy
Urządzenia i drukarki, następnie
Dodaj drukarkę i
Dodaj drukarkę sieciową, bezprzewodową lub Bluetooth. Zostanie wyświetlone okno poszukiwania drukarek, wybieramy jednak opcję
Drukarki, której szukam, nie ma na liście. Zaznaczamy
Wybierz drukarkę udostępnioną wg nazwy i wprowadzamy naszą nazwę, czyli w tym przypadku
http://192.168.1.1:631/printers/Xerox_Phaser_3117. Przechodzimy dalej, wybierając właściwy sterownik (Xerox / Phaser 3117 w tym przypadku). Na zakończenie można sprawdzić poprawność działania wysyłając stronę testową do drukarki.
AirPrint
Mając urządzenia produkcji Apple (iPad, iPhone, iPod touch, komputer Mac) można uprościć drukowanie z nich uruchamiając usługę
AirPrint. Niestety wymagane jest, aby drukarka była w pełni obsługiwana przez CUPSa (nie raw, wymagany jest konkretny sterownik ppd). Z tego też powodu nie nadają się tanie i proste drukarki GDI.
Konfiguracja AirPrint jest dość prosta i sprowadza się do utworzenia odpowiedniego pliku dla usługi
Avahi. Sam opis konfigurowania tej usługi jest opisany; w skrócie należy wykonać polecenia:
# opkg update
# opkg install avahi-daemon dbus libavahi-dbus-support
# /etc/init.d/dbus enable
# /etc/init.d/dbus start
# /etc/init.d/avahi-daemon enable
# /etc/init.d/avahi-daemon start
Teraz wystarczy tylko utworzyć odpowiedni plik
services który w tym przypadku (drukarka Xerox / Phaser 3117 z odpowiednim ppd) wyglądał następująco:
<?xml version="1.0" ?><!DOCTYPE service-group SYSTEM 'avahi-service.dtd'>
<service-group><name replace-wildcards="yes">AirPrint Xerox_Phaser_3117 @ %h</name>
<service>
<type>_ipp._tcp</type>
<subtype>_universal._sub._ipp._tcp</subtype>
<port>631</port>
<txt-record>txtvers=1</txt-record>
<txt-record>qtotal=1</txt-record>
<txt-record>Transparent=T</txt-record>
<txt-record>URF=none</txt-record>
<txt-record>rp=printers/Xerox_Phaser_3117</txt-record>
<txt-record>note=Xerox Phaser 3117</txt-record>
<txt-record>product=(GPL Ghostscript)</txt-record>
<txt-record>printer-state=3</txt-record>
<txt-record>printer-type=0x4</txt-record>
<txt-record>pdl=application/octet-stream,application/pdf,application/postscript,application/vnd.cups-raster,image/gif,image/jpeg,image/png,image/tiff,image/urf,text/html,text/plain,application/rss+xml,application/vnd.cups-banner,application/vnd.cups-command</txt-record>
</service>
</service-group>
Można posłużyć się odpowiednim skryptem, który na podstawie konfiguracji CUPSa wykona to za nas:
# opkg install wget
# opkg install python/python-cups python-expat
# cd /tmp
# wget -O airprint-generate.py --no-check-certificate https://raw.github.com/tjfontaine/airprint-generate/master/airprint-generate.py
# echo "image/urf urf string(0,UNIRAST<00>)" >> /usr/share/cups/mime/mime.types
# echo "image/urf application/pdf 100 pdftoraster" >> /usr/share/cups/mime/mime.convs
# /etc/init.d/cups restart
# chmod 755 ./airprint-generate.py
# ./airprint-generate.py
Zostaną w bieżącym katalogu utworzone pliki
service zawierające dane o drukarkach (te RAW zostaną pominięte). Wystarczy tylko skopiować je w odpowiednie miejsce i zrestartować usługę
avahi:
# cp AirPrint-Xerox_Phaser_3117.service /etc/avahi/services/
# /etc/init.d/avahi-daemon stop
# /etc/init.d/avahi-daemon start
Pakiety wget/python/python-cups/python-expat można odinstalować bo nie będą już potrzebne do tej usługi.
Google Cloud Print
Dla użytkowników urządzeń ze znaczkiem Androida może przydać się usługa drukowania w chmurze. W skrócie polega ona na udostępnieniu skonfigurowanej drukarki w chmurze google, dzięki czemu urządzenia mogą zdalnie drukować na tak udostępnionej drukarce. Podobnie jak dla AirPrint wymagane jest, aby drukarka była w pełni obsługiwana przez CUPSa i miała zainstalowany swój własny sterownik PPD (nie RAW!). Drukowanie przez Google dostępne jest standardowo w Androidzie 4.4 (KitKat), dla innych wersji odpowiednią aplikację można znaleźć w
Google Play.
Usługa Google Cloud Print została wyłączona na początku 2021r.
Cała operacja sprowadza się do instalacji odpowiedniego skryptu i jego uruchomienia:
# opkg install wget
# opkg install python python-openssl python-cups
# cd /root
# wget --no-check-certificate https://github.com/armooo/cloudprint/archive/master.tar.gz
# tar zxvf master.tar.gz
# rm master.tar.gz
# python cloudprint-master/cloudprint/cloudprint.py
Podajemy użytkownika i hasło do konta Google. O tej chwili drukarka jest dostępna na naszym koncie Google i można na niej drukować. Jeżeli chcemy wylogować się z konta wykonujemy polecenie
# python /root/cloudprint-master/cloudprint/cloudprint.py -l
Dane do podłączania można także umieścić w pliku (służy do tego opcja -a)
Usługa ta nie wymaga otwierania żadnych portów na firewallu.
Zakończenie
W pliku konfiguracyjnym cupsa znajduje się opcją (
TempDir) wskazująca katalog gdzie tymczasowo przechowywane są dane do wydruku. Domyślnie jest to katalog w /var, czyli w OpenWrt w pamięci. Jeżeli używamy extroota dobrze jest go zmienić na inny katalog na nośniku, żeby zapewnić wystarczającą ilość miejsca.
Domyślnie dostarczane są także dwie predefiniowane konfigruacje drukarek o nazwach
USB i
LPT. Można je usunąć.