Tiskárny Canon LBP pod Systemd
Začal bych slovy, že podpora Linuxu od výrobců některého hw je stále na mizerné úrovni, ale to všichni a víme, i čím to je víme, tak není moc co řešit. Tiskárny Canon nějakou podporu Linuxu mají, sice nevalné kvality, ale lepší něco než nic a tak se vrhneme rovnou do práce. V dnešním článku nainstaluji tiskárnu Canon LPB6300dn do Sabayonu upravenou jako nativní službu pod Systemd. Asi většina z nás ví, že Systemd alternativní init systém, pod kterým nám už dvě vydání startuje Sabayon.
20.7.2017 Nedávno byly vydány konečně po dlouhé době nové ovladače, takže jsem článek upravil pro ně.
Proč jsem nevyužil startovacího skriptu z balíku, se dozvíte dále. Na instalaci byl použit 64-bitový Sabayon 13.08 a cílem mělo být možnost tisknout po nastartování systému, tak aby byla kromě CUPS i automaticky startovaná služba ccpd pro tisk.
V návodu dále jsou jako prefixy příkazů používány v kódech znaky $ a # podle toho, zda stačí provést příkaz jako uživatel, nebo jsou potřeba práva roota.
Požadavky na systém *
- Linux s x86 kompatibilním CPU (32-bit nebo 64-bit)
- CUPS 1.1.17 (doporučená 1.1.19 nebo pozdější)
Instalace ovladačů *
Stáhněte CAPT ovladače z webu výrobce, momentálně ve verzi 2.71.
Ovladače podporují tyto typy tiskáren:
i-SENSYS LBP2900 i-SENSYS LBP2900B i-SENSYS LBP3000 i-SENSYS LBP3010 i-SENSYS LBP3100 i-SENSYS LBP3250 i-SENSYS LBP3300 i-SENSYS LBP3310 i-SENSYS LBP5000 i-SENSYS LBP5050 i-SENSYS LBP5050n i-SENSYS LBP5100 i-SENSYS LBP5300 i-SENSYS LBP6000 i-SENSYS LBP6000B i-SENSYS LBP6020 i-SENSYS LBP6020B i-SENSYS LBP6200d i-SENSYS LBP6300dn i-SENSYS LBP6310dn i-SENSYS LBP7010C i-SENSYS LBP7018C i-SENSYS LBP7200Cdn i-SENSYS LBP7210Cdn Laser Shot LBP1120 Laser Shot LBP1210 Laser Shot LBP3200
Stažený balík obsahuje všechny potřebné ovladače, a to jak v binární podobě (deb, rpm), tak i ve zdrojové. Rozbalte rpm větev z požadované architektury na nějaké dočasné místo na disku. Nástrojů na rozbalení archívu, i grafických, je k dispozici dostatečné množství, proto rozbalování popisovat nebudu. Otevřete si svůj oblíbený terminálový emulátor, neboli zkráceně terminál a přesuňte se v něm do adresáře s dvěma vybalenými soubory:
$ cd Linux_CAPT_PrinterDriver_V260_uk_EN/64-bit_Driver/RPM/ $ ls cndrvcups-capt-2.71-1.x86_64.rpm cndrvcups-common-3.21-1.x86_64.rpm
Oba balíky nainstalujte pomocí rpm. Je možné, že rpm v systému nemáte, v tom případě nejdříve doplňte správce balíků rpm do systému (dle potřeby použijte pro instalaci Rigo):
# equo i app-arch/rpm
Pak už můžete spustit instalaci samotných balíků:
# rpm -ivh cndrvcups-common-3.21-1.x86_64.rpm --nodeps # rpm -ivh cndrvcups-capt-2.71-1.x86_64.rpm --nodeps
První (a poslední) prasárna aneb proč zrovna RPM *
Protože se v RPM balíku počítá s jiným umístěním binárky ccp a filtrů CUPS, po instalaci je přesuňte na správné místo.
Zde bych se rád zastavil pro jeden komentář. V této chvíli jsem si totiž řekl: “Hmm, nemám rád nestandardní řešení a tak se pustím do instalace ze zdrojáků”. Poté jsem ale absolvoval relativně dlouhé martyrium s pokusy o kompilaci, kvůli nepopsaným závislostem, které byly příčinou pádů kompilací, kdy pak následovala detekce chyb a hledání řešení. Vše se postupně dařilo, ale poslední kapkou abych se vrátil zpět k rpm a opustil nápad s kompilací ze zdrojových kódů, byla závislost grafického nastavovátka captstatusui na knihovnách z gtk+ verze 1 (přes ovladači deklarovanou závislost pouze na v. 2). Nutnost kompilace této prehistorie z emerge mě poněkud odpudila. V té chvíli jsem se vrátil k rpm a už neremcal na nesystémovost, neboli prasárnu s přesunem pouhých 4 souborů.
Takže zpět k přesunu. Proveďte následující:
# cp -r /usr/lib64/cups/* /usr/libexec/cups/ # rm -rf /usr/lib64/cups/
Nakonec restartujte službu CUPS:
# systemctl restart cups
Pokud chcete ověřit správné umístění souborů, spusťte webovou konzoli CUPS (http://localhost:631/admin), kde musíte po stisku Add printer (a přihlášení jako root) vidět CAPT Printer u Local Printers, jako je to na obrázku. Pokud v lokálních tiskárnách CATP nemáte, zřejmě se je nějaký problém s přesunovanými soubory a vraťte se o krok zpět.
Instalace tiskárny *
Instalace tiskárny do CUPS *
K instalaci použijeme opět terminál a to pro obě varianty, jak síťové, tak USB varianty. LBP6300 je název fronty, který si zvolíte (téměř) libovolně sami (používejte tisknutelné znaky kromě /, # a mezery) z názvu tiskárny a soubor ppd který detekujete v adresáři /usr/share/cups/model/ podle typu tiskárny, nebo, pokud si nejste jistí, najdete tabulku souborů a tiskáren v souboru README-capt-2.6xUK.txt v balíku ovladačů. Také můžete použít následující příkaz na výpis ovladačů:
# lpinfo -m | grep Canon
CNCUPSLBP1120CAPTJ.ppd Canon LBP1120 CAPT ver.1.5
CNCUPSLBP1120CAPTK.ppd Canon LBP1120 CAPT ver.1.5
CNCUPSLBP1210CAPTJ.ppd Canon LBP1210 CAPT ver.1.5
CNCUPSLBP1210CAPTK.ppd Canon LBP1210 CAPT ver.1.5
CNCUPSLBP2900CAPTK.ppd Canon LBP2900 CAPT ver.1.5
CNCUPSLBP3000CAPTJ.ppd Canon LBP3000 CAPT ver.1.5
CNCUPSLBP3000CAPTK.ppd Canon LBP3000 CAPT ver.1.5
CNCUPSLBP3050CAPTK.ppd Canon LBP3010/LBP3018/LBP3050 CAPT (UK)
CNCUPSLBP3100CAPTJ.ppd Canon LBP3100 CAPT (JP)
CNCUPSLBP3150CAPTK.ppd Canon LBP3100/LBP3108/LBP3150 CAPT (UK)
...... výpis pokračuje
Nyní když již máte všechny potřebné informace přidejte do CUPS tiskárnu:
# lpadmin -p LBP6300 -P /usr/share/cups/model/CNCUPSLBP6300CAPTK.ppd \ -v ccp://localhost:59687 -E
Toto samé můžete provést i z webové konzole CUPS po vybrání CAPT (viz předchozí obrázek) a pokračováním v průvodci po zadání potřebných údajů z předchozího příkazu. Nicméně k výsledku dojdete pomalejší cestou.
Síťová varianta tiskárny *
Dále nastavíte pro námi definovanou frontu LBP6300 (upravte podle předchozího příkazu) vstup tiskárny, v tomto případě síť. IP 192.168.1.6 nahraďte vlastní IP tiskárny:
# ccpdadmin -p LBP6300 -o "net:192.168.1.6"
CUPS_ConfigPath = /etc/cups/ LOG Path = None UI Port = 59787 Entry Num : Spooler : Backend : FIFO path : Device Path : Status ---------------------------------------------------------------------------- [0] : LBP6300 : ccp : //localhost:59687 : net:192.168.1.6 : New!!
Síť je možné případně také nastavit graficky, což je alternativa k předchozímu příkazu, přiznám se ale že jsem tuto možnost ještě nikdy nepoužil:
# captstatusui -P LBP6300
USB varianta tiskárny *
Zda systém vidí správně USB tiskárnu se přesvěčte příkazem:
# lsusb | grep Canon
Bus 005 Device 003: ID 04a9:26ff Canon, Inc.
Natáhněte modul usblp
# modprobe usblp
Po chvíli zkontrolujte vytvořené LP zařízení:
$ ls /dev/usb/lp*
/dev/usb/lp0
Vstup ccpd pak podobně jako v případě síťové varianty nakonfigurujte tímto příkazem (použijte správné číslo podle předchozího výstupu):
# ccpdadmin -p LBP6300-USB -o /dev/usb/lp0
CUPS_ConfigPath = /etc/cups/
LOG Path = None
UI Port = 59787
Entry Num : Spooler : Backend : FIFO path : Device Path : Status
----------------------------------------------------------------------------
[0] : LBP6300 : ccp : //localhost:59687 : /dev/usb/lp0 : New!!
Autostart modulu *
Jelikož CUPS již nepotřebuje modul usblp pro připojení USB tiskáren (na což by ale musel reflektovat tento výrobce tiskárny) je modul na blacklistu. Proto ho musíme z blacklistu odebrat aby se natáhnul po restartu automaticky. Zakomentujte v souboru /etc/modprobe.d/blacklist.conf řádek s modulem tak aby vypadal po úpravě takto:
#blacklist usblp
Poznámka o direct USB *
V CUPS (nebo v lsinfo -m) si můžete všimnout v možnosti připojení přímo na USB (možnost přímého připojení na usb://Canon/LBP6300?serial=001E8F29A9AC), ale vězte že toto fungovat nebude, dokud výrobce neaktualizuje ovladače pro tuto možnost.
Vytvoření služby ccpd jako nativní služby Systemd *
Nyní se dostáváme k odpovědi z počátku článku, proč jako službu Systemd. Systemd by měl být s většinou předchozích skriptů kompatibilní a měl by instalovaný spouštěcí skript /etc/init.d/ccpd detekovat a správně ovládat. To ale neudělal. On to neudělal ani sysvinit, když jsem tiskárnu kdysi instaloval do Gentoo a musel jsem si skript také přepsat. Ale Systemd nyní nedetekoval originál (ani upravený) po instalaci, ale ani můj zcela přepsaný spouštěcí skript, s kterým jsem dlouho na Gentoo normálně fungoval. Ani za boha jsem Systemd nepřinutil byť jen zaregistrovat, že soubor existuje. Přitom jiné spouštěcí skripty akceptuje a ovládá v pořádku. Takže výsledkem bylo, že jsem musel napsat servis vlastní, nativní pro Systemd. Naštěstí je v tomto Systemd velice přívětivý. Nyní vytvoříme jako root soubor servisu /etc/systemd/system/ccpd.service s obsahem:
[Unit] Description=Canon printer daemon After=network.target Requires=network.target [Service] Type=forking ExecStart=/usr/sbin/ccpd [Install] WantedBy=multi-user.target
Původní spouštěcí skript /etc/init.d/ccpd nyní smažte.
# rm /etc/init.d/ccpd
Nyní již servis existuje a měl by se hlásit jako neaktivní
# systemctl status ccpd
ccpd.service - Canon printer daemon
Loaded: loaded (/etc/systemd/system/ccpd.service; disabled)
Active: inactive (dead)
Inactive znamená, že neběží a disabled znamená, že není možné ho nyní spustit automaticky. Teď servis nastavíme na automatické spuštění po startu.
# systemctl enable ccpd
ln -s '/etc/systemd/system/ccpd.service' '/etc/systemd/system/multi-user.target.
wants/ccpd.service'
Vidíte, že povolením spuštění po startu se službě vytvoří příslušný link do multi-user targetu, podle sekce [install] v nastavení služby ccpd. Nyní můžete zkusit restartovat PC a nebo spustit službu ručně. Ruční spuštění provedeme takto
# systemctl start ccpd
Podíváme se zda se servis nastartoval
# systemctl status ccpd ccpd.service - Canon printer daemon Loaded: loaded (/etc/systemd/system/ccpd.service; enabled) Active: active (running) since Pá 2013-10-18 17:27:24 CEST; 35s ago Process: 5773 ExecStart=/usr/sbin/ccpd (code=exited, status=0/SUCCESS) Main PID: 5774 (ccpd) CGroup: name=systemd:/system/ccpd.service ├─5774 /usr/sbin/ccpd ├─5779 /usr/sbin/ccpd └─5780 captmoncnabb --data-write-fd=3 --data-read-fd=12 --cmd-write-fd=13 --cmd-read-fd=16 --output-fd=-1 --input-fd=-1 --printer-uri=net:192.168.1.6 říj 18 17:27:24 cname systemd[1]: Starting Canon printer daemon... říj 18 17:27:24 cname systemd[1]: Started Canon printer daemon.
Zde jsou vidět všechny důležité informace. Služba běží (active running), je nastavená na autostart (enabled) a běží dva procesy /usr/sbin/ccpd. To je velmi důležité. Pokud běží jen jeden tiskárna netiskne. Občas se to v Gentoo stávalo a stačilo servis pro opravu restartovat. Je velmi pohodlné, že jsou ve výpisu vidět i procesy. V systevinit bylo potřeba kontrolovat servis, pak procesy a případně ještě log při detekcích závad. Nyní je v Systemd vše zobrazené pěkně na jednom místě.
Detekce chyb *
Samozřejmě se instalace nemusí vyhnout problémům, zvláště při vlastních experimentech konfigurace služby, nebo když služba nestartuje jak má. Pro případné odladění používejte kromě již uvedeného systemctl tatus tyto nástroje:
Po změně obsah souboru servisu natáhněte znovu démony:
# systemctl --system daemon-reload
Pak teprve restartujte servis.
# systemctl restart ccpd
Při změně obsahu sekce [install] proveďte ještě znovu disable a pak enable služby, aby se aktualizoval link do příslušného targetu:
# systemctl disable ccpd # systemctl enable ccpd
Pokud služba nenabíhá po restartu, podívejte se do případně žurnálu.
# journalctl -b /usr/bin/systemd
Luděk
Říjen 22nd, 2013 on 14:24
Zdarvim,
Pokousel jsem se aplikovat Vas navod o pro Gentoo na LBP 3000, bohuzel se mi to nedari. Prijde mi ze vse probleho jak ma …
// Log cups
E [22/Oct/2013:14:17:40 +0200] [Job 1] ccp send_data error, exit
Netusil by jste kde je zakopanej pes ?
Diky
Říjen 22nd, 2013 on 14:54
Ahoj, prosím nevykat, děkuji 😉
Zkusil bych pod rootem
systemctl status cups # musí běžet
systemctl status ccpd # že běží 2x ccpd
ccpdadmin # zkontrolovat (spooler, FIFO path … prostě vsechno podle příkladu v článku)
lpoptions # (nebo přímo v cups) že je správně device-uri=ccp://localhost:59687
podle mě je to jen problém komunikace mezi cups a ccpd po portu 59687
Doporučuji spíše používat fórum, tam je na to vlákno, tady jen připomínky k článku. Dík.