Jak dodać fałszywą, obojętną drukarkę zerową w CUPS?

12

Piszę oprogramowanie, które obsługuje wiele drukarek. Aby to przetestować, muszę dodać wiele drukarek do mojego serwera CUPS. Jak mogę to zrobić?

Chcę dodać kilka fałszywych drukarek, które będą wysyłać zadania bezpośrednio do / dev / null. W ten sposób mogę oglądać listę „zakończonych zadań” w interfejsie CUPS i obserwować, czy moje oprogramowanie używa prawidłowej drukarki dla każdego zadania.

Denilson Sá Maia
źródło
czyż nie jest to poprawne „lpadmin -p lp0 -E -v / dev / null -m raw”
Ashika Umanga Umagiliya
1
Zobacz także tworzenie fałszywej drukarki .
Wilfred Hughes

Odpowiedzi:

11

Jednym z rozwiązań jest instalacja cup-pdf . Dodaje wirtualną drukarkę, która zapisuje pliki PDF. W Internecie znajduje się kilka samouczków na temat instalacji i konfiguracji; odkąd korzystam z Gentoo, przeczytałem Gentoo-wiki , która również wspomina o Sabayon wiki .

Drukarka wirtualna cups-pdf ma plik konfiguracyjny /etc/cups/cups-pdf.confi domyślnie zapisywane są wszystkie pliki PDF /var/spool/cups-pdf/${USER}.

(Uwaga: w Ubuntu zapisuje do ~ / PDF /)

Istnieje jednak kilka ograniczeń:

  • Ponieważ istnieje tylko jeden plik konfiguracyjny, wiele drukarek PDF zapisze w tym samym katalogu.

  • Niemożliwe jest wydrukowanie „surowych” danych (na przykład przy użyciu lpr -o raw). Nawet wysłanie pliku PDF jako surowego zadania nie będzie działać. Nieprzetworzone zadania drukowania wygenerują pusty plik PDF z pustą stroną.

Mimo tych ograniczeń działa idealnie dla moich potrzeb.


Przypis: jeśli użytkownik używa Gnome lub drukuje przez aplikację GTK +, w oknie dialogowym drukowania jest już pseudo-drukarka „Drukuj do pliku”. Dlaczego więc użytkownik nadal chciałby dodać wirtualną drukarkę PDF? Oto kilka powodów:

  • To „Drukuj do pliku” jest specyficzne dla GTK + i nie jest dostępne dla aplikacji innych niż GTK +. (może KDE ma podobną funkcję, ale nie jestem pewien)
  • Umożliwia wygenerowanie pliku PDF z „aplikacji” Flasha zaprojektowanych do drukowania. Na przykład PocketMod .
  • Dodanie wirtualnej drukarki do CUPS umożliwia przetestowanie drukowania przy użyciu skryptów powłoki lub innego oprogramowania, które komunikuje się bezpośrednio z CUPS. Jest to szczególnie przydatne dla programistów podczas testowania ich aplikacji.
  • Możliwe jest „udostępnianie” tej drukarki wirtualnej sieci lokalnej. Niezupełnie przydatne, ale możliwe.
  • Możliwe jest dołączenie polecenia przetwarzania końcowego, które zostanie wykonane zaraz po zapisaniu pliku PDF.
Denilson Sá Maia
źródło
10

Forum Pucharów ma bardziej kompletną / dokładną odpowiedź na to pytanie.

Odpowiedź jest taka, że ​​identyfikator URI urządzenia powinien być ustawiony na file: / dev / null

W mojej konfiguracji Ubuntu:

  • Identyfikator URI urządzenia: plik: / dev / null
  • Marka i model: lokalna drukarka Raw

Które działa dla mnie idealnie.

Przeszukałem ponownie forum Pucharów i znalazłem to:

Commandline Null Printer Setup in Cups Forum

W twoich cupd.conf:

FileDevice yes

Skonfiguruj drukarkę

lpadmin -p nowhere -E -v file:/dev/null

Testowanie drukarki

