Serwer wydruku na Raspberry Pi Zero (CUPS)

Ten projekt powstał z frustracji. Po n-tej przegranej aukcji postanowiłem sam sobie zbudować serwer wydruku.

Serwer wydruku to takie urządzenie, które umożliwia podłączenie drukarki do domowej sieci ethernet. W ten sposób każdy wpięty do niej komputer może wysłać wydruki na drukarkę bez konieczności fizycznego podłączania się do niej – np. kablem USB. Jest to standardowa funkcja drukarek klasy biurowej. Większość z nich wyposażona jest w gniazdo Ethernet lub kartę WiFi. W drukarkach domowych opcja ta kosztuje dodatkowe pieniążki. Moja drukarka to Brother DCP-J100, która niestety takiej opcji nie posiada.

Jeżeli nie macie portu ethernet w drukarce – jedynie USB – nadal możecie podłączyć ją do sieci. Wiele nowoczesnych routerów wyposażono w dodatkowy port USB, do którego możecie podłączyć drukarkę. Ale nie zawsze Wasza drukarka będzie tam, gdzie router. Wtedy możecie użyć serwer wydruku. Z jednej strony wtyka się do niego kabel USB z drukarki – z drugiej podłącza do domowej sieci. Podłączenie może być przewodowe – wtedy potrzebujecie podciągnąć kabel ethernet z routera. Druga opcja to połączenie bezprzewodowe, gdzie serwer wydruku łączy się do domowej sieci za pomocą karty WiFi.

Urządzenia tego typu nie są najtańsze. Firma tp-link oferuje je za ok. 150 złotych – a wersja bezprzewodowa kosztuje już ok. 270 złotych. Wybrałem tą drugą, bezprzewodową opcję – ale postanowiłem zrobić to znacznie taniej. A cóż może być tańszego od Raspberry Pi Zero?

Pomysł

  • Serwer wydruku zbuduję na Raspberry Pi Zero,
  • Raspberry wyposażę w najnowszego Raspbiana Stretch (wersja Lite) i serwer CUPS,
  • Raspberry będzie zasilane z gniazdka sieciowego (opcją były baterie). W domu drukuje się na tyle, że to się opłaca.
  • Raspberry Pi Zero ma tylko jeden port USB. Konieczny będzie więc HUB USB.
  • Do huba podłączę kartę WiFi oraz drukarkę.
  • Na moim routerze skonfiguruję statyczny adres IP dla Raspberry. W ten sposób serwer wydruku będzie zawsze pod tym samym adresem.

Dużo łatwiej byłoby z wersją Raspberry Pi Zero W, która ma wbudowane WiFi. Ale takiej nie mam – a koszt zakupu to ok 70 złotych z dostawą. A moja Zero teraz leży i się kurzy.

Policzmy:

  • Pi Zero – ok. 25, w niej karta SD i do niej ładowarka z telefonu – razem ze 65 złotych,
  • Karta WiFi – u mnie TP-Link – ok. 35 złotych,
  • Pasywny hub USB, 12 złotych z dostawą.

Daje to trochę ponad 100 złotych. Chociaż właściwie… tylko hub USB kupiłem:) Reszta leżała po domu.

Budowa…

Oczywiście, mój serwer mógł wyglądać tak (z dokładnością do kilku kabli):

Śledząc ten blog wiecie już jednak, że tak bym tego nie zostawił:)

Hub

Front:

„Zdemolowałem” huba:

Musiałem wylutować diodkę – ale przyda mi się jeszcze, więc w jej miejsce później wlutuję przewody – i wyprowadzę diodę na obudowę:

Wtyczka huba nie była mi już potrzebna, odciąłem ją, zabezpieczyłem przewody klejem:

Zamiast wtyczki wlutowałem przejściówkę na micro USB, która  pasuje do Raspberry:

I już wbudowany w pudełko:

Zasilanie

Postanowiłem wbudować zasilacz w obudowę serwera. Za zasilacz użyłem… ładowarki do telefonu komórkowego. Rozebrałem jej obudowę, w miejsce bolców gniazdka przylutowałem przewody:

Tylną ściankę dociąłem pod gniazdo i wyłącznik:

Pozostało połączyć je z zasilaczem:

Złożone:

Kabelki z zasilacza podłączyłem na złączkę:

