Saya memiliki printer di CUPS yang karena masalah driver (HP 1010) dari waktu ke waktu berhenti sementara.
Saya ingin menulis skrip shell yang akan dijalankan sekali per jam untuk melanjutkan printer di CUPS. Tapi saya tidak tahu setelah googling selama beberapa menit bagaimana melanjutkan printer dari baris perintah shell.
Jawaban:
Ada perintah cupsenable.
cupsenable printer
memulai pencetak yang dinonaktifkan (untuk mengetahui nama pencetak Anda dapat mencantumkan pencetak Anda dengan
lpstat -p
ataulpc status
).Anda mungkin harus menjalankan perintah sebagai root atau melalui sudo. Jadi, jika Anda harus mengaktifkan printer dalam skrip shell, Anda harus menambahkan shell ke crontab root, atau mengedit file sudoers Anda.
sumber
Masalah Anda dapat diatasi dengan berbagai cara, tergantung pada versi CUPS yang Anda jalankan.
Lebih versi terbaru dari CUPS (versi 1.2 dan di atas) datang dengan fungsi builtin yang bisa membantu di sini. Ini disebut "ErrorPolicy". Pengaturan standarnya dipilih di cupsd.conf, dan menentukan bagaimana cupsd harus menangani antrian cetak yang tidak berperilaku seperti yang diharapkan. Anda memiliki 3 pilihan untuk menandai masing-masing antrian:
Penjelasan:
abort-job
- Batalkan pekerjaan ini dan lanjutkan dengan pekerjaan berikutnya dalam antrian yang sama
retry-job
- Coba lagi pekerjaan ini setelah menunggu selama N detik (di mana N ditentukan oleh direktif cupsd.conf "JobRetryInterval").
retry-this-job
- Coba lagi pekerjaan saat ini segera dan tanpa batas.
stop-printer
- Hentikan antrian cetak saat ini dan simpan pekerjaan itu untuk pencetakan di masa mendatang. Ini masih default, kecuali jika Anda menentukan sebaliknya sesuai alternatif yang disebutkan di atas. Ini juga + default hanya perilaku yang mungkin untuk semua antrian dalam versi CUPS sebelumnya (yang Anda ingin singkirkan sesuai pertanyaan Anda).
Selain itu, Anda dapat mengatur masing-masing ErrorPolicies ke setiap antrian cetak yang terpisah. Pengaturan ini akan dicatat dalam file printers.conf. (Atur dari baris perintah dengan
lpadmin -p printername -o printer-error-policy=retry-this-job
).Untuk versi CUPS yang lebih lama, saya sarankan untuk melihatnya
beh
, CUPS BackEnd Handler .beh
adalah pembungkus yang dapat diterapkan ke backend CUPS.Dengan asumsi antrian cetak Anda saat ini telah menetapkan backend of
socket://192.168.1.111:9100
, dan itu berperilaku dengan cara yang tidak Anda sukai (dinonaktifkan oleh cupsd dari waktu ke waktu karena masalah koneksi jaringan). Denganbeh
Anda akan mendefinisikan kembali backend Anda seperti ini:Ini akan mencoba lagi pekerjaan 20 kali dalam interval dua menit , dan menonaktifkan antrian hanya ketika masih tidak berhasil. Atau Anda bisa melakukan ini:
Ini ulangi pekerjaan 3 kali dengan penundaan 5 detik antara upaya. Jika pekerjaan masih gagal, itu dibuang, tetapi antrian tidak dinonaktifkan. Anda ingin membiarkan cupsd mencoba tanpa batas untuk terhubung ke perangkat? Bagus, coba ini:
Coba tanpa batas hingga printer kembali. Interval antara upaya koneksi adalah 30 detik. Pekerjaan tidak hilang saat printer dimatikan. Anda dapat dengan sengaja menunda pencetakan hanya dengan mematikan printer. Konfigurasi yang baik untuk printer desktop dan / atau pengguna rumahan.
Secara keseluruhan, tidak perlu dipusingkan dengan skrip bash, tugas cron
lpadmin
,,cupsenable
atausudo
untuk mengaktifkan kembali antrian CUPS yang turun secara tidak menentu.sumber
JobRetryInterval 58
mencoba setiap 58 detik. Nilai lain yang mungkin adalah1w
(1 minggu),3d
(3 hari),7h
(7 jam) atau4m
(4 menit).cupsd.conf
parameter yang memungkinkan hingga CUPS v1.7 didokumentasikan di sini: http://www.cups.org/documentation.php/doc-1.7/ref-cupsd-conf.html . Periksa anotasi untuk setiap parameter di tepi kanan halaman: ini akan memberi tahu Anda rilis CUPS mana yang pertama mendukungnya. Selamat menemukan params yang lebih berguna! :-)The
-E
opsi printer yang digunakan denganlpadmin
harus melakukan itu. Anda mungkin bisa membuat pekerjaan cron denganlpadmin
perintah.cron
Entri setiap jam :Anda dapat menambahkannya dengan menjalankan:
Pastikan Anda menambahkan
-E
setelah nama printer, karena ini adalah opsi printer di sini, bukan opsi lpadmin. Perhatikan kutipan berikut dariman lpadmin
halaman yang ditunjukkan dalam komentar di bawah ini:sumber
error-policy
memperbaiki apa pun.cupsenable
tidak memperbaiki apa pun. Hanyalpadmin
untuk saya.Printer saya HP CP1215 juga memiliki kesalahan: Printer Dijeda - "/ usr / lib / cups / backend / hp gagal"
Setelah me-restart keduanya
cups
danavahi-daemon
mengidentifikasi printer denganlpstat -p
dan mengaktifkancupsenable
, saya dapat mencetak lagi. Restart sajacups
dan mengaktifkan tidak berhasil.Saya juga mengubah kebijakan default untuk mencoba ulang pekerjaan dan akhirnya menghindari kesalahan di masa depan dengan cronjob:
di mana
poissa käytöstä
teks lokalisasi Finlandia untuk pemeliharaan "rusak" danHP_Tuloostin
merupakan nama printer saya.Dalam pengalaman saya, kebijakan default dan kebijakan printer saat ini harus dikonfigurasi untuk mencoba kembali pekerjaan. Kebijakan default adalah kebijakan yang Anda dapatkan saat memasang printer baru.
sumber
Ini mencantumkan semua file ppd yang mewakili printer yang diinstal, memotong ekstensi ppd, mengabaikan ppd VMware yang disertakan pada banyak server VMware (jika Anda tidak perlu menghapusnya begitu saja
|grep -v VMware
), dan meneruskan nama-nama lainxargs
yang tidak terhapuskan semua printer.Pekerjaan cron harus membuat ini berfungsi dengan baik.
sumber
Jika masalahnya adalah fakta bahwa GUI memerlukan login untuk melanjutkan printer, maka solusi lain adalah mengizinkan printer melanjutkan melalui GUI tanpa login. Untuk melakukannya, matikan cangkir dan edit baris ini
sudo vi /etc/cups/cupsd.conf
:Dan hapus
Resume-Printer
arahan, lalu restart gelas. Jika arahan muncul di lebih dari satu<Limit>
bagian maka Anda dapat menghapusnya dari bagian yang relevan<Policy>
atau menghapus dari semua. Anda sekarang dapat melanjutkan printer tanpa login dari GUI. Saya melihat ini di macworld tetapi ini berlaku untuk semua piala yang dipasang.sumber
Jawaban dari Janne di atas, misalnya ini:
... akan menyebabkan CUPS dihidupkan ulang setiap menit, terlepas dari kondisi apa pun yang digunakan printer. Karena klausa restart cangkir tidak dipasangkan dengan &&.
Berikut ini adalah skrip BASH singkat yang saya gunakan untuk membuat restart CUPS bersyarat setelah mendeteksi keadaan kegagalan.
Ganti "DS40" dengan printer apa pun yang Anda cari statusnya, dan "nonaktifkan" dengan apa pun keluaran lpstat -p dalam bahasa Anda.
sumber
Saya memperbarui cupsd.conf dengan baris:
ErrorPolicy batalkan pekerjaan
Kemudian saya memulai kembali cupsd menggunakan: /etc/init.d/cups restart
Tetapi ketika saya melihat file printers.conf, ErrorPolicy tidak diperbarui. Menurut dokumentasi cangkir, baris "Pekerjaan aborsi ErrorPolicy" harus muncul di bagian printer.
Saya juga mencoba dengan lpadmin untuk memperbarui ErrorPolicy. Tidak ada yang mengubah ErrorPolicy atau tidak membuatnya menjadi file printers.conf.
Apa yang saya lewatkan? Bagaimana cara memastikan bahwa cupsd benar-benar membatalkan pekerjaan karena kesalahan?
sumber
lpadmin -p p-go-avtom2 -v p-go-avtom2 -E
Sumber
sumber
Banyak solusi di sini tidak bekerja untuk saya, (misalnya sudo cupsenable dan lpadmin -E).
Jika Anda menggunakan Debian 8.6, Cinnamon 2.2.16 (Linux) lakukan ini dari menu mulai GUI Anda:
Untuk Ubuntu 16.04:
Ini membuka pemecah masalah pencetakan. Ini akan memberi tahu Anda apa yang harus dilakukan selanjutnya.
Mungkin Anda hanya perlu memeriksa properti Diaktifkan untuk printer CUPS Anda di Pengaturan Cetak Anda. (Anda harus membuka kunci terlebih dahulu).
Akhirnya, untuk menghindari hal ini terjadi lagi, ubah "kebijakan" printer ke "coba kembali" dalam pengaturan printer yang disebutkan di atas (di bawah properties | kebijakan).
Perbaiki untuk saya!
Apa yang menyebabkan masalah ini: Jika printer wifi saya dimatikan ketika saya mencetak ke CUPS PRINTER, dan kebijakan saya adalah "stop printer", maka saya mendapatkan pesan bahwa saya tidak bisa mencetak dan printer dinonaktifkan (Diaktifkan tidak dicentang) . Hanya jika kebijakan diatur ke "coba lagi pekerjaan" yang Diaktifkan tidak akan dicentang. Beberapa menit setelah printer dihidupkan kembali, pekerjaan Anda akan mulai dicetak.
( Posting saya yang lain tentang ini.)
sumber
Harus berurusan dengan omong kosong CUPS yang sama di sini ... Solusi bagi saya adalah skrip systemd yang berjalan setiap n menit.
/usr/local/cups/enable_cups_printers.sh
cups.enable.printers.service
cups.enable.printers.timer
sumber
Seperti yang telah dikatakan orang lain, 'cupsenable' atau 'lpadmin -E' harus melakukan trik.
Masalah terkait adalah IIRC yang secara default CUPS mengkonfigurasi printer sedemikian rupa sehingga jika suatu pekerjaan gagal, printer dinonaktifkan. Anda dapat mengubah ini untuk membatalkan pekerjaan.
sumber