Hlavní navigace

CUPS

Tomáš Davídek

Nainstalovali jste si Linux a přemýšlíte, jakým způsobem zařídit tisk? Nebo používáte nějaký starší printer daemon, který vám již nedostačuje? V takovém případě asi oceníte možnosti CUPS (Common Unix Printing System), který představuje velmi dobrý nástroj pro správu tiskáren.

Podívejme se tedy blíže na instalaci (včetně nastavení jádra, máme-li nějakou lokální tiskárnu), konfiguraci klienta a konfiguraci serveru CUPS. Pár slov je věnováno i dokumentaci.

Instalace CUPS

Nejdříve musíme CUPS nainstalovat. Zdrojový kód seženeme na www.cups.org, ovšem pro většinu běžných distribucí Linuxu (Debian, Fedora, Mandrake, Red Hat, SUSE…) jsou k dispozici na jejich mirrorech již zkompilované balíčky. Obvykle potřebujeme balíčky cupsys, cupsys-client, případně cupsys-bsd, cups-pdf. U starších verzí se mohou hodit některé ovladače z balíčků cupsys-driver-gimpprint, cupsomatic-ppd.

Pokud máme nějakou tiskárnu přímo připojenou k lokálnímu počítači, nesmíme zapomenout na správné nastavení jádra (kernelu). U instalačních jader jsou obvykle všechny potřebné komponenty zahrnuty ve formě modulů. Kompilujeme-li vlastní jádro, je třeba nastavit podporu pro příslušný port, kam je lokální tiskárna připojena:

  • Paralelní: od verzí jader 2.2.XX výše je třeba nastavit

    CONFIG_PARPORT=y
    CONFIG_PARPORT_PC=yc
    

    a tiskárna se pak nachází na zařízení /dev/lp0.

  • USB: v nastavení jádra aktivujeme položky

    CONFIG_USB=y
    CONFIG_USB_DEVICEFS=y
    CONFIG_USB_PRINTER=y
    

    a tiskárna se pak nachází na /dev/usb/lp0. Pokud takové zařízení neexistuje, vytvoříme jej pomocí příkazu mknod /dev/usb/lp0 c 180 0 a zajistíme stejného vlastníka a přístupová práva jako u zařízení /dev/lp0.

Konfigurace klienta CUPS

