CUPS yazıcısını komut satırından nasıl devam ettiririm?


42

CUPS'da yazıcım var, çünkü sürücü sorunları nedeniyle (HP 1010) zaman zaman duraklatılıyor.

CUPS'ta bir yazıcıyı devam ettirmek için saatte bir kez çalıştırılacak olan bir kabuk betiği yazmak istiyorum. Ancak birkaç dakika boyunca googling yaptıktan sonra yazıcının kabuk komut satırından nasıl devam ettirileceği hakkında hiçbir fikrim yok.


Buna ne sebep oluyor: Birincisi, wifi yazıcım kapatıldığında Enabled (Etkin) bayrağını temizliyor gibi görünüyor. Yazıcı tekrar beslendiğinde bile, Etkin bayrağı işaretli durumuna getirilmez. .. --- İşler daha sonra yazdırma kuyruğunda toplanır. Hata mesajı "filtre başarısız oldu". Yazıcı ayarlarında bu kutuyu işaretlediğimde, yazıcı tekrar yazdırmaya başlar.
Eliptik görünüm

Yanıtlar:


66

Kupa takılabilir emri var.

cupsenable printer

devre dışı bir yazıcı başlatır (yazıcı adını bulmak için yazıcılarınızı lpstat -pveya ile yazabilirsiniz lpc status).

Komutu root olarak veya sudo aracılığıyla çalıştırmanız gerekebilir. Bu nedenle, yazıcıyı bir kabuk komut dosyasında etkinleştirmeniz gerekiyorsa, kabuğu kök dizinine eklemek veya sudoers dosyanızı düzenlemek zorunda kalırsınız.


1
+1 bu cevabı "overloloated cups config" ( superuser.com/a/280400/160771 adresinde olduğu gibi ) kullanımının tersine gerçekten yardımcı oldu. Üstelik konuyla ilgili daha fazlası var, çünkü OP komut satırını bilmek istiyor
humanityANDpeace

25

