Ten projekt powstał z pewnej 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ę i dzielić się nią w sieci. Ale nie zawsze Wasza drukarka będzie tam, gdzie router. Wtedy możecie użyć serwera 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. Popularne modele kosztują 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.
Oczywiście 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, plus karta SD i ładowarka od telefonu – razem ze 65 złotych,
- Karta WiFi – ok. 35 złotych – ale pewnie można taniej,
- 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 mój blog uczymy.edu.pl wiecie 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:
Sklejenie pudełka może wymagać dociśnięcia:
Zasilanie
Postanowiłem wbudować zasilacz w obudowę serwera. W ten sposób całe urządzenie będzie zasilanie bezpośrednio z kontaktu. W roli zasilacza 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 filozofii, ale musiałem wywiercić kilka otworów wentylacyjnych:
Gotowe:
Konfiguracja 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).
Wypalcie kartę SD ze tretch Lite (więcej na ten temat: mój kurs Raspberry). 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”.
Na karcie SD, w katalogu /boot stwórzcie plik “wpa_supplicant.conf”; pod Windows możecie użyć notepad, pod linux:
1 |
$ touch wpa_supplicant.conf |
Plik wypełnijcie:
1 2 3 4 5 6 7 |
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="SSID WASZEJ SIECI" psk="HASLO DO WASZEJ SIECI" } |
Instrukcja mówi, że linie powinny mieć “linuxowe” zakończenia (LF, \n, \10) – a nie Windowsowe “CR LF” (\13 \10, \r\n). 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.
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:
1 |
$ touch ssh |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# interfaces(5) file used by ifup(8) and ifdown(8) # Please note that this file is written to be used with dhcpcd # For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf' # Include files from /etc/network/interfaces.d: source-directory /etc/network/interfaces.d auto wlan0 allow-hotplug wlan0 iface wlan0 inet manual dns-nameserver 8.8.8.8 dns-nameserver 192.168.1.1 wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf |
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.
Teraz możecie przełożyć kartę SD do Raspberry.
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 (czyli naszej Raspberry) 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 – zadziała, pod warunkiem, że nie ustawicie tego samego adresu dla innego urządzenia (lub inne urządzenie zostanie skonfigurowane w ten sam sposób).
- 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 – w każdym robi się to trochę inaczej.
Mój serwer wydruku ustawiłem na adres lokalny 192.168.1.150.
Instalacja CUPS i SAMBA
Szczegóły znajdziecie tutaj, skrót instrukcji poniżej.
Zalogujcie się przez ssh na Raspberry (pod Windows możecie użyć np. Putty):
1 |
$ ssh pi@192.168.1.150 |
Uwaga: 192.168.89.1.150 jest adresem, który ustawiłem Rasoberry w poprzednim punkcie. U Was może być inny.
I teraz, uzupełnijcie system Raspberry (jak po każdej instalacji):
1 2 |
$ sudo apt-get update $ sudo apt-get upgrade |
Zainstalujcie pozostałe oprogramowanie:
1 2 3 4 5 |
$ sudo apt-get install cups $ sudo cupsctl --remote-any $ sudo usermod -a -G lpadmin pi $ sudo /etc/init.d/cups restart $ sudo apt-get install samba |
Teraz trzeba dokonać kilku zmian w pliku /etc/samba/smb.conf; powinien zawierać (oczywiście poniżej są tylko zmiany, nie cała zawartość pliku):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# CUPS printing. [printers] comment = All Printers browseable = no path = /var/spool/samba printable = yes guest ok = yes read only = yes create mask = 0700 # Windows clients look for this share name as a source of downloadable # printer drivers [print$] comment = Printer Drivers path = /var/lib/samba/printers browseable = yes read only = no guest ok = no |
Jeżeli wszystko pójdzie poprawnie, po restarcie, 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 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 – ale nie zadziałają. Przeznaczono je na inny sprzęt, procesor Raspberry nie zrozumie ich, nie zadziałają. Oczywiście możecie je próbować przekompilować ze źródeł – ale to historia na osobny tekst.
Możecie użyć qemu, który pozwala na instalowanie pakietów normalnie działających na innych architekturach. Czytałem, że niektórym to działało. Ja nie próbowałem.
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 będzie ten sam) i:
Kliknijcie “Administration” w menu górnym, wciśnijcie “Add Printer”:
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):
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”):
Na pierwszym miejscu listy powinna pojawić się Wasza drukarka podłączona do USB; wybierzcie ją i wciśnijcie “continue”:
Koniecznie zaznaczcie “Share this printer” – i dalej “continue”:
Brother pojawił się na liście, ale wcisnę “Select Another Make/Manufacturer”:
Na liście znajdę drukarkę “Raw” – i wcisnę “continue”:
Pozostaje wcisnąć “Add Printer” (u dołu ekranu):
I domyślne opcje:
Kolejny sukces – ze strony głównej wejdźcie na “printers” – Wasza drukarka powinna się tam pojawić:
Klient (komputer z Windows lub linuks)
W linuksie MINT – trzeba zacząć od zainstalowania sterowników. Jak wspomniałem – możecie je ściągnąć ze strony Brothera. 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ę. 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…? Obsługa skanera…
Źródła
Prepare SD card for wireless…
A security update
Raspberry Pi print server
https://www.raspberrypi.org/forums/viewtopic.php?t=191252
https://www.raspberrypi.org/forums/viewtopic.php?p=1024099
Bez serwera Google Print Cloud i możliwości drukowania ze swojego telefonu, to nie jest jeszcze skończony serwer wydruku. Ja używam tego: https://github.com/armooo/cloudprint oraz oryginalnego klienta Google na Androidzie. Nie pamiętam już, kiedy włączałem komputer żeby coś wydrukować.
Witaj,
GPC to całkiem ciekawa opcja – ale dla mnie raczej mało przydatna. Drukujemy jedynie z sieci domowej i podłączonych do niej komputerów (co mimo wszystko wydaje mi się najczęstszym przypadkiem). Z tego co widziałem malinowepi opisywał instalację klienta na Raspberry. Oczywiście wiąże się to z wystawieniem Twojej drukarki na świat:)
Dziękuję za wskazówkę,
Pozdrawiam,
A
A udostępnienie drukarki w sieci nie rozwiązuje problemu z dostępem każdego PC podpiętego w sieci?
Win7 (XP też miało) coś takiego ma i mogę drukować na starym samsungu z 3 komputerów w domu.
Oczywiście – ale komputer udostępniający… musi być włączony:) Podobny serwer wydruku zużywa naprawdę niewiele prądu, nie hałasuje – i jest bardzo mały.
Pozdrawiam,
Arek
Ekstra!
Witam!
Udało Ci się dodać obsługę skanera? :)
Powyższy artykuł “unowocześnił” mojego starego Brothera DCP-357C :)
Fajne :) Może skopiuję Twój pomysł :)
Drobna sugestia. Polakieruj sobie to pudło bo po pewnym czasie wybrudzi Ci się i będzie wyglądało tragicznie :) Najszybciej lakierem akrylowym.
Masz rację – lakierowanie jest konieczne – inaczej kurz się czepia. I tu też tak to jest zrobione, może nie widać na zdjęciach. Pozdrawiam, Arek
Do obsługi skanera SANED (SANE Daemon) oraz jako klient xScanImage albo GIMP.
Jeśli skanujesz głównie dokumenty, to przycisk na GPIO RasPi można sprzęgnąć z kawałkiem skryptu w BASHu i skanować na dysk sieciowy po każdym naciśnięciu przycisku. U mnie przycisk odpala scanimage -> unpaper -> convert, a na dysku sieciowym ląduje gotowy PDF. Dodatkowo każde naciśnięcie to kolejne zadanie skanowania. Jeśli mam zeskanować 5 kartek, wciskam 5 razy. Ponieważ skaner jest bez podajnika, muszę zmieniać kartki, gdy głowica skanera wraca. Da się przyzwyczaić, a i tak jest to dużo wygodniejsze niż robić to ręcznie.
Witaj – w momencie kiedy robiłem ten serwer, brother nie wspierał architektury arm dla dcp-j100. Stąd nie udało mi się dodać obsługi skanera. Problem okazał się na tyle ważny, że … przesiadłem się na terminal hp. Tutaj możesz poczytać o konfiguracji terminala hp pod cups i sane:
http://uczymy.edu.pl/wp/blog/2017/12/23/terminal-hp-serwer-wydruku-i-skanowania/
Pozdrawiam, Arek
Witaj, próbuje uruchomić czytnik kodów kreskowych (usb) w sieci lan a najlepiej w wifi, czy masz może jakiś pomysł na uruchomienie jego ? Może gotowy print server lub coś podobnego