Dodanie drukarki USB do routera z OpenWrt

Zawartość

Ostatnio zdecydowałem się na dodanie drukarki podłączonej za pomocą portu USB do mojego routera z oprogramowaniem OpenWrt.

Podczas gdy na co dzień korzystam z rozwiązania bezprzewodowego z wbudowanym AirPrint (dzięki czemu drukuję bezpośrednio z iPhone/iPad), udostępnienie drukarki na USB w sieci wiąże się z zakupem serwera druku (print server).

Niestety, obecnie dostępnym serwerom druku brakuje wsparcia dla, chociażby AirPrint, czyli możliwości drukowania bezprzewodowego z urządzeń Apple takich jak iPhone czy iPad.

Jeżeli już znajdę taki, który podsiada AirPrint, to albo jest on bardzo drogi, albo producent zaprzestał jego dalszego rozwoju, a szkoda.

W związku z tym postanowiłem wykorzystać mój router z oprogramowaniem OpenWrt. Jako że posiada on dwa porty USB, z czego jeden, USB 2.0, który akurat mam wolny, nadaje się on idealnie do podłączenia drukarki.

Tak naprawdę zależało mi najbardziej na AirPrint, a co z tego wyszło, przeczytasz dalej.

Słowem wstępu

Na wstępie sprzęt, który będę używał w poniższym przykładnie:

  • Router: Linksys WRT3200ACM z oprogramowaniem OpenWrt
  • Drukarka: Samsung CLP-325 na USB

Moim głównym założeniem będzie udostępnienie drukarki w sieci, z możliwością druku z komputera z macOS. Dodatkowo uwzględnię drukowanie z poziomu komputera z systemem Windows.

W typowym rozwiązaniu (Raspbian + Raspberry Pi + drukarka USB) posłużyłbym się pakietem CUPS i tyle. Niestety, w obecnej wersji oprogramowania OpenWrt pakietu CUPS nie uświadczymy, ze względu na ograniczenia ze strony routerów (pamięć i moc obliczeniowa). CUPS sam w sobie ma spore wymagania pod tym względem, w związku z tym oficjalne źródła zalecają inne podejście.

Oczywiście, jeżeli chcesz, to możesz skompilować własny pakiet CUPS ze źródeł. Da się i nawet będzie działać. Jednakże problem pojawi się, gdy będziesz chciał zaktualizować oprogramowanie na twoim routerze. Mimo że według mojego opisu będziesz w łatwy sposób mógł przywrócić ustawienia i zainstalowane pakiety, go w przypadku CUPS, będziesz musiał go skompilować na nowo, a wierz mi, nie jest to szybkie rozwiązanie.

Instalacja serwera druku

Serwer druku p910nd dostępny jest w postaci gotowego pakietu do zainstalowania z poziomu przeglądarki (System > Software) lub terminala:

opkg update
opkg install p910nd

Dodatkowo warto zainstalować aplikację, dodającą możliwość zarządzania serwerem z poziomu naszego panelu administracyjnego LuCI.

opkg install luci-app-p910nd

Ostatnim pakietem, który potrzebujemy, jest obsługa drukarek USB.

opkg install kmod-usb-printer

Znalezienie drukarki

Nim zaczniemy konfigurację naszego serwera druku, musimy sprawdzić, czy nasza drukarka jest wykrywana przez system.

Po podłączeniu kabla USB (przy włączonej drukarce) i wykonaniu w terminalu komendy dmsg powinniśmy zobaczyć coś takiego:

usb 1-1: new high-speed USB device number 4 using orion-ehci
usblp 1-1:1.0: usblp0: USB Bidirectional printer dev 4 if 0 alt 0 proto 2 vid 0x04E8 pid 0x329F

I za pomocą komendy lsusb sprawdzamy, czy nasze urządzenie jest rozpoznane prawidłowo. W przypadku mojej drukarki otrzymałem:

Bus 001 Device 004: ID 04e8:329f Samsung Electronics Co., Ltd CLP-325 Color Laser Printer

Czyli wszystko na dobrej drodze.

Sprawdzamy, czy drukarka jest prawidłowo rozpoznana:

ls /dev/usb/lp*

Po czym możemy przejść dalej.

Konfiguracja serwera druku

Z poziomu przeglądarki przechodzimy do Services (Usługi) > p910nd - Print server.

OpenWrt - Services - p910nd