I teraz podłączenie do Raspberry… Miałem 5v, więc mogłem się pokusić o zasilenie Raspberry przez pin z grzebienia GPIO. Ale… no nie jest to najlepszy pomysł. Zasilanie jest wtedy podłączone bez bezpiecznika, bez zabezpieczenia przed odwrotną polaryzacją itp. Została mi jeszcze jedna przejściówka USB-microUSB, wybrałem więc opcję jak dla podłączenia huba – kabelkami zasilającymi do przejściówki.

LED stanu

Pamiętacie diodkę z hub’a? Zapala się w momencie zasilenia huba. Dzięki niej będę wiedział, że całość jest zasilona.

Odpowiedni otwór nawierciłem już wcześniej. Teraz włożyłem w niego diodkę, zaklajstrowałem i dolutowałem przewody z huba:

Raspberry

Raspberry przykręciłem na małej półeczce do boku pudełka:

Całość:

Pokrywka…

Tu nie było filozfii, ale musiałem wywiercić kilka otworów wentylacyjnych:

Gotowe

Raspberry Pi

Stretch, karta WiFi na USB i Raspberry Pi Zero

Jak zwykle zacznijcie od pobrania obrazu z raspberrypi.org. Ja używam najnowszego Raspbiana Stretch Lite (wersja bez interfejsu graficznego). Teraz:

  1. Wypalcie kartę SD ze tretch Lite (więcej na ten temat: mój kurs Raspberry)
  2. Cały czas na komputerze, otwórzcie pierwszą partycję na karcie SD. Partycja ta jest sformatowana jako FAT32. Możecie ją odczytać nawet pod Windows. Dla użytkowników Windows: nie próbujcie „naprawiać karty”, jak to zasugeruje system. Z kartą jest wszystko w porządku, to Windows jej „nie rozumie”.
  3. W katalogu /boot stwórzcie plik „wpa_supplicant.conf”; pod Windows możecie użyć notepad, pod linux:
  4. Plik wypełnijcie:

    Instrukcja mówi, że linie powinny mieć „linuxowe” zakończenia (LF) – a nie Windowsowe „CR LF” (\13 \10). Pod linuksem nie ma problemu (można to sprawdzić komendą np.: „file”). Pod Windows możecie użyć np. Notepad++ i poprawić końce linii na linuksowe.

  5. W katalogu /boot stwórzcie też plik „ssh” (bez rozszerzenia tylko nazwa). Domyślnie ssh jest wyłączone. Dodanie takiego pliku sprawi, że system go odblokuje:
  6. Teraz trzeba poprawić /etc/network/interfaces. Dobra wiadomość dla użytkowników linuxa: możecie po prostu otworzyć drugą partycję i edytować plik za pomocą np. nano.

    Teoretycznie wpisy „dns-nameserver” nie są potrzebne – ale bez nich moja Raspberry nie potrafiła przetłumaczyć sobie adresów. Moja sieć na maskę 192.168.1/24 – poprawcie drugi z wpisów, jeżeli Wasza sieć jest inna.

    Dla użytkowników Windows: druga z partycji na karcie SD z Raspbianem sformatowana jest systemem plików ext4. Jest kilka sposobów, żeby otworzyć (i edytować) system ext4 na Windows. Wymaga to pewnej gimnastyki… Jeżeli jednak jesteście początkujący, proponuję raczej podłączyć do Raspberry klawiaturę, telewizor, zasilić i uruchomić – i dopiero wtedy wykonać powyższe zmiany w /etc/network/interfaces. Na tym etapie możecie potrzebować aktywnego huba (Zero ma tylko jedno USB). Niektóre klawiatury są zbyt prądożerne jak na możliwości Zero.

Statyczny adres Raspberry

Adres IP serwera wydruku warto ustawić na statyczny. W ten sposób przy każdym starcie Raspberry dostanie ten sam adres IP – czyli Wasza drukarka będzie zawsze pod tym samym adresem. Raz ustawicie, zapiszecie – i będziecie mogli zapomnieć.

Sposobów jest kilka:

  • Adres IP można skonfigurować na Raspberry i niejako go wymusić. Oczywiście inne urządzenie może mieć ten sam pomysł – i wtedy powstanie problem,
  • Jak powyżej – Raspberry Pi skonfigurowana ze stałym adresem – ale adres pochodzi spoza puli przydzielanej przez DHCP routera – powinno zadziałać, pod warunkiem, że nie ustawicie tego samego adresu dla innego urządzenia.
  • Adres statyczny ustawiony na routerze.

