Làm cách nào để tiếp tục máy in CUPS từ dòng lệnh?


42

Tôi có máy in trong CUPS do sự cố trình điều khiển (HP 1010) theo thời gian tạm dừng.

Tôi muốn viết một kịch bản shell sẽ thực thi một lần mỗi giờ để tiếp tục máy in trong CUPS. Nhưng tôi không biết sau khi googling vài phút, làm thế nào để tiếp tục máy in từ dòng lệnh shell.


Điều gì gây ra điều này: Đối với một, khi máy in wifi của tôi bị tắt nguồn, nó dường như xóa cờ Đã bật. Ngay cả khi máy in được bật lại, cờ đã bật vẫn không được khôi phục để kiểm tra. .. --- Công việc sau đó sẽ chồng chất trong hàng đợi in. Thông báo lỗi là "bộ lọc thất bại". Khi tôi chọn hộp này trong cài đặt máy in, máy in sẽ bắt đầu in lại.
Chế độ xem hình elip

Câu trả lời:


66

Có lệnh cupsenable.

cupsenable printer

khởi động một máy in bị vô hiệu hóa (để tìm ra tiên đề, bạn có thể liệt kê các máy in của mình với lpstat -phoặc lpc status).

Bạn có thể phải chạy lệnh dưới quyền root hoặc thông qua sudo. Vì vậy, nếu bạn phải kích hoạt máy in trong tập lệnh shell, bạn sẽ phải thêm trình bao vào crontab của root hoặc chỉnh sửa tệp sudoers của mình.


1
+1 câu trả lời này trái ngược với "sử dụng cấu hình cốc quá khổ" (như trong superuser.com/a/280400/160771 ), thực sự hữu ích. Ngoài ra, vì OP muốn biết dòng lệnh
nhân

25

