CUPS

**CUPS** (önceden **Common UNIX Printing System'in** kısaltması ), bir bilgisayarın bir yazdırma sunucusu olarak hareket etmesine imkan sağlayan Unix benzeri bilgisayar işletim sistemleri için modüler bir yazdırma sistemidir. CUPS çalıştıran bir bilgisayar, istemci bilgisayarlardan yazdırma işlerini kabul edebilen, bunları işleyebilen ve uygun yazıcıya gönderebilen bir ana bilgisayardır.

CUPS, bir yazdırma biriktiricisi ve zamanlayıcıdan, yazdırma verilerini yazıcının anlayacağı bir biçime dönüştüren bir filtre sisteminden ve bu verileri yazdırma aygıtına gönderen bir arka uç sisteminden oluşur. CUPS, yazdırma işlerini ve kuyrukları yönetmek için temel olarak İnternet Printing Protocol (IPP) kullanır. Ayrıca System V ve Berkeley yazdırma sistemleri için geleneksel komut satırı arabirimlerini sağlar ve Berkeley yazdırma sisteminin Line Printer Daemon protokolü için destek ve Server Message Block (SMB) protokolü için sınırlı destek sağlar. Sistem yöneticileri, metin dosyalarını Adobe'nin PostScript Printer Description  (PPD) formatında düzenleyerek CUPS'nin sağladığı aygıt sürücülerini yapılandırabilir. CUPS'yi yapılandırabilen farklı platformlar için bir dizi kullanıcı arabirimi vardır ve yerleşik bir web tabanlı arabirime sahiptir. CUPS, Apache Lisansı altında sağlanan ücretsiz bir yazılımdır.

## Tarih
Easy Software Products'ın sahibi olan Michael Sweet, 1997'de CUPS geliştirmeye başladı ve ilk genel betalar 1999'da ortaya çıktı. CUPS'nin orijinal tasarımı Line Printer Daemon protokolünü (LPD) kullandı, ancak LPD'deki sınırlamalar ve satıcı uyumsuzlukları nedeniyle bunun yerine Internet Printing Protocol (IPP) seçildi. CUPS başlangıçta "The Common UNIX Printing System" olarak adlandırıldı. Bu ad, UNIX ticari markasıyla ilgili yasal sebepler nedeniyle CUPS 1.4 ile başlayarak yalnızca "CUPS" olarak kısaltılmıştır. CUPS, çoğu Linux dağıtımı için varsayılan yazdırma sistemi olarak hızla benimsendi. Mart 2002'de Apple Inc., Mac OS X 10.2 için yazdırma sistemi olarak CUPS'u benimsedi. Şubat 2007'de Apple Inc., baş geliştirici Michael Sweet'i işe aldı ve CUPS kaynak kodunu satın aldı. 20 Aralık 2019'da Michael Sweet, blogunda Apple'dan ayrıldığını duyurdu. 2020'de OpenPrinting organizasyonu projeyi çatalladı ve Michael Sweet üzerinde çalışmaya devam etti.

## Genel bakış

CUPS, yazdırma işlerinin yazıcılara standart bir şekilde gönderilmesini sağlayan bir mekanizma sağlar. Yazdırma verileri, işleri, yazdırma işini yazıcının anlayacağı bir biçime dönüştüren bir *filtre sistemine* gönderen bir *programlayıcıya*  gider. Filtre sistemi daha sonra verileri bir *arka* uca, yani yazdırma verilerini bir aygıta veya ağ bağlantısına gönderen özel bir filtreye iletir. Sistem, verileri hedef yazıcıya uygun bir biçime dönüştürmek için PostScript'i ve verilerin rasterleştirilmesini kapsamlı bir şekilde kullanır.

CUPS, baskı sunucusunda çok sayıda veri formatını işleyebilen standart ve modülerleştirilmiş bir baskı sistemi sunar. CUPS'den önce, kendi yazıcı dillerini ve formatlarını kullanan piyasadaki çok çeşitli yazıcıları barındıracak standart bir yazıcı yönetim sistemi bulmak zordu. Örneğin, System V ve Berkeley yazdırma sistemleri birbirleriyle büyük ölçüde uyumsuzdu ve programın veri biçimini yazdırılabilir bir biçime dönüştürmek için karmaşık komut dosyalarına ve geçici çözümlere ihtiyaç duyuyorlardı. Genellikle yazıcıya gönderilen dosya biçimini algılayamadılar ve bu nedenle veri akışını otomatik ve doğru bir şekilde dönüştüremediler. Ayrıca, merkezi bir sunucu yerine bireysel iş istasyonlarında veri dönüştürme işlemi gerçekleştirilmiştir.

CUPS, yazıcı üreticilerinin ve yazıcı sürücüsü geliştiricilerinin, yazdırma sunucusunda yerel olarak çalışan sürücüleri daha kolay oluşturmasına olanak tanır. İşlem, sunucuda gerçekleşir ve diğer Unix yazdırma sistemlerinden daha kolay ağ tabanlı yazdırmaya olanak tanır. Samba yüklendiğinde, kullanıcılar uzak Windows bilgisayarlarındaki yazıcıları adresleyebilir ve ağ üzerinden yazdırmak için genel PostScript sürücüleri kullanılabilir.

### Scheduler
CUPS scheduler, HTTP/1.1 üzerinden İnternet Yazdırma Protokolü'nü (IPP) uygular. Bir yardımcı uygulama (cups-lpd), Line Printer Daemon protokolü (LPD) isteklerini IPP'ye dönüştürür. Zamanlayıcı aynı zamanda yazdırma işlerini yönetmek, sunucunun konfigürasyonunu yapmak ve CUPS ile ilgili dokümantasyon için web tabanlı bir arayüz sağlar.

Bir *yetkilendirme* modülü, hangi IPP ve HTTP mesajlarının sistemden geçebileceğini kontrol eder. IPP/HTTP paketleri yetkilendirildikten sonra, gelen bağlantıları dinleyen ve işleyen *istemci* modülüne gönderilir. İstemci modülü, web tabanlı yazıcıları, sınıfları ve iş durumu izleme ve yönetimini desteklemek için gerektiğinde harici CGI programlarını yürütmekten de sorumludur. Bu modül isteklerini işledikten sonra, bir istemcinin HTTP sunucusunda herhangi bir erişim denetimini veya kimlik doğrulamasını atlamasını önlemek için Tekdüzen Kaynak Tanımlayıcı (URI) doğrulaması gerçekleştiren *IPP* modülüne gönderir. URI, bir ağdaki soyut veya fiziksel bir kaynağa atıfta bulunmak için kullanılabilecek bir adı veya adresi belirten bir metin dizesidir.

Zamanlayıcı, yazıcı sınıflarına izin verir. Uygulamalar, bir sınıftaki yazıcı gruplarına istek göndererek, zamanlayıcının işi o sınıftaki ilk uygun yazıcıya yönlendirmesine olanak tanır. Bir *iş* modülü, yazdırma işlerini yönetir, bunları son dönüştürme ve yazdırma için filtreye ve arka uç işlemlerine gönderir ve bu işlemlerden gelen durum mesajlarını izler.

CUPS programlayıcı, yapılandırma dosyalarını ayrıştıran, CUPS veri yapılarını başlatan ve CUPS programını başlatan ve durduran bir *yapılandırma* modülü kullanır. Yapılandırma modülü, yapılandırma dosyası işleme sırasında CUPS hizmetlerini durduracak ve ardından işleme tamamlandığında hizmeti yeniden başlatacaktır.

Bir *günlük kaydı* modülü, erişim, hata ve sayfa günlük dosyaları için zamanlayıcı olaylarının günlüğünü işler. *Ana* modül, istemci bağlantıları için zaman aşımlarını ve G/Ç isteklerinin gönderilmesini, sinyallerin izlenmesini, alt işlem hatalarının ve çıkışlarının ele alınmasını ve gerektiğinde sunucu yapılandırma dosyalarının yeniden yüklenmesini yönetir.

Zamanlayıcı tarafından kullanılan diğer modüller şunları içerir:

* Yazdırma verilerini bir yazdırma aygıtı için uygun bir biçime dönüştüren filtreleme işleminde kullanılan Çok Amaçlı İnternet Posta Uzantıları (MIME) türünü ve dönüştürme veritabanını işleyen *MIME* modülü;
* Postscript Yazıcı Açıklaması (PPD) dosyalarının bir listesini işleyen bir *PPD* modülü;
* sistemde mevcut olan cihazların listesini yöneten bir *cihaz* modülü;
* CUPS içindeki yazıcıları ve PPD'leri yöneten bir *yazıcı* modülü.

### Filtre sistemi

CUPS, baskı sunucusunda çeşitli veri biçimlerini işleyebilir. Yazdırma işi verilerini bir dizi *filtre* aracılığıyla yazıcının son diline/biçimine dönüştürür. Dosya biçimlerini tanımlamak için MIME türlerini kullanır.

#### MIME veritabanları
CUPS sistemi, yazdırma işini zamanlayıcıya atadıktan sonra, CUPS filtre sistemine geçirilir. Bu, verileri yazıcı için uygun bir biçime dönüştürür. Başlatma sırasında, CUPS arka plan programı iki MIME veritabanı yükler: CUPS'nin veri kabul edebileceği bilinen dosya türlerini tanımlayan `mime.types` ve her bir belirli MIME türünü işleyen programları tanımlayan `mime.convs` .

`mime.types` dosyası sözdizimine sahiptir:

`mimetype   { [file-extensions] | [pattern-match] }`

Örneğin, bir HTML dosyasını algılamak için aşağıdaki giriş uygulanabilir:

`text/html    html htm \`

: `printable(0,1024) + (string(0,"  ") string(0,"<!` `DOCTYPE"))`

İkinci satır, dosyadaki metnin ilk kilobaytının yazdırılabilir karakterler içerdiğini ve bu karakterlerin HTML işaretlemesi içerdiğini belirleyerek dosya içeriğini belirtilen MIME türüyle eşleştirir. Yukarıdaki model eşleşirse, filtre sistemi dosyayı MIME tipi metin/html olarak işaretler.

`mime.convs` dosyası sözdizimine sahiptir:

`source destination cost program`

*Kaynak* alan, `mime.types` dosyası aranarak belirlenen MIME türünü belirtirken, *hedef* alan istenen çıktı türünü listeler ve hangi programın kullanılması gerektiğini belirler. Bu aynı zamanda `mime.types` dosyasından alınır. *Maliyet* alanı, bir dosyayı dönüştürürken filtre setlerinin seçiminde yardımcı olur. Son alan olan *program*, veri dönüştürmeyi gerçekleştirmek için hangi filtre programının kullanılacağını belirler.

Bazı örnekler:
 metin/düz uygulama/postscript 50 texttops
 application/vnd.cups-postscript application/vnd.cups-raster 50 pstoraster
 image/* application/vnd.cups-postscript 50 imagetops
 image/* application/vnd.cups-raster 50 imagetoraster

#### Filtreleme işlemi
Filtreleme işlemi, altı bağımsız değişkenle önceden biçimlendirilmiş girdi verilerini alarak çalışır:

# yazdırma işinin iş kimliği
# Kullanıcı adı
# iş adı
# yazdırılacak kopya sayısı
# herhangi bir yazdırma seçeneği
# dosya adı (ancak standart girdiden yeniden yönlendirildiyse bu gereksizdir).

Daha sonra MIME veritabanlarının kullanımı yoluyla girilen verinin türünü ve kullanılacak filtreyi belirler; örneğin, görüntü verileri belirli bir filtre aracılığıyla algılanır ve işlenir ve HTML verileri başka bir filtre aracılığıyla algılanır ve işlenir.

CUPS, sağlanan verileri PostScript verilerine veya doğrudan tarama verilerine dönüştürebilir. PostScript verilerine dönüştürülürse, ön filtre adı verilen ve PostScript verilerini başka bir PostScript dönüştürücü aracılığıyla çalıştıran ek bir *filtre* uygulanır, böylece yazdırılacak sayfa aralıklarını seçme, *n* -up modunu ayarlama ve diğer aygıt- belirli şeyler. Ön filtreleme yapıldıktan sonra, veriler PostScript yazıcı kullanılıyorsa doğrudan bir CUPS arka ucuna gönderilebilir veya linuxprinting.org tarafından Foomatic gibi başka bir filtreye geçirilebilir. Alternatif olarak, PostScript'i bir ara *CUPS-raster* biçimine dönüştüren Ghostscript'e geçirilebilir. Ara tarama formatı daha sonra tarama verilerini yazıcıya özel formata dönüştüren son bir filtreye geçirilir. CUPS ile birlikte gelen varsayılan filtreler şunları içerir:

* PCL'ye raster
* ESC/P veya ESC/P2'ye raster (bir Epson yazıcı dili, artık büyük ölçüde yeni ESC/P-Raster formatının yerini almıştır)
* Dymo'ya raster (başka bir yazıcı şirketi).
* Zebra Programlama Dili veya ZPL'ye raster (bir Zebra Technologies yazıcı dili)

 other proprietary languages like GDI or SPL (Samsung Printer Language) are supported by Splix, a raster to SPL translator.

Bununla birlikte, birkaç başka alternatif CUPS ile entegre olabilir. HPLIP (önceden HP-IJS olarak bilinir), HP yazıcılar için Linux+CUPS sürücüleri sağlar, Gutenprint (önceden Gimp-Print olarak bilinir), (çoğunlukla) mürekkep püskürtmeli yazıcılar için bir dizi yüksek kaliteli yazıcı sürücüsüdür ve TurboPrint for Linux başka bir ürün yelpazesine sahiptir. çok çeşitli yazıcılar için kaliteli yazıcı sürücüleri.

### Arka uçlar
Arka uçlar, CUPS'nin yazıcılara veri gönderme yöntemleridir. CUPS için kullanılabilen birkaç arka uç vardır: paralel, seri ve USB bağlantı noktaları, cup-pdf  PDF Sanal Yazdırma ve ayrıca IPP, JetDirect (AppSocket), Line Printer Daemon ("LPD") aracılığıyla çalışan ağ arka uçları ve SMB protokolleri.

CUPS 1.4'teki yeni bir `mdns` arka ucu, Bonjour (DNS-SD ) tabanlı yazıcı keşfi sağlar. CUPS 1.6'da, Avahi kullanılarak Bonjour yazıcı keşfi ve paylaşımı da desteklenir.

## Uyumluluk
CUPS, hem System V hem de Berkeley yazdırma komutlarını sağlar, böylece kullanıcılar CUPS aracılığıyla yazdırma için geleneksel komutlarla devam edebilirler. CUPS, standart IPP bağlantı noktası olan 631 numaralı bağlantı noktasını (TCP ve UDP) kullanır ve isteğe bağlı olarak LPD yazdırmayı desteklemek için cup-lpd yardımcı programını kullanan inetd, launchd, Solaris Service Management Facility veya xinetd tarafından 515 numaralı bağlantı noktasında kullanılır. CUPS kurulduğunda, `lp` System V yazdırma sistemi komutu ve `lpr` Berkeley yazdırma sistemi komutları uyumlu programlar olarak yüklenir. Bu, CUPS için standart bir arabirim sağlar ve bu yazdırma sistemlerine dayanan mevcut uygulamalarla maksimum uyumluluğa izin verir.

## Kullanıcı arayüzü araçları
CUPS kurulumuna yardımcı olacak çeşitli araçlar mevcuttur.

### CUPS web tabanlı yönetim arayüzü

Tüm platformlarda CUPS, 631 numaralı bağlantı noktasında çalışan web tabanlı bir yönetim arabirimine sahiptir. Özellikle yazdırma işlerini izlemesi ve uzaktan yazdırma kuyrukları ve yazıcılar eklemesi gereken kuruluşlara yardımcı olur.

CUPS 1.0, web tarayıcıları için basit bir sınıf, iş ve yazıcı izleme arabirimi sağladı.

CUPS 1.1, bu arayüzü, kullanıcıların sınıfları, işleri ve yazıcıları eklemesine, değiştirmesine, silmesine, yapılandırmasına ve kontrol etmesine izin veren gelişmiş bir yönetim arayüzü ile değiştirdi.

CUPS 1.2 ve sonraki sürümleri, daha iyi okunabilirlik ve tasarım, otomatik olarak keşfedilen yazıcılar için destek ve sistem günlüklerine ve gelişmiş ayarlara daha iyi erişim sağlayan yenilenmiş bir web arayüzü sağlar.

### GNOME

GNOME 3'ten başlayarak GNOME'da CUPS yazdırma, GNOME Çekirdek Uygulamalarının bir parçası olan Ayarlar uygulamasında ele alınmıştır. GUI, CUPS yazıcıları ekleyebilir ve CUPS yazıcılarını ve kuyruklarını yönetebilir. GNOME 3'ten önce, bu görevleri gerçekleştirmek için GNOME Yazdırma Ayarları (eski adıyla CUPS Manager) kullanılıyordu.

GNOME'un araç takımı GTK+, 2006'da piyasaya sürülen 2.10 sürümünde CUPS'ye dayalı entegre baskı desteği içeriyordu.

### KDE

KDE için KDEPrint iskeleti, CUPS arayüzü olarak işlev gören ve sınıfların, yazdırma kuyruklarının ve yazdırma işlerinin yönetimine izin veren çeşitli GUI araçları içerir; diğer özelliklerin yanı sıra yeni yazıcılar eklemeye yardımcı olacak bir yazıcı sihirbazı içerir. KDEPrint ilk olarak KDE 2.2'de ortaya çıktı.

KDEPrint, en iyi desteklenenlerden biri olan CUPS ile birkaç farklı yazdırma platformunu destekler. KDE, *qtcups'taki* önceki bir yazdırma desteği sürümünün yerini almıştır ve bu KDE modülüyle geriye dönük olarak uyumludur.   Bir diyalog kutusu programı olan *kprinter*, işleri yazdırma aygıtına göndermek için ana araç olarak hizmet eder; komut satırından da başlatılabilir. KDEPrint, herhangi bir işi CUPS'ye teslim edilmeden önce önceden filtrelemek veya dosyaları PDF'ye dönüştürmek gibi işleri tek başına ele almak için bir sistem içerir. Bu filtreler, bir çift Desktop/ XML dosyası tarafından tanımlanır.

KDEPrint'in ana bileşenleri şunları içerir:

* yazıcı özelliklerinin değiştirilmesine izin veren bir Yazdırma İletişim kutusu
* Yazıcı Ekleme Sihirbazı aracılığıyla yazıcı ekleme ve kaldırma gibi yazıcıların yönetimine izin veren bir Yazdırma Yöneticisi
* bekletme/bırakma, iptal etme ve başka bir yazıcıya taşıma gibi yazıcı işlerini yöneten bir İş Görüntüleyici/Yöneticisi
* bir CUPS yapılandırma modülü (KDE'ye entegre)

### Mac OS X
Mac OS X 10.5'te yazıcılar, Sistem Tercihleri'ndeki Yazdırma ve Faks panelinde ve yazdırma kuyruklarını görüntüleyen ve yazıcılar kurulduktan sonra ek yapılandırmaya izin veren yazıcı proxy uygulamalarında yapılandırılır. Mac OS X'in önceki sürümlerinde, Yazdırma ve Faks tercih bölmesinin önceki sürümlerinde bulunmayan yapılandırma seçeneklerini sağlayan Yazıcı Kurulum Yardımcı Programı da vardı.

### PrinterSetup
PrinterSetup sistemi CUPS kuyruklarını yönetebilir. Her bir yazdırma kuyruğunu açıklamak için bir metin dosyası atama yaklaşımını benimser. Bu 'PrinterSetupFiles' daha sonra 'PrinterSetupLists' adı verilen diğer metin dosyalarına eklenebilir. Bu, yazıcıların mantıksal olarak gruplandırılmasını sağlar.   PrinterSetup projesi emekleme aşamasında kalır.

### Red Hat Linux/Fedora

Red Hat Linux 9 ile başlayarak, Red Hat, CUPS tabanlı ve GNOME'a entegre edilmiş entegre bir yazdırma yöneticisi sağladı. Bu, Microsoft Windows'un kullandığına benzer bir kullanıcı arabirimi aracılığıyla yazıcıların eklenmesine izin verdi; burada yeni bir yazıcı *ekleme sihirbazı* kullanılarak yeni bir yazıcı eklenebiliyordu, ayrıca yüklü yazıcıların listesini içeren bir pencerede varsayılan yazıcı özelliklerini değiştiriyordu. İşler ayrıca bir yazdırma yöneticisi kullanılarak başlatılıp durdurulabilir ve yazıcı simgesine sağ tıklandığında açılan bir bağlam menüsü kullanılarak yazıcı duraklatılabilir.

Eric Raymond, *The Luxury of Cehalet* adlı eserinde bu sistemi eleştirmiştir. Raymond, CUPS'yi Fedora Core 1 yazdırma yöneticisini kullanarak yüklemeye çalışmıştı, ancak bunu sezgisel bulmadı; arayüz tasarımcılarını kullanıcının bakış açısıyla tasarlamadıkları için eleştirdi. Yazıcı kuyrukları fikrinin açık olmadığını çünkü kullanıcılar kendi yerel bilgisayarlarında kuyruklar oluşturduklarını, ancak bu kuyruklar aslında CUPS sunucusunda oluşturulduğunu buldu.

Ayrıca, ağ bağlantılı CUPS (IPP), ağ bağlantılı Unix (LPD ), ağ bağlantılı Windows (SMB ), ağ bağlantılı Novell (NCP ) veya ağ bağlantılı JetDirect arasından seçim yapabileceği için çok sayıda sıra tipi seçeneği kafa karıştırıcı buldu. Yardım dosyasını tek başına yararsız ve kullanıcının ihtiyaçlarıyla büyük ölçüde alakasız buldu. Raymond, Linux masaüstlerinde kullanıcı arayüzü tasarımının yeniden düşünülmesi ve daha dikkatli bir tasarım gerektirdiğini göstermek için CUPS'u genel bir konu olarak kullandı. dedi ki:Buradaki büyük sorun, yapılandırma sihirbazının tüm onaylanmış ritüelleri (standartlaştırılmış tıklama düğmelerine sahip GUI, bir tarayıcıda açılır yardım, vb.) yapmasıdır, ancak bunların elde etmesi beklenen merkezi özniteliğe sahip olmamasıdır: keşfedilebilirlik. Yani, arayüzdeki her noktanın, daha sonra ne yapacağınızı öğrenebileceğiniz istemleri ve kendisine bağlı eylemlerin kalitesi. Projeniz bu kaliteye sahip mi?

### ESP Print Pro
CUPS'un orijinal yaratıcıları olan Easy Software Products, bir görsel arayüz oluşturdu, birçok yazıcı için destek sağladı ve bir PostScript RIP uyguladı. ESP Print Pro, Windows, UNIX ve Linux üzerinde çalıştı, ancak artık mevcut değil ve bu ürün için destek 31 Aralık 2007'de sona erdi.

## Ayrıca bakınız

* Foomatic
* Gutenprint
* HP Linux Imaging and Printing
* Lp (Unix)
* LPRng
* Scanner Access Now Easy
* Spooling
* Xprint

## Kaynakça

## Konuyla ilgili yayınlar

* CUPS Filtreleme Sisteminin Tasarımı — Mac OS X ("Jaguar") bağlamı dahil  . *LinuxPrinting.org* . 5 Ocak 2005'te erişildi.
* KDE . *[https://web.archive.org/web/20050207054956/http://printing.kde.org/info/ KDEPrint bilgileri]* . KDE-baskı web sitesi. 14 Ocak 2005'te erişildi.
* Linux'ta Yazıcılar Nasıl Yönetilir , Linux.com, 2015-04-27.

## Dış bağlantılar

* "CUPS". Freecode.
* OpenPrinting 
* Universal Plug and Play – Printer Device V 1.0 and Printer Basic Service V 1.0