LinkedIn YouTube Facebook
Szukaj

Wstecz
SoM / SBC

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

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

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.

/wp-content/uploads/artykuly/Serwer_wydruku_na_Raspberry_Pi_z_funkcja_automatycznego_wlacznika/art_rys_3.gif

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

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]

Łukasz Skalski - absolwent Politechniki Gdańskiej, miłośnik FLOSS, autor książki "Linux. Podstawy i aplikacje dla systemów embedded" oraz szeregu artykułów dotyczących programowania systemów wbudowanych. Zawodowo związany z firmą Samsung. Wszystkie wolne chwile poświęca projektowaniu i programowaniu urządzeń wyposażonych w mikroprocesory 8-/16- i 32-bitowe. Szczególnym zainteresowaniem obejmuje tematykę systemu Linux w aplikacjach na urządzenia embedded.