कमांड लाइन से CUPS प्रिंटर को फिर से कैसे शुरू करें?


42

सीयूपीएस में मेरा प्रिंटर है कि समय-समय पर ड्राइवर की समस्याओं (एचपी 1010) के कारण विराम लगता है।

मैं एक शेल स्क्रिप्ट लिखना चाहूंगा जो CUPS में प्रिंटर को फिर से शुरू करने के लिए प्रति घंटे एक बार निष्पादित करेगा। लेकिन मुझे कुछ मिनट के लिए googling के बाद पता नहीं है कि शेल कमांड लाइन से प्रिंटर को फिर से कैसे शुरू किया जाए।


यह क्या कारण है: एक के लिए, जब मेरे वाईफाई प्रिंटर को संचालित किया जाता है तो यह सक्षम ध्वज को साफ करता है। यहां तक ​​कि जब प्रिंटर बैक अप संचालित होता है, तो सक्षम ध्वज को चेक करने के लिए पुनर्स्थापित नहीं किया जाता है। .. --- नौकरियां फिर प्रिंट कतार में ढेर हो जाएंगी। त्रुटि संदेश "फ़िल्टर विफल" है। जब मैं प्रिंटर सेटिंग्स में इस बॉक्स की जांच करता हूं तो प्रिंटर फिर से प्रिंट करना शुरू कर देता है।
अण्डाकार दृश्य

जवाबों:


66

वहाँ तामसिक आदेश है।

cupsenable printer

एक अक्षम प्रिंटर शुरू करता है (प्रिंटमार्क का पता लगाने के लिए आप अपने प्रिंटर को lpstat -pया उसके साथ सूचीबद्ध कर सकते हैं lpc status)।

आपको कमांड को रूट या sudo के माध्यम से चलाना पड़ सकता है। इसलिए यदि आपको प्रिंटर को शेल स्क्रिप्ट में सक्षम करना है, तो आपको शेल को रूट के क्रॉस्टैब में जोड़ना होगा, या अपने sudoers फ़ाइल को संपादित करना होगा।


1
+1 करने के लिए (जैसे कि "overbloated कप विन्यास का उपयोग करें" इसके विपरीत में इस उत्तर superuser.com/a/280400/160771 ), वास्तव में मदद की। इसके अलावा इसकी बात करने के लिए और अधिक, क्योंकि ओपी पता करने के लिए आदेश पंक्ति चाहता था
humanityANDpeace

25