Sorunuz, çalıştırmakta olduğunuz CUPS sürümüne bağlı olarak farklı şekillerde ele alınabilir.

  1. CUPS'un daha yeni sürümleri (sürüm 1.2 ve üstü), burada yardımcı olabilecek yerleşik bir işlevsellik ile birlikte gelir. Buna "ErrorPolicy" deniyor. Cupsd.conf dosyasında varsayılan ayar seçilidir ve cupsd'ın beklendiği gibi davranmayan yazdırma kuyruklarını nasıl kullanması gerektiğini belirler. Her kuyruğa ayrı ayrı etiketlemek için 3 seçeneğiniz var:

    ErrorPolicy abort-job  
    ErrorPolicy retry-job  
    ErrorPolicy retry-this-job  
    ErrorPolicy stop-printer  
    

    Açıklama:

    • abort-job
      - Bu işi iptal et ve aynı sırada bir sonraki işe devam et

    • retry-job
      - Bu işi N saniye bekledikten sonra tekrar deneyin (burada N, cupsd.conf 'un "JobRetryInterval" yönergesi tarafından belirlenir ).

    • retry-this-job
      - Geçerli işi derhal ve süresiz olarak yeniden deneyin.

    • stop-printer
      - Geçerli yazdırma kuyruğunu durdurun ve işi gelecekteki yazdırmalar için saklayın. Bu, yukarıda belirtilen alternatiflere göre aksi belirtilmediği sürece, hala varsayılandır. Ayrıca CUPS'un önceki sürümlerinde (sorunuza göre kurtulmak istediğiniz) tüm sıralar için varsayılan + yalnızca olası davranıştı.

    Ayrıca, her ayrı yazdırma kuyruğuna ayrı ayrı ErrorPolicies ayarlayabilirsiniz. Bu ayar printers.conf dosyasında not edilir. (İle bir komut satırından ayarlayın lpadmin -p printername -o printer-error-policy=retry-this-job).

  2. İçin CUPS'un eski sürümleri ben bir göz atmanızı öneririm beh, CUPS arka uç Handler . behherhangi bir CUPS arka ucuna uygulanabilen bir sarıcıdır.

    Yazdırma sıranızın şu anda bir arka ucu tanımladığını socket://192.168.1.111:9100ve beğenmediğiniz şekilde davrandığını varsayalım (ağ bağlantısı sorunları nedeniyle zaman zaman cupd tarafından devre dışı bırakılmış). İle behsen ediyorum bu gibi arka uç yeniden tanımlamak:

    beh:/0/20/120/socket://192.168.1.111:9100
    

    Bu, işi iki dakikalık aralıklarla 20 kez yeniden dener ve kuyruğu ancak başarılı olamadığında devre dışı bırakır. Veya bunu yapabilirsin:

    beh:/1/3/5/socket://192.168.1.111:9100
    

    Bu, denemeler arasında 5 saniyelik gecikmelerle işi 3 kez yeniden dener. İş hala başarısız olursa, atılır, ancak sıra devre dışı bırakılmaz. Cupd'ın cihaza bağlanmak için süresiz olarak denemesini mi istiyorsunuz? Güzel, şunu dene:

    beh:/1/0/30/socket://192.168.1.111:9100
    

    Yazıcı geri gelene kadar sonsuz deneyin. Bağlantı girişimleri arasındaki aralıklar 30 saniyedir. Yazıcı kapatıldığında iş kaybolmaz. Yazıcıyı kapatarak kasıtlı olarak yazdırmayı geciktirebilirsiniz. Masaüstü yazıcıları ve / veya ev kullanıcıları için iyi bir yapılandırma.


Genel olarak, bash betiği, cron job lpadmin, cupsenableveya sudoCUPS kuyruklarını kararsız bir şekilde aşağı doğru tekrar aktive etmek için uğraşmanıza gerek yok.


CUPS'un daha yeni sürümleri için yeniden deneme aralığını nasıl ayarlayabiliriz?
Sepe

@Sepero: Evet. Örneğin: JobRetryInterval 58Her 58 saniyede bir deneyebilirsiniz. Diğer olası değerler 1w(1 hafta), 3d(3 gün), 7h(7 saat) veya 4m(4 dakika).
Kurt Pfeifle,

@Sepero: CUPS v1.7'ye kadar tüm olası cupsd.confparametreler burada belgelenmiştir: http://www.cups.org/documentation.php/doc-1.7/ref-cupsd-conf.html . Sayfanın sağ kenarındaki her bir parametre için ek açıklamaları kontrol edin: Size bunu destekleyen ilk CUPS sürümünün hangisi olduğunu söyleyecektir. Daha yararlı params mutlu keşif! :-)
Kurt Pfeifle

8

Bununla -Ekullanılan yazıcı seçeneği lpadminbunu yapmalıdır. Muhtemelen lpadminkomutla bir cron işi yaratabilirsiniz .

lpadmin [-U username ] [ -h server[:port] ] -p printer option(s)

Saatlik crongiriş:

0 * * * * /usr/sbin/lpadmin -p your_printer -E

Bunu çalıştırarak ekleyebilirsiniz:

sudo crontab -e

-EYazıcı adından sonra eklediğinizden emin olun , çünkü burada bir yazıcı seçeneği, bir lpadmin seçeneği değil. Aşağıdaki man lpadminaçıklamada belirtilen sayfadan aşağıdaki alıntıları not edin :

-D, -p veya -x seçeneklerinden önce belirtildiğinde, -E seçeneği sunucuya bağlanırken şifrelemeyi zorlar.


2
Bu yanlış. -E bu bağlamda bir yazıcı seçeneğidir ve yazıcının adından SONRA gitmelidir, aksi halde sadece iletişim şifrelemesini açarsınız. developer.apple.com/library/mac/documentation/Darwin/Reference/… - -d, -p veya -x seçeneklerinden önce belirtildiğinde, -E seçeneği sunucuya bağlanırken şifrelemeyi zorlar.
scragar

Bu benim için çalışan tek çözüm. bardaklar sık ​​sık sebepsiz yere yazıcıyı duraklatıyor. Bu error-policyhiçbir şeyi çözmez. cupsenablehiçbir şeyi çözmez. Sadece lpadminbenim için yapar.
Kullanıcı

6

Yazıcım HP CP1215'in de bir hatası vardı: Yazıcı Duraklatıldı - "/ usr / lib / cups / backend / hp fail"

Hem yeniden başlattıktan sonra cupsve avahi-daemonve yazıcıyı tanımlayan lpstat -pve birlikte sağlayarak cupsenable, tekrar yazdırmayı başardı. Sadece yeniden başlatmak cupsve mümkün kılmak hile yapmadı.

Ayrıca yeniden deneme işi için varsayılan politikamı değiştirdim ve sonunda cronjob ile gelecekteki hatalardan kaçındım.

* * * * * lpstat -p |grep "poissa käytöstä" && service avahi-daemon restart; service cups restart; cupsenable HP_Tuloostin

poissa käytöstäFinlandiya yerelleştirme metni "sıra dışı" bakım için nerede ve HP_Tuloostinyazıcımın adıdır.

Tecrübelerime göre hem varsayılan politika hem de mevcut yazıcı politikaları yeniden denenecek şekilde yapılandırılmalıdır. Varsayılan politika, yeni bir yazıcı kurarken edindiğiniz politikadır.


2
ls /etc/cups/ppd/ |cut -d "." -f1 |grep -v VMware |xargs -i cupsenable {}

Bu, yüklü bir yazıcıyı temsil eden tüm ppd dosyalarını listeler, ppd uzantısını keser, çok sayıda VMware sunucusunda bulunan bir VMware ppd'yi yok sayar (yalnızca kaldırmanız gerekmiyorsa |grep -v VMware) ve xargsbunların tümünü duraklatan diğer adları geçirir Yazıcılar

Bir cron işi bu işi iyi yapmalı.


1

Sorun GUI'nin yazıcıyı devam ettirmek için bir giriş yapmasını gerektirdiği gerçeğine bağlıysa, başka bir çözüm de giriş yapmadan yazıcının GUI aracılığıyla devam etmesini sağlamaktır. Kapları kapatmak ve bu satırı düzenlemek için sudo vi /etc/cups/cupsd.conf:

<Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After Cancel-  Jobs CUPS-Accept-Jobs CUPS-Reject-Jobs>

Yönergeyi kaldırın Resume-Printer, sonra bardakları yeniden başlatın. Yönerge birden fazla <Limit>bölümde görünüyorsa , ilgili <Policy>bölümden kaldırabilir veya tümünü kaldırabilirsiniz. Artık GUI'den giriş yapmadan yazıcıya devam edebilmelisiniz. Bunu macworld'de gördüm, ancak herhangi bir kupa takma için geçerli.


1

Yukarıdaki Janne'den gelen cevap, örneğin:

* * * * * lpstat -p |grep "poissa käytöstä" && service avahi-daemon restart; service cups restart; cupsenable HP_Tuloostin

... herhangi bir yazıcının içinde bulunduğu durum ne olursa olsun, CUPS'un her dakika yeniden başlatılmasına neden olacaktır. Bunun nedeni, bardakların yeniden başlatma maddesinin && ile eşleştirilmemesidir.

İşte bir başarısızlık durumu tespit ettikten sonra CUPS'un yeniden başlatılmasını şartlı hale getirmek için kullandığım kısa bir BASH betiği.

#!/bin/bash

DATE=$(date)
DS40=$(/usr/bin/lpstat -p |grep "DS40" |grep "disabled")

if [ ! -z "${DS40}" ]; then
    echo "${DATE} - Restarted avahi and cups" >> /var/log/cups/restart-cron-tim.log
    /usr/sbin/service avahi-daemon restart
    /usr/sbin/service cups restart
    /usr/sbin/cupsenable Dai_Nippon_Printing_DS40
fi

Durumunu aradığınız yazıcıyla "DS40" ı, dilinizde hangi lpstat -p çıkışlarını alırsanız "devre dışı bırakma" yla değiştirin.


0

Cupsd.conf dosyasını şu satırla güncelledim:

ErrorPolicy iptal işi

Sonra cupsd kullanarak yeniden başlattım: /etc/init.d/cups restart

Ancak printers.conf dosyasına baktığımda, ErrorPolicy güncellenmedi. Bardak belgelerine göre, yazıcı bölümünde "ErrorPolicy abort-job" satırı görünmelidir.

Ayrıca ErrorPolicy'yi güncellemek için lpadmin ile de denedim. ErrorPolicy'yi hiçbir şey değiştirmez veya printers.conf dosyasına yapmaz.

Neyi kaçırıyorum? Su bardağı gerçekten hatalı bir işi bıraktığından nasıl emin olabilirim?


düzenlemek printers.conf
KawaiKx

0

lpadmin -p p-go-avtom2 -v p-go-avtom2 -E

Kaynak


5
Bunun tam olarak ne yaptığını açıklamak ister misiniz? Lütfen biraz daha içerik ekleyin.
slhck

0

Buradaki çözümlerin bir kısmı benim için işe yaramadı (örneğin, sudo cupsenable ve lpadmin -E).

Debian 8.6 kullanıyorsanız , Cinnamon 2.2.16 (Linux) bunu GUI başlat menünüzden yapın:

Click Administration | Print Settings,
Then select your stalled CUPS printer,
Click Unlock (and give it your admin password),
Click Server | Settings,
In this click the blue "Problems?" link. 

İçin Ubuntu 16.04:

Click System Settings | Printers,
Then Server | Settings,
Click the blue "Problems?" link. 

Bu, yazdırma sorun gidericisini açar. Size daha sonra ne yapacağınızı söyleyecektir.

Muhtemelen CUPS yazıcınızın Enabled özelliğini sadece Baskı Ayarlarınızda kontrol etmeniz gerekecektir. (Önce kilidini açmanız gerekir).

Son olarak, bunun tekrarlanmasını önlemek için, yukarıda belirtilen yazıcı kurulumunda yazıcıları "ilke" olarak "yeniden dene" olarak değiştirin (özellikler | politikalar altında).

Benim için tamir!

Bu soruna neden olan şey: Wifi yazıcım CUPS YAZICI'ya yazdırdığımda kapalıysa ve politikam "yazıcıyı durdur" ise, yazamayacağımı ve yazıcının devre dışı bırakıldığını belirten bir ileti alıyorum (Etkin seçeneği işaretli değil) . Yalnızca politika "işi yeniden dene" olarak ayarlanmışsa, Etkin seçeneği işaretlenmez. Yazıcı kapatıldıktan birkaç dakika sonra işleriniz yazdırılmaya başlayacaktır.

(Bununla ilgili diğer yayınım.)


0

Burada aynı CUPS saçmalığıyla uğraşmak zorunda kaldım ... Benim için çözüm, her n dakikada bir çalışan bir sistem komut dosyasıydı.

/usr/local/cups/enable_cups_printers.sh

#!/bin/sh
for printer in $(lpstat -v | perl -pe 's/device for ([A-Za-z0-9_]+):.*/\1/g')
do
    echo "Forcely enabling printer: $printer"
    # Enable:-E PrinterId:-p
    /usr/bin/lpadmin -E -p "$printer"
done

cups.enable.printers.service

[Unit]
Description = Forcely enable printer occassionally. Why CUPS disables printers in the first place has yet to be determined.

[Service]
Type = simple
ExecStart = /usr/local/cups/enable_cups_printers.sh

[Install]
WantedBy = multi-user.wants

cups.enable.printers.timer

[Unit]
Description=Run enable printers frequently to ensure connection difficulties are remedied.

[Timer]
OnBootSec=15min
OnUnitActiveSec=300

[Install]
WantedBy = timers.target

-1

Diğerlerinin daha önce de söylediği gibi, 'cupsenable' veya 'lpadmin -E' hile yapmalı.

İlgili bir sorun, IIRC'dir; varsayılan olarak CUPS, yazıcıyı bir şekilde yazdırma işlemi başarısız olursa, yazıcı devre dışı bırakılacak şekilde yapılandırır. Bunun yerine işi iptal etmek için bunu değiştirebilirsiniz.


-E olarak -1, şifreleme içindir.
Eliptik görünüm

Yukarıda başka bir cevapta -E'yi bir lpadmin seçeneği olarak değil bir yazıcı seçeneği olarak nasıl kullanacağınızı görün.
Eliptik görünüm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.