Vấn đề của bạn có thể được giải quyết theo nhiều cách khác nhau, tùy thuộc vào phiên bản CUPS bạn đang chạy.

  1. Các phiên bản gần đây hơn của CUPS (phiên bản 1.2 trở lên) đi kèm với chức năng dựng sẵn có thể giúp đỡ ở đây. Nó được gọi là "ErrorPolicy". Cài đặt mặc định của nó được chọn trong cupsd.conf và xác định cách cupsd nên xử lý các hàng đợi in không hoạt động như mong đợi. Bạn có 3 lựa chọn để gắn thẻ cho từng hàng đợi:

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

    Giải trình:

    • abort-job
      - Hủy bỏ công việc này và tiến hành công việc tiếp theo trong cùng một hàng đợi

    • retry-job
      - Thử lại công việc này sau khi chờ đợi N giây (trong đó N được xác định bởi cupsd.conf 's 'JobRetryInterval' chỉ thị).

    • retry-this-job
      - Thử lại công việc hiện tại ngay lập tức và vô thời hạn.

    • stop-printer
      - Dừng hàng đợi in hiện tại và giữ công việc in ấn trong tương lai. Đây vẫn là mặc định, trừ khi bạn xác định khác theo các lựa chọn thay thế đã đề cập ở trên. Nó cũng là mặc định + chỉ có hành vi có thể cho tất cả các hàng đợi trong các phiên bản CUPS trước đây (một trong những câu hỏi bạn muốn loại bỏ theo câu hỏi của bạn).

    Ngoài ra, bạn có thể đặt ErrorPol khâu riêng cho từng hàng in riêng biệt. Cài đặt này sẽ được ghi chú trong tệp máy in. (Đặt nó từ một dòng lệnh với lpadmin -p printername -o printer-error-policy=retry-this-job).

  2. Đối với các phiên bản cũ hơn của CUPS, tôi khuyên bạn nên xem qua beh, Trình xử lý CUPS BackEnd . behlà một trình bao bọc có thể được áp dụng cho bất kỳ phụ trợ CUPS nào.

    Giả sử hàng đợi in của bạn hiện đã xác định một phụ trợ socket://192.168.1.111:9100và nó hoạt động theo cách bạn không thích (thỉnh thoảng bị cupsd vô hiệu hóa do sự cố kết nối mạng). Với behbạn sẽ xác định lại phụ trợ của bạn như thế này:

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

    Điều này sẽ thử lại một công việc 20 lần trong hai phút và chỉ vô hiệu hóa hàng đợi khi vẫn không thành công. Hoặc bạn có thể làm điều này:

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

    Điều này thử lại công việc 3 lần với độ trễ 5 giây giữa các lần thử. Nếu công việc vẫn thất bại, nó sẽ bị loại bỏ, nhưng hàng đợi không bị vô hiệu hóa. Bạn muốn để cupsd thử vô thời hạn để kết nối với thiết bị? Tốt, hãy thử điều này:

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

    Cố gắng vô hạn cho đến khi máy in trở lại. Khoảng thời gian giữa các lần thử kết nối là 30 giây. Công việc không bị mất khi tắt máy in. Bạn có thể cố tình trì hoãn việc in chỉ bằng cách tắt máy in. Một cấu hình tốt cho máy in để bàn và / hoặc người dùng gia đình.


Nhìn chung, không có nhu cầu để mess xung quanh với các kịch bản bash, công việc cron, lpadmin, cupsenablehoặc sudođể tái kích hoạt CUPS hàng đợi đi xuống thất thường.


Làm cách nào chúng ta có thể đặt khoảng thời gian thử lại cho các phiên bản CUPS gần đây hơn?
Sepero 4/2/2015

@Sepero: Vâng. Ví dụ: bạn có thể JobRetryInterval 58thử cứ sau 58 giây. Các giá trị khác có thể là 1w(1 tuần), 3d(3 ngày), 7h(7 giờ) hoặc 4m(4 phút).
Kurt Pfeifle 4/2/2015

@Sepero: Tất cả cáccupsd.conf tham số có thể lên tới CUPS v1.7 đều được ghi lại ở đây: http://www.cups.org/documentation.php/doc-1.7/ref-cupsd-conf.html . Kiểm tra các chú thích cho từng tham số ở cạnh phải của trang: nó sẽ cho bạn biết bản phát hành CUPS nào là bản đầu tiên hỗ trợ nó. Hạnh phúc khám phá các thông số hữu ích hơn! :-)
Kurt Pfeifle 4/2/2015

8

Các -Etùy chọn máy in sử dụng với lpadminnên làm điều đó. Bạn có thể chỉ cần tạo một công việc định kỳ bằng lpadminlệnh.

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

cronNhập cảnh hàng giờ :

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

Bạn có thể thêm nó bằng cách chạy:

sudo crontab -e

Đảm bảo bạn thêm -Esau tên máy in, vì đây là tùy chọn máy in ở đây, không phải tùy chọn lpadmin. Lưu ý đoạn trích sau từ man lpadmintrang được chỉ ra trong một bình luận dưới đây:

Khi được chỉ định trước các tùy chọn -d, -p hoặc -x, tùy chọn -E buộc mã hóa khi kết nối với máy chủ.


2
Cái này sai. -E trong ngữ cảnh này là một tùy chọn máy in và phải đi SAU tên máy in, nếu không bạn chỉ bật mã hóa truyền thông. developer.apple.com/l Library / mac / documentation / Darwin / Reference / Trực - Khi được chỉ định trước các tùy chọn -d, -p hoặc -x, tùy chọn -E buộc mã hóa khi kết nối với máy chủ.
Scragar

Đây là giải pháp duy nhất phù hợp với tôi. cốc liên tục tạm dừng máy in mà không có lý do khá thường xuyên. Các error-policykhông sửa chữa bất cứ điều gì. cupsenablekhông sửa chữa gì cả. Chỉ lpadminlàm cho tôi.
λuser

6

Máy in của tôi là HP CP1215 cũng có lỗi: Máy in bị tạm dừng - "/ usr / lib / cup / backend / hp fail"

Sau khi khởi động lại cả cupsavahi-daemonvà xác định máy in với lpstat -pvà bật với cupsenable, tôi đã có thể in lại. Chỉ khởi động lại cupsvà cho phép không thực hiện các mẹo.

Tôi cũng đã thay đổi chính sách mặc định thành thử lại công việc và cuối cùng đã tránh được lỗi trong tương lai với cronjob:

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

poissa käytöstävăn bản bản địa hóa Phần Lan ở đâu để bảo trì "không theo thứ tự" và HP_Tuloostinlà tên của máy in của tôi.

Theo kinh nghiệm của tôi, cả chính sách mặc định và chính sách máy in hiện tại nên được cấu hình để thử lại. Chính sách mặc định chỉ là chính sách mà bạn nhận được khi cài đặt máy in mới.


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

Điều này liệt kê tất cả các tệp ppd đại diện cho một máy in đã cài đặt, cắt bỏ phần mở rộng ppd, bỏ qua một ppd VMware được bao gồm trên nhiều máy chủ VMware (nếu bạn không cần điều này chỉ cần loại bỏ |grep -v VMware) và chuyển các tên khác xargsmà bỏ qua tất cả các tên khác Các máy in.

Một công việc định kỳ nên làm cho công việc này tốt.


1

Nếu vấn đề là do GUI yêu cầu đăng nhập để tiếp tục máy in thì một giải pháp khác là cho phép máy in tiếp tục qua GUI mà không cần đăng nhập. Để làm như vậy tắt máy cốc và chỉnh sửa dòng này 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>

Và loại bỏ Resume-Printerchỉ thị, sau đó khởi động lại cốc. Nếu lệnh xuất hiện trên nhiều <Limit>phần thì bạn có thể xóa nó khỏi phần có liên quan <Policy>hoặc xóa khỏi tất cả. Bây giờ bạn có thể tiếp tục máy in mà không cần đăng nhập từ GUI. Tôi đã thấy điều này trên macworld nhưng nó áp dụng cho bất kỳ cài đặt cốc nào.


1

Câu trả lời từ Janne ở trên, ví dụ:

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

... sẽ khiến CUPS được khởi động lại mỗi phút, bất kể máy in đang ở trạng thái nào. Điều đó là do mệnh đề khởi động lại cốc không được ghép nối với &&.

Đây là đoạn script BASH ngắn mà tôi đã sử dụng để khởi động lại CUPS có điều kiện khi phát hiện trạng thái lỗ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

Thay thế "DS40" bằng bất kỳ máy in nào bạn đang tìm trạng thái và "vô hiệu hóa" bằng bất kỳ đầu ra lpstat -p nào trong ngôn ngữ của bạn.


0

Tôi đã cập nhật cupsd.conf với dòng:

Công việc phá thai ErrorPolicy

Sau đó, tôi khởi động lại cupsd bằng cách sử dụng: /etc/init.d/cups restart

Nhưng khi tôi xem tập tin máy in.conf, ErrorPolicy không được cập nhật. Theo tài liệu về cốc, dòng "ErrorPolicy abort-job" phải xuất hiện trong phần máy in.

Tôi cũng đã thử với lpadmin để cập nhật ErrorPolicy. Không có gì thay đổi ErrorPolicy hoặc nó không chuyển thành tập tin máy in.

Tôi đang thiếu gì? Làm thế nào để tôi chắc chắn rằng cupsd thực sự hủy bỏ một công việc có lỗi?


chỉnh sửa máy
in.conf

0

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

Nguồn


5
Quan tâm để giải thích những gì nó làm, chính xác? Vui lòng thêm một chút bối cảnh.
slhck

0

Một loạt các giải pháp ở đây không hiệu quả với tôi, (ví dụ: sudo cupsenable và lpadmin -E).

Nếu bạn đang sử dụng Debian 8.6, Cinnamon 2.2.16 (Linux) sẽ thực hiện việc này từ menu bắt đầu GUI của bạ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. 

Đối với Ubuntu 16.04:

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

Điều này sẽ mở trình khắc phục sự cố in. Nó sẽ cho bạn biết phải làm gì tiếp theo.

Có lẽ bạn sẽ chỉ phải kiểm tra thuộc tính Kích hoạt cho máy in CUPS trong Cài đặt In của bạn. (Bạn sẽ cần mở khóa trước).

Cuối cùng, để tránh điều này xảy ra lần nữa, hãy thay đổi "chính sách" của máy in thành "thử lại công việc" trong cài đặt máy in được đề cập ở trên (theo thuộc tính | chính sách).

Đã sửa nó cho tôi!

Điều gì gây ra sự cố này: Nếu máy in wifi của tôi bị tắt nguồn khi tôi in vào CUPS PRINTER và chính sách của tôi là "dừng máy in", thì tôi nhận được một thông báo rằng tôi không thể in và máy in bị tắt (Không bật được chọn) . Chỉ khi chính sách được đặt thành "thử lại công việc" thì sẽ không được chọn. Một vài phút sau khi máy in được cấp điện dự phòng, công việc của bạn sẽ bắt đầu in.

( Bài viết khác của tôi về điều này.)


0

Phải đối phó với những điều vô nghĩa CUPS tương tự ở đây ... Giải pháp cho tôi là một tập lệnh systemd chạy mỗi n phút.

/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

cup.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

ly.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

Như những người khác đã nói, 'cupsenable' hoặc 'lpadmin -E' nên thực hiện thủ thuật.

Một vấn đề liên quan là IIRC mà theo mặc định CUPS định cấu hình máy in sao cho việc in một công việc không thành công bằng cách nào đó, máy in bị vô hiệu hóa. Bạn có thể thay đổi điều này để hủy bỏ công việc thay thế.


-1 như -E là để mã hóa.
Chế độ xem hình elip

Xem cách sử dụng đúng cách -E làm tùy chọn máy in, không phải là tùy chọn lpadmin, trong một câu trả lời khác ở trên.
Chế độ xem hình elip
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.