Ostatnia opcja wydaje mi się najsensowniejsza. Każdy router umożliwia przyporządkowanie konkretnego IP do MAC’a karty sieciowej. Dla przykładu, w moim Archer ustawia się to w menu Network/LAN Settings/Address reservation. Po szczegóły odsyłam Was do instrukcji Waszego routera.

Instalacja CUPS i SAMBA

Szczegóły znajdziecie tutaj, skrót poniżej:

  1. Zalogujcie się przez ssh na Raspberry:

    (pod Windows możecie użyć np. Putty). I teraz:
  2. Zainstalujcie pozostałe oprogramowanie:
  3. Teraz trzeba dokonać kilku zmian w pliku /etc/samba/smb.conf; powinien wyglądać jak:

Jeżeli wszystko pójdzie poprawnie, w wyszukiwarce pod adresem: 192.168.1.150:631 powinniście zobaczyć stronę powitalną serwera CUPS:

Konfiguracja drukarki

Moja drukarka to Brother DCP-J100. Niestety – nie ma jej na liście obsługiwanych urządzeń CUPS. Firma Brother była jednak tak miła, że stworzyła również sterowniki dla Linuxa. Ale uwaga: oprogramowanie dostarczone przez Brothera jest przeznaczone na inne architektury procesorów (powiedzmy pecetowo – laptopowe)! Tymczasem Raspberry to procesor ARM. Mimo, że możecie wymusić instalację i386 na Raspberry – nie zadziałają. Przeznaczono je na inny sprzęt, procesor Raspberry nie zrozumie ich.

Możecie użyć pakiet qemu, który pozwala na instalowanie pakietów normalnie działających na innych architekturach. Czytałem, że niektórym to działało.

Jest jednak łatwiejszy sposób: instalacja Waszej drukarki jako „raw”. Wtedy to nie serwer steruje drukarką – a podłączające się do niej klient.

Instalacja drukarki raw (raspberry)

Włączcie raspberry, podłączcie do niej drukarkę. Otwórzcie w przeglądarce adres „192.168.1.150:631” (zależnie od Waszej sieci, ale port :631 powinien być wszędzie ten sam) i:

  1. Kliknijcie „Administration” w menu górnym, wciśnijcie „Add Printer”:

  2. System przeniesie Was z „http” do „https” ; mogą wystąpić problemy z certyfikatem – nie przejmujcie się tym i idźcie dalej (Advanced/Go to unsafe):

  3. Powrócicie do „Administration”, jeszcze raz wciśnijcie „Add Printer”. Pojawi się pytanie o użytkownika i hasło – wpiszcie domyślne konto dla raspberry (zakładam, że go nie zmienialiście – „pi” i hasło „rapsberry”):

  4. Na pierwszym miejscu listy powinna pojawić się Wasza drukarka podłączona do USB; wybierzcie ją i wciśnijcie „continue”:

  5. Koniecznie zaznaczcie „Share this printer” – i dalej „continue”:

  6. Brother pojawił się na liście, ale wcisnę „Select Another Make/Manufacturer”:

  7. Na liście znajdę drukarkę „Raw” – i wcisnę „continue”:

  8. Pozostaje wcisnąć „Add Printer” (u dołu ekranu):

  9. I domyślne opcje:

Kolejny sukces – ze strony głównej wejdźcie na „printers” – Wasza drukarka powinna się tam pojawić:

Klient

W linuksie MINT – trzeba zacząć od zainstalowania sterowników. Firma Brother jest tak uprzejma, że udostępnia je na swojej stroni. Potem po prostu otwiera się komponent „printers” – który sam znajduje drukarkę sieciową.

Pod Windows trzeba przejść do otoczenia sieciowego – jeżeli jego odkrywanie nie jest włączone, będziecie musieli to zrobić:

Kliknijcie na pasek ostrzeżenia i włączcie odnajdywanie w sieci:

Na liście odnajdźcie element „raspberrypi”; kliknijcie go – powinna pojawić się drukarka:

Kliknijcie ją. System może zapytać o instalację sterowników.

Podsumowanie

Prosta budowa, ogólnie dostępne elementy (wiele z odzysku), nie za wiele roboty – takie projekty lubię. Job done. Serwer działa z windowsami i linuxami. Właściwie chodzi w trybie 24/7 – i nie było z nim żadnego problemu.

Co ciekawe… przy okazji powstało całkiem sprytne pudełko, które można wykorzystać nie tylko jako serwer wydruku:)

Co mnie czeka…? Skaner…

Źródła

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *