Repositori ini berisi Aplikasi Printer untuk printer PostScript yang menggunakan PAPPL untuk mendukung pencetakan IPP dari beberapa sistem operasi. Selain itu, ia menggunakan sumber daya cup-filter 2.x (fungsi filter di libcupsfilters, libppd) dan pappl-retrofit (mengenkapsulasi driver CUPS klasik di Aplikasi Printer). Karya ini (atau sekarang kode pappl-retrofit) berasal dari aplikasi hp-printer.
Kontribusi Anda diterima. Silakan posting masalah dan tarik permintaan.
Aplikasi Printer non-raster: Format tujuannya adalah PostScript, format tingkat tinggi/vektor. Data masukan dalam PostScript atau PDF diterima dan konversi yang diperlukan dilakukan tanpa langkah raster apa pun.
Aplikasi Printer yang menggunakan fungsi filter baru dari cup-filter 2.x. Fungsi filter adalah fungsi perpustakaan yang berasal dari filter CUPS dan berisi pengembangan dan penyempurnaan selama beberapa dekade mulai dari diperkenalkannya CUPS pada tahun 2000.
Aplikasi Printer retro-fit untuk driver CUPS klasik, dalam hal ini bentuk paling sederhana dari file PPD saja untuk printer PostScript. Ini mencantumkan file PPD dari repositori yang disertakan dalam Snap, memuat PPD yang diperlukan untuk printer sebenarnya, mengekstrak opsi dari PPD untuk menampilkannya di antarmuka web, menerima pengaturan pekerjaan sebagai atribut IPP, dan memasukkan kode PostScript yang disediakan oleh PPD dengan benar ke dalam aliran data keluaran.
Aplikasi Printer yang tidak melewati pekerjaan mentah (format input adalah format asli printer). Untuk memastikan bahwa kode PostScript dari file PPD selalu dimasukkan ke dalam aliran keluaran, kami memanggil format asli printer "application/vnd.printer-special" yang tidak ada sebagai format masukan, sehingga masukan "application/postscript" dipaksa melalui fungsi filter pstops().
Aplikasi Printer yang dapat diperluas: Pengguna dapat menambahkan file PPD melalui antarmuka web administrasi untuk mendukung model printer tambahan.
Properti selanjutnya adalah:
Untuk menghindari kebutuhan untuk menciptakan kembali kode untuk forking ke dalam sub-proses sehingga kita dapat meneruskan data melalui serangkaian filter, kita membuat fungsi filter untuk mengirim data ke printer dan membentuk rantai filter konversi yang sebenarnya. fungsi (salah satu pstops() dan pdftops()) dengan fungsi filter ini menggunakan fungsi filter filterChain().
Untuk input PWG/Apple Raster kami menggunakan callback raster sehingga pemrosesannya mengalir, sehingga memungkinkan pekerjaan yang besar dan bahkan sangat lama. Kami menggunakan fungsi libppd untuk memasukkan kode PostScript opsi PPD ke dalam aliran keluaran dan fungsi filterPOpen() untuk membuat deskriptor file untuk fungsi libppd untuk mengirim data ke perangkat.
Snap Aplikasi Printer PostScript memiliki semua file PPD PostScript dari proyek foomatic-db dan HPLIP bawaan, sehingga sebagian besar PPD printer PostScript biasanya disertakan dengan Distribusi Linux. Untuk menghindari banyaknya PPD yang memperbesar ukuran Snap, kami mengompresinya secara besar-besaran menggunakan pyppd. Perhatikan bahwa beberapa PPD menggunakan filter CUPS tertentu untuk fungsionalitas tambahan. Filter ini disertakan dalam Snap, sehingga fungsionalitas tambahan didukung (dalam banyak kasus, pencetakan dilindungi PIN). Pengguna dapat menambahkan PPD tambahan tanpa perlu membangun kembali Snap (lihat di bawah).
Kami menggunakan ID perangkat IEEE-1284 printer untuk mengidentifikasi terlebih dahulu bahwa itu adalah printer PostScript (melalui kolom CMD:) untuk melihat apakah printer tersebut didukung sama sekali dan baru kemudian memeriksa melalui merek dan model apakah kami secara eksplisit mendukungnya dengan PPD. Printer PostScript yang tidak memiliki PPD mendapatkan PPD generik yang ditetapkan. Dengan memeriksa kolom CMD: sebelum pencarian make/model, kami memastikan bahwa jika PostScript disediakan oleh modul tambahan, maka modul tersebut benar-benar terinstal.
Atribut IPP pekerjaan standar dipetakan ke pengaturan opsi PPD yang paling sesuai sehingga pengguna dapat mencetak dari jenis klien apa pun (misalnya telepon atau perangkat IoT) yang hanya mendukung atribut IPP standar dan tidak dapat mengambil opsi PPD. Baki, ukuran media, jenis media, dan dupleks dapat dipetakan dengan mudah, namun jika menyangkut warna dan kualitas, hal ini menjadi lebih rumit, karena opsi yang relevan sangat berbeda dalam file PPD. Di sini kami menggunakan algoritme yang secara otomatis (yang ingin mengedit secara manual ~10.000 PPD untuk tugas) menemukan rangkaian pengaturan opsi yang tepat untuk setiap kombinasi print-color-mode
( color
/ monochrome
), print-quality
( draft
/ normal
/ high
), dan print-content-optimize
( auto
/ photo
/ graphics
/ text
/ text-and-graphics
) dalam PPD printer saat ini. Jadi Anda memiliki akses mudah ke kualitas penuh atau kecepatan printer Anda tanpa perlu berurusan dengan pengaturan opsi khusus printer (opsi asli masih dapat diakses melalui antarmuka admin web).
Kemampuan printer untuk model printer tertentu ("driver" dalam Aplikasi Printer) tidak statis sepanjang masa antrian cetak yang diatur dalam Aplikasi Printer. Pengguna dapat mengonfigurasi melalui halaman di antarmuka admin web aksesori perangkat keras mana (baki kertas tambahan, unit dupleks, pelapis akhir, ...) yang diinstal pada printer dan Aplikasi Printer memperbarui struktur data driver dan dengan ini kemampuan printer. Respons terhadap permintaan IPP get-printer-atribut diperbarui dengan tepat.
PostScript adalah bahasa pemrograman lengkap dan banyak printer PostScript memungkinkan menanyakan pengaturan opsi dan keberadaan aksesori perangkat keras yang dapat diinstal yang menjalankan kode PostScript yang sesuai. Jika suatu pengaturan dapat ditanyakan, pabrikan memasukkan kode PostScript yang diperlukan ke dalam file PPD, bersama dengan opsi yang dapat ditanyakan. Kueri ini didukung oleh antarmuka web Aplikasi Printer.
Perangkat printer yang tersedia ditemukan (dan digunakan) dengan backend CUPS dan bukan dengan backend PAPPL sendiri. Dengan cara ini solusi khusus untuk printer USB dengan masalah kompatibilitas digunakan (dan dapat diedit) dan keluaran PostScript dapat dikirim ke printer melalui IPP, IPPS (terenkripsi!), dan LPD selain soket (biasanya port 9100). Backend SNMP dapat dikonfigurasi (komunitas, cakupan alamat).
Jika Anda memiliki konfigurasi sistem yang tidak biasa atau firewall pribadi, printer Anda mungkin tidak akan ditemukan. Dalam situasi ini entri "Printer Jaringan" yang sepenuhnya manual dikombinasikan dengan kolom nama host/IP dapat membantu.
Pada halaman "Tambahkan file PPD" dalam daftar file PPD pengguna yang telah ditambahkan, tandai file mana yang benar-benar digunakan oleh printer yang telah diatur dalam Aplikasi Printer, untuk menghindari pengguna menghapus file tersebut.
String yang dapat dibaca manusia untuk opsi vendor (Membutuhkan dukungan dari PAPPL: Masalah #58: Dukungan pelokalan)
Internasionalisasi/Lokalisasi (Membutuhkan dukungan PAPPL: Edisi #58: Dukungan lokalisasi)
Pemeriksaan level Tinta SNMP melalui fungsi ps_status() (Membutuhkan dukungan oleh PAPPL: Masalah #83: CUPS melakukan jajak pendapat level tinta IPP dan SNMP melalui backend, PAPPL seharusnya memiliki fungsi untuk ini)
Opsi pembuatan untuk filter cangkir, untuk dibuat tanpa libqpdf dan/atau tanpa libppd, yang pertama akan memungkinkan pembuatan Snap Aplikasi Printer ini tanpa mengunduh dan membuat QPDF
Untuk menjalankan dan menggunakan Aplikasi Printer ini, cukup instal dari Snap Store:
sudo snap install --edge ps-printer-app
Kemudian ikuti petunjuk di bawah ini untuk menyiapkannya.
Untuk membuat Snap sendiri, jalankan di direktori utama repositori ini
snapcraft snap
Ini akan mengunduh semua paket yang diperlukan dan membangun Aplikasi Printer PostScript. Perhatikan bahwa PAPPL (1.0 mendatang) dan filter cup (2.0 mendatang) diambil langsung dari repositori GIT mereka, karena belum ada rilis yang sesuai. Hal ini juga dapat menyebabkan Aplikasi Printer ini tiba-tiba tidak dapat dibangun lagi.
CATATAN: Ada bug di Ubuntu Groovy (20.10) yang mencegahnya membuat Snaps, lihat diskusi ini di forum Snapcraft. Masalahnya sudah terpecahkan tetapi belum masuk ke Groovy.
Versi Ubuntu yang lebih lama (seperti 20.04) atau lebih baru (seperti 21.04) akan berfungsi.
Untuk menginstal Snap yang dihasilkan dijalankan
sudo snap install --dangerous ps-printer-app_1.0_amd64.snap
Aplikasi Printer secara otomatis akan dijalankan sebagai daemon server.
Masuk ke antarmuka web
http://localhost:8000/
Gunakan antarmuka web untuk menambahkan printer. Berikan nama, pilih printer yang ditemukan, lalu pilih merek dan model. Atur juga aksesori yang diinstal, media yang dimuat, dan opsi default. Konfigurasi aksesori dan opsi default juga sering kali dapat disurvei dari printer.
Kemudian cetak file PDF, PostScript, JPEG, Apple Raster, atau PWG Raster dengan
ps-printer-app FILE
atau mencetak dengan CUPS, CUPS (dan juga penelusuran cangkir) temukan dan perlakukan printer yang diatur dengan Aplikasi Printer ini sebagai printer IPP tanpa driver (IPP Everywhere dan AirPrint).
Anda juga dapat menambahkan file PPD tanpa membuat ulang Snap, baik dengan menggunakan tombol "Tambahkan file PPD" di antarmuka web atau dengan menyalin file PPD secara manual:
sudo cp PPDFILE /var/snap/ps-printer-app/common/ppd/
Setelah menyalin (atau menghapus) file PPD secara manual, Anda perlu me-restart server atau di antarmuka web, pada halaman "Tambahkan file PPD" klik tombol "Segarkan" di bagian bawah. Ini menambahkan perubahan pada daftar driver internal.
Pada halaman "Tambahkan Printer" di menu drop-down untuk memilih driver, file PPD yang ditambahkan pengguna ditandai "DITAMBAHKAN PENGGUNA". Saat menyiapkan printer dengan pemilihan driver otomatis, file PPD yang ditambahkan pengguna lebih diutamakan.
PPDFILE
pada baris perintah di atas tidak hanya dapat berupa satu file PPD tetapi sejumlah file PPD tunggal, file .tar.gz
yang berisi PPD (dalam struktur direktori arbitrer) dan executable penghasil PPD yang biasanya dimasukkan ke dalam /usr/lib/cups/driver
. Anda juga dapat membuat struktur subdirektori sembarang di /var/snap/ps-printer-app/current/ppd/
yang berisi jenis file yang disebutkan. Hanya pastikan untuk tidak meletakkan file executable apa pun di sana yang melakukan hal lain selain membuat daftar dan menghasilkan file PPD.
Perhatikan bahwa dengan antarmuka web Anda hanya dapat mengelola PPD individual (tidak dikompresi atau dikompresi dengan gzip
) di /var/snap/ps-printer-app/current/ppd/
itu sendiri. Arsip, executable, atau subdirektori tidak ditampilkan dan unggahan yang sesuai tidak diterima. Hal ini terutama mencegah penambahan executable tanpa hak root.
File PPD apa pun yang ditambahkan harus untuk printer PostScript, karena file PPD non-PostScript ditujukan untuk driver CUPS sehingga memerlukan file tambahan agar dapat berfungsi dan file tersebut tidak didukung oleh Aplikasi Printer ini. Halaman "Tambahkan file PPD" menampilkan peringatan jika file tersebut diunggah.
Melihat
ps-printer-app --help
untuk opsi lainnya.
Gunakan argumen "-o log-level=debug" untuk pencatatan log panjang di jendela terminal Anda.
Anda dapat menambahkan file ke /var/snap/ps-printer-app/common/usb/
untuk aturan kekhasan USB tambahan. Edit file yang ada hanya untuk pengujian cepat, karena file tersebut diganti setiap kali Snap diperbarui (untuk memperkenalkan aturan baru).
Anda dapat mengedit file /var/snap/ps-printer-app/common/cups/snmp.conf
untuk mengonfigurasi penemuan printer jaringan SNMP.
Anda juga dapat melakukan pembangunan "cepat dan kotor" tanpa melakukan snap dan tanpa perlu menginstal PAPPL, cup-filter 2.x, dan pappl-retrofit ke dalam sistem Anda. Anda memerlukan direktori dengan snapshot GIT terbaru dari PAPPL, snapshot GIT terbaru dari cup-filter, dan snapshot GIT terbaru dari pappl-retrofit (masing-masing cabang master). Semuanya perlu dikompilasi ( ./autogen.sh; ./configure; make
), instalasi tidak diperlukan. Instal juga file header dari semua perpustakaan yang diperlukan (menginstal "libcups2-dev" harus melakukannya).
Di direktori dengan ps-printer-app.c jalankan baris perintah
gcc -o ps-printer-app ps-printer-app.c $PAPPL_SRC/pappl/libpappl.a $CUPS_FILTERS_SRC/.libs/libppd.a $CUPS_FILTERS_SRC/.libs/libcupsfilters.a $PAPPL_RETROFIT_SRC/.libs/libpappl-retrofit.a -ldl -lpthread -lppd -lcups -lavahi-common -lavahi-client -lgnutls -ljpeg -lpng16 -ltiff -lz -lm -lusb-1.0 -lpam -lqpdf -lstdc++ -I. -I$PAPPL_SRC/pappl -I$CUPS_FILTERS_SRC/ppd -I$CUPS_FILTERS_SRC/cupsfilters -I$PAPPL_RETROFIT_SRC/pappl/retrofit -L$CUPS_FILTERS_SRC/.libs/ -L$PAPPL_RETROFIT_SRC/.libs/
Ada juga Makefile, tetapi ini memerlukan PAPPL, cup-filter 2.x, dan pappl-retrofit untuk diinstal ke sistem Anda.
Berlari
./ps-printer-app --help
Saat menjalankan versi non-snap, secara default, file PPD dicari di
/usr/share/ppd/
/usr/lib/cups/driver/
/var/lib/ps-printer-app/ppd/
Jalur terakhir digunakan saat menambahkan file PPD menggunakan halaman "Tambahkan file PPD" di antarmuka web.
Anda dapat mengatur variabel lingkungan PPD_PATHS
untuk mencari tempat lain:
PPD_PATHS=/path/to/my/ppds:/my/second/place ./ps-printer-app server
Sederhananya daftar sejumlah jalur yang dipisahkan titik dua ke dalam variabel, selalu yang terakhir digunakan oleh halaman "Tambahkan file PPD". Disarankan untuk membuat skrip pembungkus.
Aplikasi Printer ini menggunakan backend CUPS dan bukan PAPPL, artinya untuk printer USB solusi quirk USB CUPS untuk masalah kompatibilitas digunakan, printer jaringan juga dapat digunakan dengan protokol IPP, IPPS, dan LPD, dan penemuan printer SNMP dapat dikonfigurasi.
Aturan Quirk USB di /usr/share/cups/usb
dan file /etc/cups/snmp.conf
dapat diedit jika diperlukan.
Pastikan Anda telah menginstal CUPS (setidaknya backendnya).
Anda juga memerlukan Ghostscript untuk mencetak pekerjaan PDF.
Untuk akses ke halaman pengujian testpage.ps
gunakan variabel lingkungan TESPAGE_DIR:
TESTPAGE_DIR=`pwd` PPD_PATHS=/path/to/my/ppds:/my/second/place ./ps-printer-app server
atau untuk halaman pengujian yang Anda buat sendiri (PostScript, PDF, PNG, JPEG, Apple Raster, PWG Raster):
TESTPAGE=/path/to/my/testpage/my_testpage.ps PPD_PATHS=/path/to/my/ppds:/my/second/place ./ps-printer-app server
Aplikasi Printer PostScript adalah Hak Cipta © 2020 oleh Till Kamppeter.
Ini berasal dari Aplikasi Printer HP PCL, model kerja pertama dari Aplikasi Printer raster menggunakan PAPPL. Ini tersedia di sini:
https://github.com/michaelrsweet/hp-printer-app
Aplikasi Printer HP PCL adalah Hak Cipta © 2019-2020 oleh Michael R Sweet.
Perangkat lunak ini dilisensikan di bawah Lisensi Apache Versi 2.0 dengan pengecualian untuk mengizinkan tautan ke perangkat lunak GPL2/LGPL2 (seperti CUPS versi lama). Lihat file "LISENSI" dan "PEMBERITAHUAN" untuk informasi lebih lanjut.