Konfiguracja jest w zasadzie bardzo prosta.

OpenWrt - p910nd Print Server

Po pierwsze zaznaczamy opcję enabled aby nasz serwer był włączony.

W następnym kroku musimy sprecyzować nasze urządzenie (Device). Domyślnie /dev/usb/lp0. Jeżeli mamy tylko jedną drukarkę, to w zasadzie nie musimy nic tutaj zmieniać.

W pozycji Interface (Interfejs) wybieramy LAN, czyli nasza serwer druku będzie nasłuchiwać żądań wydruku z sieci lokalnej.

Następnie Port, który domyślnie ustawiony jest na 9100.

Zaznaczenie ‌Bidirectional mode pozostawiamy bez zmian (w przypadku co niektórych drukarek atramentowych tę opcję będziemy musieli wyłączyć).

Następnie klikamy Save & Apply (Zapisz i Zastosuj).

WAŻNE Po całych tych zabawach warto uruchomić nasz router ponownie lub z poziomu terminala uruchomić ponownie serwer p910nd aby uniknąć problemów.

/etc/init.d/p910nd restart

Osobiście tego nie zrobiłem przy pierwszym podejściu i zastanawiałem sięm, dlaczego nie działa 😂.

Instalacja drukarki na komputerze z macOS

Na poniższym przykładzie użyłem macOS Big Sur 11.0.1

Przechodzimy do ustawień systemowych (Settings) i sekcji Drukarki i Skanery (Printers & Scanners).

macOS Big Sur - System Preferences - Printers & Scanners

Za pomocą przycisku + (plus) dodajemy naszą drukarkę.

macOS Big Sur - Printers & Scanners

W oknie Dodaj Drukarkę (Add Printer) wybieramy środkową ikonę i wprowadzamy adres IP naszego routera w polu adresu.

macOS Big Sur - Add Printer

W polu protokół (Protocol) wybieramy HP JetDirect - Socket.

Następnie przechodzimy do pola Use, w którym musimy wybrać, jaką metodą nasz komputer przetwarzał drukowane dokumenty.

Wybieramy Select software… i z listy wybieramy naszą drukarkę. Jeżeli wcześniej podłączaliśmy drukarkę do naszego komputera za pomocą kabla USB i można było na niej drukować, bardzo prawdopodobne, że oprogramowanie będzie dostępne.

Oczywiście, w polu nazwy (Name), które przeskoczyłem, wpisujemy nazwę naszej drukarki, jaką chcemy widzieć w systemie.

Następnie należy nacisnąć przycisk Add (Dodaj) i spróbować coś wydrukować.

Podczas dodawania drukarki możemy otrzymać komunikat, że system nie jest w stanie zweryfikować drukarki w naszej sieci. Nie musimy się za bardzo tym przejmować, więc klikamy przycisk Kontynuuj (Continue).

 <script async delay="https://dariusz.wieckiewicz.org/g/serve.js?client=ca-pub-5380116874441486"
      crossorigin="anonymous"></script>
 <ins class="adsbygoogle"
      style="display:block; text-align:center;"
      data-ad-layout="in-article"
      data-ad-format="fluid"
      data-ad-client="ca-pub-5380116874441486"
      data-ad-slot="9220966978"></ins>
 <script>
      (adsbygoogle = window.adsbygoogle || []).push({});
 </script>

Instalacja drukarki na komputerze z Windows 10

Na poniższym przykładzie używałem Windows 10 (20H2)

Aby zainstalować drukarkę w systemie Windows 10, z poziomu menu Start przechodzimy do Ustawień a następnie do sekcji Urządzenia.

Windows 10 - Ustawienia - Urządzenia

Z lewej strony okna wybieramy Drukarki i skanery po czym klikamy na przycisk Dodaj drukarkę lub skaner.

Windows 10 - Drukarki i Skanery

Oczywiście, na tym etapie nasza drukarka nie zostanie wyszukana automatycznie, w związku z tym musimy kliknąć opcję Drukarki, której szukam, nie ma na liście.

Windows 10 - Drukarki, której szukam, nie ma na liście

W następnym oknie wybieramy Dodaj drukarkę, używając adresu TCP/IP lub nazwy hosta i klikamy Dalej.

Windows 10 - Dodawanie drukarki

W polu adresu wpisujemy IP naszego routera.