Konfiguraci lokálních i síťových tiskáren lze provést jak v řádkovém režimu (pomocí příkazu lpadmin), tak pomocí Web-rozhraní (http://local­host:631). Jednodušší je samozřejmě druhá možnost, administrace tiskáren a tiskových úloh je zde jednoduchá a intuitivní. Pro drtivou většinu akcí je potřeba znát administrátorské (root) heslo, nesmíme se tedy nechat zaskočit dialogovým oknem.


Nastavíme všechny potřebné tiskárny v sekci Printers(http://lo­calhost:631/prin­ters) pomocí funkce Add Printers. Postupně zadáváme:

  1. jméno a umístění (nepovinné) tiskárny
  2. zařízení: k dispozici jsou Internet Printing Protocol (HTTP a IPP) pro tisk na serveru s CUPS, LPD pro tisk na serverech s lp-daemonem (jiný tiskový daemon pro Linux a Unix), paralelní port a USB porty pro lokální tiskárny, v neposlední řadě i SMB pro tisk na serverech s Windows.
  3. výrobce tiskárny
  4. model tiskárny

Tím je konfigurace tiskárny dokončena a kliknutím na Print Test Page můžeme pustit zkušební tisk. Konfiguraci tiskárny lze kdykoli změnit pomocí tlačítek Configure Printer či Modify Printer (např. lze změnit ovladač v případě, že zkušební tisk nedopadl dobře). Výsledek pak může vypadat např. takto:


V uvedeném příkladě vidíme některé běžné způsoby tisku. Popišme je nyní trochu podrobněji:

  • tiskárna color4500: jedná se o tiskárnu připojenou ke vzdáleném počítači, kde běží (bohužel :-) Windows. Proto je tisk zajištěn pomocí Samby (musíme mít nainstalován Samba-client, balíček se jmenuje smbclient), položka

    Device URI: smb://ipnp01.troja.mff.cuni.cz/HPColor-4500 

    znamená, že smbclient pošle tisk na počítač ipnp01.troja.mff­.cuni.cz do fronty HPColor-4500. Na tomto počítači musí být samozřejmě povoleno sdílení této tiskárny.

  • tiskárna hplj5: tiskárna připojená ke vzdálenému počítači s Linuxem, kde běží tiskový server CUPS. Položka

    Device URI ipp://ipnp21.troja.mff.cuni.cz:631/printers/hplj5 

    znamená, že se tiskne přes protokol IPP či HTTP (port 631) na stroji ipnp21.troja.mff­.cuni.cz, tisk se posílá do fronty printers/hplj5 (tiskárny v systému CUPS mají přiřazeny fronty: printers/jmeno_tis­karny)

  • tiskárna ncprint: připojena ke vzdálenému počítači s Linuxem, kde běží jiný tiskový server (lpd). Položka

    Device URI lpd://ipnp00.troja.mff.cuni.cz:515/ncprint 

    znamená, že se tisk posílá na server ipnp00.troja.mff­.cuni.cz daemonu lpd (port 515) do fronty ncprint.

  • tiskárna usbprinter: lokální tiskárna připojená přes USB port, nachází se proto na zařízení /dev/usb/lp0 (viz předchozí kapitolku).

Toto nastavení je uloženo v textovém konfiguračním souboru /etc/cups/prin­ters.conf, který lze v případě potřeby ručně editovat. Ovladače jsou pak přiřazeny jednotlivým tiskárnám v adresáři /etc/cups/ppd.

Pokud je některý tiskový server chráněn jménem a heslem, zadávají se tyto údaje také do položky Device, ovšem ve výpisu na Webu (viz výše) je tato informace skryta (našli bychom ji však v již zmíněném konfiguračním souboru /etc/cups/prin­ters.conf). V případě první tiskárny by takové nastavení vypadalo takto:

Device URI smb://uzivatel:heslo@ipnp01.troja.mff.cuni.cz/ HPColor-4500 

(Pozn. red.: mezera před HPColor přidána kvůli sazbě –Johanka)

Nastavíme-li tiskárnu, a tisk přesto nefunguje, hledáme chybu v log-souboru (/var/log/cup­s/error_log). Standardně se vypisují jen informace o začátku a skončení tisku, při problémech lze nastavit tzv. debug-level v konfiguračním souboru /etc/cups/cup­sd.conf :

LogLevel debug

Po změně konfigurace musíme nejdříve CUPS restartovat, aby změny vešly v platnost.

Poznámka: pokud nechceme instalovat na našem počítači tiskový server CUPS a nemáme ani žádnou lokální tiskárnu, lze vystačit pouze s balíčkem cupsys-client (viz předchozí kapitolku). Pak ale nemůžeme nastavit žádné ovladače ani využít zmíněné Web-rozhraní a tisknout lze pouze příkazem typu

lp -d ncprint -h ipnp00 jmeno_souboru

který pošle tisk na tiskárnu (do fronty) ncprint na serveru ipnp00.

Konfigurace serveru CUPS

CUPS funguje nejen jako klient (tj. umožňuje tisknout na zvolené tiskárně), ale i jako tiskový server. Takovým příkladem je stroj ipnp21 (viz výše). Nastavení serveru se zapisuje do souboru /etc/cups/cup­sd.conf. Podívejme se nyní na několik základních možností, které server CUPS nabízí:

  • Omezení přístupu k administrátorským úkonům přes Web-rozhraní. Typicky povolíme přístup jen z lokálního počítače, proto nastavíme v sekci admin:

    <Location /admin>
    AuthType Basic
    AuthClass System
    Order Deny,Allow
    Deny From All
    Allow From 127.0.0.1
    <Location />
  • Různá omezení přístupu k jednotlivým tiskárnám: CUPS umožňuje nastavit různý přístup k jednotlivým tiskárnám. Jako příklad uveďme tiskárnu hplj5, na které mohou tisknout uživatelé ze všech strojů v doméně domain.com:

    <Location /printers/hplj5>
    AuthType None
    Order Deny,Allow
    Deny From All
    Allow From .domain.com
    <Location />

    Položka AuthType None znamená, že přístup je možný bez autorizace, tj. bez zadání uživatelského jména a hesla. Má-li náš server na starosti více tiskáren, lze je uspořádat do několika tříd (Classes) a přístupová práva pak nastavit pro jednotlivé třídy.

K dispozici máme celou řadu dalších nastavení (různé stupně zabezpečení, volba portů, volba protokolů, …), jejich popis najdeme v dokumentaci. Nezapomeňme, že po každé změně nastavení musíme restartovat CUPS, aby nová nastavení vešla v platnost.

Jak jsme již zmínili, server CUPS je založen na protokolu IPP. Součástí CUPS (balíček cupsys-bsd) je ale také jednoduchý LPD (Line Printing Daemon), který se nespouští při startu počítače jako klasický daemon, nýbrž se aktivuje pomocí inetd. V souboru /etc/inetd.conf najdeme řádku:

printer stream tcp nowait lp /usr/lib/cups/daemon/cups-lpd cups-lpd 

Na takovém serveru lze tedy tisknout buď přes protokol IPP (port 631), nebo LPD (port 515). Upozorněme však, že zmíněný LPD nebere ohledy na nastavení CUPS, takže pro něj nelze nastavit žádná omezení pro přístup k tiskárnám. Bohužel tento daemon nepoužívá ani TCP-wrappers, takže přístup nelze omezit ani v souborech /etc/hosts.allow a/etc/hosts.deny. Jedinou možností, jak omezit přístup, by v tomto případě bylo použití IP-tables. Pokud tedy chceme jednoduše omezovat přístup k jednotlivým tiskárnám, je lépe tento daemon nepoužívat (tj. zakomentovat uvedenou řádku ve zmíněném souboru).

Dokumentace

Podrobnější informace najdete v dokumentaci CUPS, případně i na domovské stránce. Tam najdete i odkazy na mailing-listy, kde se o své zkušenosti podílí vývojáři a uživatelé. Informace o dalším zmíněném software (jiných LPD, TCP-wrappers, IP-tables…), jakož o i jiných komponentách Linuxu, najdete mj. i na stránkách o instalaci Debian Linuxu.

Našli jste v článku chybu?