Serwer wydruku na Raspberry Pi z funkcją automatycznego włącznika
Komputer jednopłytkowy Raspberry Pi znalazł swoje zastosowanie w wielu przeróżnych projektach hobbystycznych i komercyjnych. Jednym z częściej realizowanych projektów budowanych w oparciu o zestaw Raspberry Pi jest prosty serwer wydruku, który umożliwia nam „przerobienie” zwykłej drukarki na drukarkę wyposażoną w interfejs sieciowy. Dzięki temu zyskujemy możliwość dzielenia drukarki pomiędzy wszystkie urządzenia dołączone do lokalnej sieci, drukowanie poprzez połączenie WiFi, a tym samym uzyskujemy wygodę użytkowania zarezerwowaną dotychczas wyłącznie dla posiadaczy drogich kombajnów biurowych. Czym jednak ten artykuł będzie różnił się od szeregu już dostępnych w Internecie, opisujących zbliżone tematycznie projekty? Jedną z ogromnych zalet zestawu Raspberry Pi jest możliwość łączenia projektów z zakresu elektroniki i oprogramowania (dzięki łatwemu dostępowi do wyprowadzeń GPIO i interefejsów I2C czy SPI). Tak więc w opisywanym projekcie rozbudujemy nasz serwer wydruku o niewielki układ sterowania umożliwiający włączanie/wyłączanie naszej drukarki w momencie jej bezczynności. W przypadku odebrania przez serwer wydruku zgłoszenia dotyczącego utworzenia nowego zadania do wydruku, drukarka zostanie automatycznie włączona do sieci, a następnie wyłączona po zakończeniu realizacji wszystkich zadań.
Opis projektu został podzielony na trzy części:
- oprogramowanie – przedstawiający instalację i konfigurację pakietu CUPS oraz prostego linuksowego daemona „CUPS GPIO Notifier ” (przygotowanego na potrzeby niniejszego projektu), którego zadaniem jest monitorowanie nadchodzących zadań wydruku i sterowaniem zasilaniem podłączonej drukarki,
- sprzęt – rozdział ten przedstawia krótki opis prostego wyłącznika/włącznika triakowego, który umożliwia sterowanie urządzeniami podłączonymi do napięcia sieciowego 230V za pomocą wyprowadzeń GPIO zestawu Raspberry Pi,
- urządzenia klientów – w rozdziale tym przedstawiono praktyczne wykorzystanie zrealizowanego projektu, a więc opisano sposób konfiguracji drukarki sieciowej na systemach operacyjnych Windows oraz urządzeniach wyposażonych w system operacyjny Android.
Do realizacji niniejszego projektu wykorzystano system operacyjny Wheezy Raspbian (w wersji 2013-09-25) dostępny do pobrania na stronie rasppberypi.org.
Instalacja i konfiguracja CUPS na platformie Raspberry Pi
Tytuł niniejszego podrozdziału jest dość przewrotny, ze względu na fakt, że instalacja i konfiguracja pakietu CUPS w systemie wbudowanym nie różni się niczym od standardowej konfiguracji z urządzeń stacjonarnych. Czym jest jednak CUPS? CUPS (skrót od angielskiego Common UNIX Printing System ) jest popularnym serwerem druku dostępnym m.in. dla systemów operacyjnych takich jak GNU/Linux, FreeBSD, Mac OS X czy Solaris. Dzięki obsłudze internetowego protokołu drukowania IPP, CUPS udostępnia wiele ciekawych funkcji, jak np. szyfrowanie czy sieciowy katalog drukarek. Dużą zaletą pakietu CUPS jest łatwy w obsłudze i intuicyjny sieciowy interfejs użytkownika dostępny z poziomu przeglądarki internetowej. Dzięki instalacji gotowego i darmowego oprogramowania CUPS, użytkownik jest zwolniony z konieczności tworzenia całego interfejsu sieciowego i procesu zarządzania drukarkami podłączonymi przez port USB – instalując i konfigurując wyłącznie jeden pakiet oprogramowania otrzymujemy potężną funkcjonalność drukarki sieciowej.
Dzięki apt-get – narzędziu do zarządzania pakietami APT, instalacja pakietu CUPS na płytce Raspberry Pi jest niezwykle prosta i sprowadza się do wywołania wyłącznie polecenia:
sudo apt-get update sudo apt-get install cups
Po zainstalowaniu pakietu CUPS dodajemy naszego użytkownika (domyślnie jest to użytkownik o nazwie pi ) do grupy lpadmin :
sudo usermod -a -G lpadmin pi
W tym momencie, użytkownik ma do dyspozycji dwie metody konfiguracji pakietu CUPS:
- bezpośrednio na urządzeniu Raspberry Pi – za pomocą terminala, połączenia SSH lub (jeżeli zestaw Raspberry Pi został podłączony do wyświetlacza za pomocą interfejsu HDMI) poprzez przeglądarkę internetową pod lokalnym adresem http://localhost:631,
- udostępniając funkcję konfiguracyjne dowolnemu urządzeniu w sieci, a następnie dokonać konfiguracji CUPS-a poprzez dowolną przeglądarkę internetową (opcja sugerowana).
Pierwsza z przedstawionych opcji może być dla początkujących użytkowników dość złożona, ponieważ wymaga ręcznej edycji pliku konfiguracyjnego cupsd.conf zlokalizowanego w /etc/cups/ , oraz dość sumiennego przeanalizowania jego budowy. W domyślnej konfiguracji CUPS nie zezwala na dostęp do drukarki z zewnątrz. Aby mieć możliwość konfiguracji urządzenia z dowolnego węzła lokalnego lub podsieci, należy wprowadzić niezbędne zmiany we wspomnianym pliku cupsd.conf za pomocą dowolnego edytora (np. vi ):
sudo vi /etc/cups/cupsd.conf
Aby umożliwić dostęp do drukarki komputerom z podsieci 192.168.0.*, w sekcji <Location>…</Location> pliku cupsd.conf wprowadzamy następujące zmiany:
Order Deny,Allow Deny All Allow 127.0.0.1 Allow 192.168.0.*
W tym samym pliku wyszukujemy również wpis:
Listen localhost:631
i zamienimy go na poniższy:
Listen 631
Znacznie wygodniejszą opcją jest zezwolenie podłączonym do sieci użytkownikom na zdalną konfigurację pakietu CUPS (oczywiście tylko tym znającym login i hasło dostępowe do Raspberry Pi). Aby umożliwić zdalny dostęp do opcji konfiguracyjnych CUPS, w terminalu urządzenia Raspberry Pi wydajemy następujące polecenia:
sudo cupsctl --remote-any sudo /etc/init.d/cups restart
Po restarcie usługi CUPS, możemy przystąpić do instalacji podłączonej do Raspberry Pi poprzez złącze USB, drukarki, za pomocą wygodnego interfejsu webowego. Aby podłączyć się do wspomnianego interfejsu, wystarczy z dowolnego urządzenia w sieci odwiedzić stronę:
http://adres_ip_raspbberypi:631
Po wpisaniu nazwy użytkownika i hasła dostępu zostaniemy przeniesieni do interfejsu, jak na rysunku 1.
Rys. 1. Interfejs konfiguracji pakietu CUPS
Po krótkim zapoznaniu się z dostępnymi opcjami oraz możliwościami interfejsu możemy przystąpić do instalacji podłączonej do Raspberry Pi drukarki. W tym celu z górnego menu wybieramy zakładkę Administration , a następnie opcję Add Printer.
Rys. 2. Instalacja nowej drukarki
Jeżeli nasza drukarka jest podłączona do urządzenia i włączona do sieci, to zostanie automatycznie wykryta przez interfejs w grupie Local Printers. Zaznaczamy naszą drukarkę i wybieramy przycisk Continue. W kolejnym oknie ustawiamy nazwę, opis i ewentualnie określamy lokalizację naszej drukarki. Ważnym elementem jest nazwa urządzenia, którą wykorzystywać będziemy przy konfiguracji klientów (w systemach Linux, Windows i Android). Przed wciśnięciem przycisku Continue zaznaczamy opcję “ Share This Printer ” i przechodzimy do opcji instalacji sterownika.
Rys. 3. Okno ustawień nazwy i opisu nowej drukarki
W następnym kroku konfiguracji, dokonujemy wyboru odpowiedniego sterownika dla naszej drukarki z dostępnego menu, lub poprzez załadowanie pliku PPD. Konfiguracja drukarki i pakietu CUPS jest już zakończona. Podsumowanie konfiguracji możemy wyświetlić w zakładce Printer.
Rys. 4. Podsumowanie ustawień zainstalowanych w systemie drukarek
Kompilacja i instalacja programu „CUPS GPIO Notifier”
Jak wspomniano we wstępie niniejszego artykułu, większość podobnych opisów projektów, które można znaleźć w sieci, kończy swój opis tematyki pakietu CUPS na Raspberry Pi, wyłącznie na przedstawieniu sposobów jego konfiguracji. W przedstawionym projekcie zamysłem Autora jest jednak pójść krok dalej, dlatego też w ramach artykułu przygotowano aplikację „ CUPS GPIO Notifier ”, której głównym zadaniem jest zmiana stanu wybranego wyprowadzenia GPIO na czas drukowania dokumentów przesłanych do serwera CUPS. Realizacja połączeń sprzętowych (przedstawionych w rozdziale „ Sprzęt ”) w połączeniu z funkcjonalnością dostarczaną przez „ CUPS GPIO Notifier ” umożliwia automatyczne włączanie drukarki wyłącznie w momentach, gdy zlecono zadania do druku, a tym samym ograniczyć do zera pobór prądu w trakcie jej bezczynności.
Aby skompilować i zainstalować aplikację „ CUPS GPIO Notifier ” w pierwszej kolejności pobieramy narzędzie git (pozwalającą na pobieranie i zarządzenie repozytoriami GIT) oraz bibliotekę libglib2-0 , której funkcje wykorzystano do przygotowania dedykowanego daemona:
sudo apt-get install git sudo apt-get install libglib2.0-dev
W kolejnym kroku pobieramy kod źródłowy aplikacji:
git clone https://github.com/lukasz-skalski/CUPS-GPIO-Notifier.git
A następnie kompilujemy i instalujemy:
cd CUPS-GPIO-Notifier make sudo make install
Dzięki przygotowanym skryptom SysVinit , aplikacja „ CUPS GPIO Notifier ” zostanie automatycznie uruchomiona jako daemon, przy kolejnym uruchomieniu zestawu Raspberry Pi.
W domyślnej konfiguracji, aplikacja „ CUPS GPIO Notifier ”, przy odebraniu sygnału o zleceniu nowego zadania dla naszej drukarki sieciowej, zmienia stan wyjścia GPIO o numerze 23 na czas 180 sekund (odebranie każdego nowego zadania resetuje licznik czasu). Aby zmienić domyślne ustawienia, należy dokonać edycji pliku /etc/init.d/cups_gpio_notifier_sysv , przypisując argumenty uruchomienia programu według formatowania wskazywanego przez polecenie:
cups_gpio_notifier –help
Usage:
cups_gpio_notifier [OPTION…] – Cups GPIO Notifier
Help Options:
-h, –help Show help options
Application Options:
-g, –gpio GPIO Output Number [default: 23]
-t, –time number of seconds to turn off the printer [default: 180]