Odznaczamy pole Sprawdź drukarkę i automatycznie wybierz sterowniki do użycia, gdyż nasz router nie informuje jaka drukarka jest aktualnie podłączona. Wybieramy przycisk Dalej.

Windows 10 - Dodawanie drukarki - Wpisz nazwę hosta lub adres IP

Po chwili system rozpocznie wykrywanie portu TCP/IP.

Windows 10 - Wykrywanie portu TCP/IP

Gdy to zostanie zakończone, na następnym etapie pozostawiamy domyślnie wybrane ustawienia (Generic Network Card) i klikamy Dalej.

Windows 10 - Wymagane dodatkowe informacje na temat portu

Teraz przyjdzie nam wybrać sterowniki naszego urządzenia.

Podobnie jak w poprzednim kroku, jeżeli wcześniej podłączaliśmy naszą drukarkę za pomocą kabla USB do komputera i mogliśmy drukować bez problemu, wszystko powinno być w systemie.

Po wybraniu tego, czego szukamy, klikamy Dalej.

W następnym kroku możemy sprecyzować nazwę naszej drukarki lub zostawić domyślnie wybraną przez system. Klikamy Dalej.

Windows 10 - Wpisz nazwę drukarki

Na pytanie, czy chcemy udostępnić drukarkę w sieci, wybieramy Nie udostępniaj tej drukarki, gdyż jest ona już w sieci.

Windows 10 - Udostępnienie drukarki

W ostatnim kroku będziemy mieli możliwość wydrukowania strony testowej. Jeżeli wszystko wykonaliśmy poprawnie, drukarka powinna zacząć drukować.

Windows 10 - Pomyślnie dodano drukarkę

Ale co z AirPrint?

I tak jak nie chciałem iść drogą CUPS, który dodałby mi AirPrint w prosty sposób, musiałem pomyśleć co dalej.

Czytając głębiej, dowiedziałem się co nieco, że AirPrint korzysta z protokołu IPP. Serwer p910nd działa na zasadzie AppSocket ze wsparciem protokołu LPD/LPR.

Dodatkowo AirPrint wymaga obsługi mDNS (Bonjour/Avahi) w celu wykrycia drukarki przez urządzenia Apple.

Pakiet avahi dostępny jest z poziomu pakietów w OpenWrt.

Ale po kolei.

Najpierw upewniłem się, że drukarka wykrywana jest w sieci automatycznie.

Automatyczne wykrywanie drukarki w sieci

W tym celu wykorzystujemy wpisy w usłudze avahi.

Jeżeli nie mamy avahi w systemie, zainstalujemy je w następujący sposób:

opkg update
opkg install avahi-daemon

Na obecną chwilę, tj. 20/10/2023, pakiet avahi-daemon nie był dostępny w repozytoriach OpenWrt w wersji 23.05 przez co nie można go zainstalować.

Zgodnie z oryginalnym wpisem tworzymy nowy plik z poziomu terminala nano /etc/avahi/services/printer.service i wklejamy poniższą zawartość.

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">

<service-group>
  <name replace-wildcards="yes">Samsung CLP-325 on %h</name>
  <service>
    <type>_pdl-datastream._tcp</type>
    <port>9100</port>
    <txt-record>qtotal=1</txt-record>
    <txt-record>note=room 2</txt-record>
    <txt-record>ty=Samsung CLP-325</txt-record>
    <txt-record>product=(Samsung CLP-320 series)</txt-record>
    <txt-record>usb_MFG=Samsung</txt-record>
    <txt-record>usb_MDL=CLP-320 series</txt-record>
    <txt-record>Color=F</txt-record>
    <txt-record>Duplex=F</txt-record>
    <txt-record>Bind=F</txt-record>
    <txt-record>Collate=F</txt-record>
    <txt-record>Sort=F</txt-record>
    <txt-record>Staple=F</txt-record>
    <txt-record>Punch=F</txt-record>
    <txt-record>PaperMax=legal-A4</txt-record>
  </service>
</service-group>

Oczywiście, nazwę drukarki dostosowujemy do naszych potrzeb.

Uruchamiamy ponownie usługę:

/etc/init.d/avahi-daemon restart

W przypadku macOS wartość w sekcji product= odpowiada za nazwę sterownika w systemie, dzięki czemu nasza drukarka nie tylko będzie wykrywana automatycznie, ale również system wybierze poprawne sterowniki.