who |lp -d nowhere
Andrew Russell
źródło
Właśnie patrzę teraz na mój wydruk: drobne szczegóły, żywe kolory, które zwyczajnie zeskakują ze mnie na stronę. ... hej czekaminute ....
Andrew Russell
Dziękuję Ci. Potrzebowałem fałszywej drukarki w mojej maszynie wirtualnej, aby wykonać zrzut ekranu niektórych instrukcji. :)
njallam
Dzięki. To też działało wine.
Tinti
7

Możesz utworzyć drukarkę, która będzie drukować za /dev/nullpomocą lpadmin:

$ sudo lpadmin -p myprinter -E -v file:///dev/null

Zostanie to zapisane /etc/cups/printers.conf, ale możesz także przeglądać drukarki za pomocą lpstat:

$ sudo lpstat -s
myprinter accepting requests since Thu 22 Jan 2015 11:04:46 AM GMT
system default destination: myprinter
device for myprinter: ///dev/null

Pamiętaj, że może być konieczne włączenie FileDevice w /etc/cups/cupsd.conf na starych dystrybucjach Linuksa .

Aby ustawić nową drukarkę jako domyślną, użyj lpoptions:

$ sudo lpoptions -d myprinter
Wilfred Hughes
źródło
Jak to usunąć?
Richard
@Richard Use lpadmin -x myprinterlub interfejs internetowy.
Torkel Bjørnson-Langen
2

Jednym z najlepszych rozwiązań jest użycie ippserver. Pochodzi z CUPSv2.2.2i wyżej. Możesz alternatywnie pobrać projekt tutaj: przykładowe implementacje IPP .

Zgodnie z opisem na stronie podręcznika :

ippserver to prosty serwer IPP (Internet Printing Protocol) zgodny ze specyfikacjami IPP Everywhere i IPP Shared Infrastructure Extensions (INFRA). Może być używany jako samodzielny serwer druku i / lub bardzo podstawowy serwer infrastruktury między standardowymi klientami IPP a serwerami proxy IPP zgodnymi ze specyfikacją INFRA.

Aby z niego skorzystać, wystarczy uruchomić ippserver "My cool printer", a stworzy wirtualną drukarkę z nazwą My cool printerdla Ciebie. Działa jak serwer WWW i nasłuchuje na określonych portach.

Jeśli potrzebujesz wielu drukarek, możesz uruchomić serwer na wielu portach, używając ippserver "My other cool printer" -p 8888.

Możesz nawet podać atrybuty drukarki za pomocą pliku atrybutów. Na przykład drukarka obsługuje domyślnie wydruki wysokiej jakości, możesz dodać następujący atrybut do pliku atrybutów:

ATTR enum print-quality-default high

i uruchom serwer za pomocą:

ippserver "My high quality cool printer" -a attributes-file.txt

Bibliografia:

  1. Próbka PWG IPP
  2. Strona podręcznika ipptoolfile CUPS
Sahil Arora
źródło
1

Zaczerpnięte z http://inai.de/linux/adm_virtualprinter :

Drukarka wirtualna w CUPS

Aby utworzyć drukarkę w CUPS, która wysyła dane nigdzie (jak /dev/null), istnieje wiele sposobów. Ta strona używa tej socket:// metody.

Najpierw skonfiguruj xinetd

Potrzebujemy usługi TCP Discard na porcie 9. Xinetd ma ją wbudowaną, więc możemy z niej korzystać. Upewnij się, że następująca definicja jest zwykle dostępna w plikach konfiguracyjnych xinetd /etc/xinetd.d/discard. Powinien zawierać następującą usługę:

    usługa odrzucenia
        typ = WEWNĘTRZNY
        id = discard-stream
        socket_type = stream
        protokół = tcp
        użytkownik = root
        czekaj = nie
        wyłącz = nie
        FLAGI = IPv6 IPv4 
Uruchom, rcxinetd reloadaby ponownie odczytać pliki konfiguracyjne i aktywować nową discardusługę. Lub użyj, rcxinetd startjeśli xinetd nie był już aktywny.

Drukarka CUPS

Teraz przejdź do interfejsu WWW CUPS i dodaj nową drukarkę. Jako miejsce docelowe użyj socket://localhost:9/jako drukarki wybierz coś, co wygląda interesująco, na przykład „HP 2500C Foomatic / pcl3”. To wszystko.

Golar Ramblar
źródło