आपकी समस्या को विभिन्न तरीकों से निपटाया जा सकता है, जो आपके द्वारा चलाए जा रहे सीयूपीएस के संस्करण पर निर्भर करता है।

  1. सीयूपीएस के अधिक हाल के संस्करण (संस्करण 1.2 और ऊपर) एक अंतर्निहित कार्यक्षमता के साथ आते हैं जो यहां मदद कर सकता है। इसे "ErrorPolicy" कहा जाता है। यह डिफ़ॉल्ट सेटिंग cupd.conf में चुनी गई है, और यह निर्धारित करती है कि कैसे cupd प्रिंट कतारों को संभालना चाहिए जो अपेक्षा के अनुरूप व्यवहार नहीं करते हैं। आपके पास प्रत्येक कतार में व्यक्तिगत रूप से टैग करने के लिए 3 विकल्प हैं:

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

    स्पष्टीकरण:

    • abort-job
      - इस नौकरी को रद्द करें और अगली नौकरी के साथ उसी कतार में आगे बढ़ें

    • retry-job
      - N सेकंड (जहाँ N को cupd.conf के "JobRetryInterval" निर्देश द्वारा निर्धारित किया गया है) के इंतजार के बाद इस नौकरी को पुनः प्राप्त करें ।

    • retry-this-job
      - वर्तमान नौकरी को तुरंत और अनिश्चित काल के लिए पुन: प्रयास करें।

    • stop-printer
      - वर्तमान प्रिंट कतार बंद करो और भविष्य की छपाई के लिए काम रखो। यह तब भी डिफ़ॉल्ट है, जब तक कि आप अन्यथा उपर्युक्त विकल्पों के अनुसार परिभाषित नहीं करते हैं। यह सीयूपीएस के पिछले संस्करणों में सभी कतारों के लिए डिफ़ॉल्ट + केवल संभव व्यवहार था (आप जिसे अपने प्रश्न के अनुसार छुटकारा चाहते हैं)।

    इसके अतिरिक्त, आप प्रत्येक अलग-अलग प्रिंट कतार में अलग-अलग ErrorPol बाह्य उपकरणों को सेट कर सकते हैं। यह सेटिंग प्रिंटर.कॉन्फ़ फ़ाइल में नोट की जाएगी। (इसे एक कमांडलाइन से सेट करें lpadmin -p printername -o printer-error-policy=retry-this-job)।

  2. CUPS के पुराने संस्करणों के लिए, मैं behCUPS बैकएंड हैंडलर पर एक नज़र डालना चाहूंगा । behएक आवरण है जो किसी भी CUPS बैकएंड पर लागू किया जा सकता है।

    मान लें कि आपकी प्रिंट कतार वर्तमान में बैकएंड को परिभाषित कर चुकी है socket://192.168.1.111:9100, और यह उस तरह से व्यवहार करती है जो आपको पसंद नहीं है (नेटवर्क कनेक्शन समस्याओं के कारण समय-समय पर कपल्ड द्वारा अक्षम किया जाना)। साथ behइस तरह अपने बैकएंड आप चाहते हैं फिर से परिभाषित:

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

    यह दो मिनट के अंतराल में 20 बार नौकरी छोड़ देगा , और कतार को अक्षम कर देगा जब अभी भी सफल नहीं हो रहा है। या आप ऐसा कर सकते हैं:

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

    यह प्रयासों के बीच 5 सेकंड की देरी के साथ 3 बार नौकरी से पीछे हट जाता है। यदि नौकरी अभी भी विफल हो जाती है, तो उसे छोड़ दिया जाता है, लेकिन कतार अक्षम नहीं होती है। आप डिवाइस से कनेक्ट करने के लिए कपडे को अनिश्चित काल तक चलने देना चाहते हैं? अच्छा है, यह प्रयास करें:

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

    प्रिंटर वापस आने तक असीम रूप से प्रयास करें। कनेक्शन प्रयासों के बीच अंतराल 30 सेकंड हैं। प्रिंटर के बंद होने पर नौकरी नहीं मिलती है। आप जानबूझकर केवल प्रिंटर बंद करके मुद्रण में देरी कर सकते हैं। डेस्कटॉप प्रिंटर और / या घर के उपयोगकर्ताओं के लिए एक अच्छा कॉन्फ़िगरेशन।


कुल मिलाकर, वहां पार्टी लिपियों, क्रॉन नौकरियों, के साथ चारों ओर गंदगी के लिए कोई जरूरत नहीं है lpadmin, cupsenableया sudoफिर से सक्रिय करने कप कतारों अनिश्चित नीचे जा रहा करने के लिए।


सीयूपीएस के अधिक हाल के संस्करणों के लिए हम रिट्रीवल अंतराल कैसे निर्धारित कर सकते हैं?
सेपरो

@ शेपरो: हाँ। उदाहरण के लिए: आप JobRetryInterval 58हर 58 सेकंड में कोशिश कर सकते हैं । अन्य संभावित मान हैं 1w(1 सप्ताह), 3d(3 दिन), 7h(7 घंटे) या 4m(4 मिनट)।
कर्ट फ़िफ़ेल

@ शेपरो: सीयूपीएस v1.7 तक के सभी संभावित cupsd.confमापदंडों को यहां प्रलेखित किया गया है: http://www.cups.org/documentation.php/doc-1.7/ref-cupsd-conf.html । पृष्ठ के दाहिने किनारे पर प्रत्येक पैरामीटर के लिए एनोटेशन की जाँच करें: यह आपको बताएगा कि इसे समर्थन देने के लिए सबसे पहले CUPS ने कौन सा रिलीज़ किया था। अधिक उपयोगी परम की खोज मुबारक! :-)
कर्ट फ़ेफ़ेले

8

के -Eसाथ प्रयोग किया जाने वाला प्रिंटर विकल्प lpadminऐसा करना चाहिए। आप शायद lpadminकमांड के साथ क्रोन जॉब बना सकते हैं ।

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

प्रति घंटा cronप्रविष्टि:

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

आप इसे चलाकर जोड़ सकते हैं:

sudo crontab -e

सुनिश्चित करें कि आप -Eप्रिंटर नाम के बाद जोड़ते हैं , क्योंकि यह एक प्रिंटर विकल्प है, न कि एक लैम्पमिन विकल्प। man lpadminपृष्ठ से निम्नलिखित अंश पर ध्यान दें जो नीचे टिप्पणी में इंगित किया गया था:

जब -d, -p, या -x विकल्पों से पहले निर्दिष्ट किया जाता है, तो -E विकल्प सर्वर से कनेक्ट होने पर एन्क्रिप्शन को बाध्य करता है।


2
ये गलत है। -इस संदर्भ में एक प्रिंटर विकल्प है, और प्रिंटर नाम के बाद जाना चाहिए, अन्यथा आप बस संचार एन्क्रिप्शन चालू कर रहे हैं। developer.apple.com/library/mac/documentation/Darwin/Reference/… - जब -d, -p, या -x विकल्पों से पहले निर्दिष्ट किया जाता है, तो -E विकल्प सर्वर से कनेक्ट होने पर एन्क्रिप्शन को बाध्य करता है।
स्क्रैगर

यह एकमात्र समाधान है जो मेरे लिए काम करता है। कप बिना किसी कारण के प्रिंटर को अक्सर रोकते रहते हैं। error-policyकुछ भी ठीक नहीं होती। cupsenableकुछ भी ठीक नहीं करता है। केवल lpadminमेरे लिए करता है।
λuser

6

मेरा प्रिंटर HP CP1215 भी एक त्रुटि थी: प्रिंटर रोका गया - "/ usr / lib / कप / बैकएंड / पीएस"

दोनों को फिर से शुरू करने cupsऔर avahi-daemonप्रिंटर की पहचान करने और उसके साथ lpstat -pसक्षम करने के बाद cupsenable, मैं फिर से प्रिंट करने में सक्षम था। केवल पुन: प्रारंभ cupsकरने और सक्षम करने ने चाल नहीं चली।

मैंने डिफ़ॉल्ट नीति को भी रिटायर-जॉब में बदल दिया और अंत में क्रोनजोब के साथ भविष्य में त्रुटियों से बचने के लिए समाप्त हो गया:

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

जहां poissa käytöstä"ऑर्डर से बाहर" रखरखाव के लिए फिनिश स्थानीयकरण पाठ है और HP_Tuloostinमेरे प्रिंटर का नाम है।

मेरे अनुभव में डिफ़ॉल्ट-नीति और वर्तमान प्रिंटर नीतियों दोनों को पुन: कार्य करने के लिए कॉन्फ़िगर किया जाना चाहिए। डिफ़ॉल्ट नीति सिर्फ एक नीति है जो आपको तब मिलती है जब आप एक नया प्रिंटर स्थापित कर रहे होते हैं।


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

यह उन सभी ppd फ़ाइलों को सूचीबद्ध करता है जो एक स्थापित प्रिंटर का प्रतिनिधित्व करते हैं, ppd एक्सटेंशन को काटते हैं, VMware ppd को बहुत सारे VMware सर्वरों में शामिल करते हुए अनदेखा करते हैं (यदि आपको इसे हटाने की आवश्यकता नहीं है |grep -v VMware), और उन अन्य नामों को पास xargsकरता है जिनसे सभी अनपेड हो जाते हैं प्रिंटर।

एक क्रॉन जॉब को इस काम को अच्छी तरह से करना चाहिए।


1

यदि समस्या इस तथ्य से कम है कि जीयूआई को प्रिंटर को फिर से शुरू करने के लिए एक लॉगिन की आवश्यकता है, तो एक और उपाय यह है कि प्रिंटर को जीयूआई के माध्यम से लॉगिन के बिना फिर से शुरू करें। कप को बंद करने के लिए और इस लाइन को संपादित करने के लिए 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>

और Resume-Printerनिर्देश को हटा दें , फिर कप को पुनरारंभ करें। यदि निर्देश एक से अधिक <Limit>खंड पर दिखाई देता है तो आप इसे संबंधित <Policy>अनुभाग से हटा सकते हैं या सभी से हटा सकते हैं। अब आपको GUI से लॉगिन के बिना प्रिंटर को फिर से शुरू करने में सक्षम होना चाहिए। मैंने इसे macworld पर देखा लेकिन यह किसी भी कप इंस्टॉल पर लागू होता है।


1

ऊपर दिए गए जैने का उत्तर, जैसे यह:

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

... सीयूपीएस को हर मिनट फिर से शुरू करने का कारण होगा, चाहे कोई भी प्रिंटर हो, ऐसा इसलिए है क्योंकि कप रीस्टार्ट क्लॉज को && के साथ जोड़ा नहीं जाता है।