macOS Big Sur - Add printer - Bonjour

Jak jednak zauważysz, drukarka jest prawidłowo wykrywana w systemie macOS, ale nie w Windows 10.

Windows 10 - Wyszukiwanie drukarki

Taka to natura avahi oraz brak wsparcia ze strony Windows 10.

W przypadku systemu Windows 10, dodawanie drukarki musimy wykonać w sposób bardziej manualny, tak jak opisałem powyżej.

Drukowanie z telefonu (w tym iPhone)

Niestety, przy zastosowaniu p910nd jako serwera druku, nici z dodania obsługi AirPrint.

Po mału zacząłem się z tym oswajać (szukając innego rozwiązania), ale postanowiłem poeksperymentować.

Otóż skoro moja drukarka działa w sieci, jest wykrywana przez system macOS automatycznie, to może jest nadzieja.

HP (obecny właściciel sekcji drukarek Samsunga), tak jak i inni producenci wypuszczają własne oprogramowanie dla urządzeń przenośnych (czy to z Androidem, czy iOS/iPadOS) umożliwiających drukowane, nawet w przypadku, gdy nie ma możliwość wykorzystania natywnie wbudowanej opcji w system tj. AirPrint.

Sięgnąłem więc po aplikację Mobile Print (Android, iOS/iPadOS).

Mimo, że nie jestem fanem tego typu rozwiązań, tak jak większość użytkowników, o czym świadczą bardzo niskie oceny, nic więcej mi nie zostało.

Po uruchomieniu aplikacji kliknąłem napis Select Device aby dodać urządzenie i po chwili zobaczyłem, że moje urządzenie jest wykrywane poprawnie! Do więcej, po dodaniu go do programu nagle wyświetliła się jako dostępna z zielonym ptaszkiem.

Szybko wydrukowałem jedno zdjęcie z mojej galerii. Coś, czego bym się nie spodziewał, wydruk się pojawił i to tak jak powinien.

A więc działa!

Mimo że połowiczny sukces (nadal nie mam wygodnego AirPrint), to mogę drukować.

No ale co z AirPrint?

Niestety, z wykorzystaniem OpenWrt, na obecnym etapie rozwojowym nie jest to możliwe. Koniec i kropka.

Oczywiście jest nadzieja dzięki projektowi OpenPrinting/ipp-usb, ale to może w przyszłości.

Użycie p910nd zamiast CUPS ma swoje wady i zalety.

Zaletą, jak wspomniałem wcześniej, jest mała zasobożerność, dzięki czemu można go zainstalować i używać bez problemów nawet na mało wydajnym routerze. Serwer druku jest szybki, przygotowanie druku (spooling) następuje po stronie klienta i wysyłane jest bezpośrednio do drukarki.

Wadą jest natomiast chociażby brak obsługi AirPrint, przez co drukowanie z telefonów tj. iPhone, odbywać się może tylko dzięki dodatkowej aplikacji, tak jak wspomniałem wcześniej.

Co więc pozostaje?

Cel niniejszego wpisu, czyli dodanie drukarki USB do routera z OpenWrt, umożliwiający drukowanie w sieci został osiągnięty.

Dla mnie jednak to nie wystarczy, więc całość powyżej traktuje raczej jako eksperyment i skusze się jeszcze raz na wykorzystanie Raspberry Pi.

Tym razem, na The Pi Hut kupiłem Raspberry Pi Zero W, które kosztowało tylko £9.30 (~46.60zł)! Do tego dokupiłem kabel mini-HDMI (bo akurat tego nie miałem) - £2.40 (~12zł) oraz obudowę za £3.00 (15zł). Wykorzystując jakąś nieużywaną ładowarkę do telefonu (1.5A), rozwiązałem problem ładowania. Wykorzystałem również walającą się w szufladzie kartę microSD oraz przejściówkę microUSB na pełnowymiarowy port USB. I tak z wykorzystaniem czystego Raspbian oraz doinstalowanego pakietu CUPS mogę w prosty sposób otrzymać własny, bezprzewodowy oraz mało prądożerny serwer druku… z obsługą AirPrint.

Ah.. mogłem tak zrobić od razu, ale wolałem sprawdzić, czy nie da się wykorzystać tego, co już mam. A nóż komuś powyższe rozwiązanie się przyda.

Pozdrawiam.

Komentarze
Kategorie