यहाँ एक छोटी BASH स्क्रिप्ट है जिसका उपयोग मैंने विफलता स्थिति का पता लगाने पर CUPS सशर्त को पुनः आरंभ करने के लिए किया।

#!/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

"DS40" को आप जिस भी प्रिंटर की स्थिति के लिए देख रहे हैं, और "अक्षम" को अपनी भाषा में जो भी lpstat -p आउटपुट दें, के साथ बदलें।


0

मैंने cupd.conf को लाइन के साथ अद्यतन किया:

ErrorPolicy गर्भपात-नौकरी

फिर मैंने कपडे को फिर से शुरू किया: /etc/init.d/cups पुनरारंभ

लेकिन जब मैं प्रिंटर.कॉन्फ़ फ़ाइल को देखता हूं, तो ErrorPolicy अपडेट नहीं किया जाता है। कप डॉक्यूमेंटेशन के अनुसार, प्रिंटर अनुभाग में "ErrorPolicy abort-job" लाइन दिखनी चाहिए।

मैंने भी त्रुटि अद्यतन करने के लिए lpadmin के साथ प्रयास किया। कुछ भी ErrorPolicy नहीं बदलता है या यह प्रिंटर .conf फ़ाइल में नहीं आता है।

मुझे किसकी याद आ रही है? मैं यह कैसे सुनिश्चित करूं कि कपल्ड वास्तव में त्रुटि पर नौकरी रद्द करता है?



0

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

स्रोत


5
यह समझाने के लिए कि यह क्या होता है, ठीक है? कृपया थोड़ा और संदर्भ जोड़ें।
slhck

0

यहाँ समाधान का एक गुच्छा मेरे लिए काम नहीं किया, (जैसे sudo cupsenable और lpadmin -E)।

यदि आप Debian 8.6 का उपयोग कर रहे हैं , तो Cinnamon 2.2.16 (Linux) अपने GUI प्रारंभ मेनू से ऐसा करें:

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. 

के लिए उबंटू 16.04:

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

यह मुद्रण समस्या निवारक को खोलता है। यह आपको बताएगा कि आगे क्या करना है।

संभवत: आपको अपने सीयूपीएस प्रिंटर के लिए अपनी प्रिंट सेटिंग में सक्षम संपत्ति की जांच करनी होगी। (आपको पहले अनलॉक करने की आवश्यकता होगी)।

अंत में, इसे फिर से होने से बचाने के लिए, प्रिंटर सेटअप (प्रॉपर्टीज़ (पॉलिसियों के तहत)) में उल्लिखित प्रिंटर पॉलिसी को "रिट्री-जॉब" में बदल दें।

मेरे लिए यह तय!

इस समस्या का क्या कारण है: अगर मैं CUPS PRINTER में प्रिंट होने पर मेरा वाईफाई प्रिंटर संचालित होता है, और मेरी नीति "प्रिंटर बंद करो" है, तो मुझे एक संदेश मिलता है कि मैं प्रिंट नहीं कर सका और प्रिंटर अक्षम है (सक्षम अनियंत्रित है) । केवल अगर पॉलिसी "रिट्रीट जॉब" पर सेट है, तो सक्षम नहीं किया जाएगा। प्रिंटर के संचालित होने के कुछ मिनट बाद आपकी नौकरियां छपने लगेंगी।

( इस बारे में मेरी अन्य पोस्ट।)


0

यहाँ एक ही CUPS बकवास से निपटना था ... मेरे लिए समाधान एक सिस्टम स्क्रिप्ट थी जो हर n मिनट चलती है।

/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

जैसा कि अन्य लोग पहले ही कह चुके हैं कि 'कपसेबल' या 'लैपडमिन-ई' को चाल चलनी चाहिए।

एक संबंधित समस्या IIRC है जो डिफ़ॉल्ट रूप से CUPS प्रिंटर को कॉन्फ़िगर करता है जैसे कि यदि किसी कार्य को प्रिंट करना किसी तरह विफल रहता है, तो प्रिंटर अक्षम है। आप नौकरी बदलने के लिए इसे बदल सकते हैं।


-1 as -E एन्क्रिप्शन के लिए है।
अण्डाकार दृश्य

ऊपर दिए गए दूसरे उत्तर में देखें कि कैसे एक प्रिंटर विकल्प के रूप में ठीक से उपयोग किया जाए, न कि एक लैपडमिन विकल्प के रूप में।
अण्डाकार दृश्य
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.