Linux Foundation projesi

Bu sayfada, Google Dokümanlar Sezonu için kabul edilen bir teknik yazım projesinin ayrıntıları yer almaktadır.

Proje özeti

Açık kaynak kuruluşu:
The Linux Foundation
Teknik yazar:
PIYUSHgoyal16
Projenin adı:
Yazıcı Uygulamalarındaki Yazıcı/Tarayıcı Sürücüleri İçin Eğitim ve Tasarım Yönergeleri
Proje uzunluğu:
Standart uzunluk (3 ay)

Proje açıklaması

Genel Bakış

Yazıcıya özgü filtrelerden ve dosya sisteminin belirli dizinlerine bırakılması gereken PPD (PostScript Yazıcı Açıklaması, yazıcı özelliklerini ve hangi filtrelerin çağrılacağını açıklar) dosyalarından oluşan klasik yazıcı sürücüleri, IPP ağ yazıcısının taklidi olan Yazıcı Uygulamaları ile değiştirildi.

Modern genel amaçlı yazıcıların çoğu, sürücüsüz yazdırmaya olanak tanıyan IPP yazıcılardır. Kendi reklamlarını DNS-SD üzerinden yaparlar, istemciler IPP istekleri aracılığıyla bu cihazların özellik bilgilerini alabilir ve yazdırma işleri için standart veri biçimlerini kullanırlar. Bu işlevi sağlamayan yazıcılar (genellikle eski veya özel yazıcılar) için yazıcı sürücüsü gerekir.

Yazıcı Uygulaması, desteklenen yazıcıları algılayan ve bu yazıcıları yerel ana makinede IPP Everywhere yazıcısı olarak tanıtan bir arka plan programıdır. Yazıcı Uygulamaları, desteklediği yazıcılara gelen işleri yazdıran yazılımı içerir. Bu yazılım, verileri yazıcının ana diline dönüştürür ve istek üzerine istemcilere yazıcının özellikleri hakkında bilgi sağlar. Yazıcı uygulamasında gerçek bir ağ yazıcısı gibi bir web yönetim arayüzü bile vardır.

Bildiğimiz gibi, Linux korumalı alanlı pakete (örneğin, Snap) ve yazdırma da bu yönde ilerliyor. Korumalı alandaki bir paket oluşturulduktan sonra dizin içeriğini değiştiremeyiz. Sistemimiz artık modüler değil. Yüklenecek yazıcı sürücü paketini seçemiyoruz. Yazıcı uygulamaları, bu modülerlik sorununu giderir ve bize yazıcı sürücülerinde olduğu gibi aynı özgürlüğü sağlar.

Snap'lerdeki yazıcı ve tarayıcı sürücüleri, yalnızca Snap'lenmiş CUPS ve Snap'lenmiş uygulama için gerekli değildir. Tamamen klasik sistemlerde de çalışırlar ancak klasik paketlenmiş sürücülerin aksine işletim sistemi dağıtımına bağlı değildirler. Bir yazıcı sürücüsü Snap'i oluşturursunuz ve bu Snap, snapd çalıştıran tüm OS dağıtımlarında çalışır. Yazıcı sürücülerini her dağıtım (ve bunların sürümleri) için ayrı ayrı paketlemeye ve bağımlılık sorunlarına takılmaya gerek yoktur. Diğer bir avantaj da PostScript yazıcılardan gelen eski PPD dosyası kavramının kullanımdan kaldırılmasıdır. Ayrıca, CUPS sistemine dosya bırakmak yerine CUPS sistemini ve yazıcı sürücüsünü bir IP bağlantısıyla birleştirerek hem CUPS sistemini hem de yazıcı uygulamasını ayrı korumalı paketlerde tutabilirsiniz.

Görevim, bu paketleme biçimi için yazıcılar ve tarayıcılara ait sürücülerin nasıl tasarlanacağını ve Snap'lere nasıl paketleneceğini açıklamak olacak. Amacımız, yazıcı veya tarayıcı sürücüleri yazan herkese (özellikle de donanım üreticilerine) gelecekte bunu doğru şekilde yapmalarına yardımcı olmaktır.

Yazıcı Uygulaması'nın iş akışı, verilen akış şemasıyla özetlenebilir:

Bu tür Yazıcı/Tarayıcı Uygulamaları oluşturmanın temeli, bu konudaki çoğu işlevi sağlayan bir kitaplık olan PAPPL'dir. Ayrıca, Yazıcı Uygulamaları için kullanılacak kodu içeren cups-filters de vardır. Bu kavram, esas olarak bu yılki Google Summer of Code'da geliştirilmeye devam ediyor. Ancak doküman yazma döneminin başladığı 14 Eylül'de GSoC'nin kodlama dönemi sona ermiş oluyor. OpenPrinting'in bu eğitime ihtiyacı da tam bu dönemde ortaya çıkıyor.

Yazıcı Sürücüleri Şablonu İŞ Verilerinin Yapısını Tanımlama

Medya Boyutları İçin Sabit Dizi Tanımlama

İşlevleri tanımlama i) Geri çağırma veya init Sürücü adını, sürücü verilerini vb. kabul eden ve sürücü özelliklerini buna göre ayarlayan bir boole işlevi. Sağlanan ayrıntılar uygunsa doğru değerini, aksi takdirde yanlış değerini döndürür.

ii) İş kabul eden Boole işlevini, işin seçeneklerini ve cihazı yazdırma. Bir dosyayı yazdırır ve başarılı olduğunda doğru, başarısız olduğunda yanlış değerini döndürür.

iii) rendjob: İşi, iş ve cihaz seçeneklerini kabul eden boole işlevi. İşi sonlandırır ve başarılı olduğunda true (doğru), başarısız olduğunda false (yanlış) değerini döndürür.

iv) rendpage İşi, iş seçeneklerini, cihazı ve sayfa numarasını kabul eden boole işlevi. Sayfayı sonlandırır ve başarılı olduğunda true, başarısız olduğunda false değerini döndürür.

v) rstartjob İşi, iş ve cihaz seçeneklerini kabul eden Boolean işlevi. İşi başlatır ve başarılı olduğunda true (doğru), başarısız olduğunda false (yanlış) değerini döndürür.

vi) rstartpage İşi, iş seçeneklerini, cihazı ve sayfa numarasını kabul eden boole işlevi. Sayfayı başlatır ve başarılı olduğunda true (doğru), başarısız olduğunda false (yanlış) değerini döndürür.

vii) rwrite: İşi, iş seçeneklerini, cihazı, satır numarasını ve karakter dizisini kabul eden boole işlevi. Satırı yazar ve başarısızlık durumunda doğru, yanlış değerini döndürür. viii) tanımlama (verilen işleme göre yazıcıların tanımlanmasına yardımcı olur), sıkıştırma(Bir grafik satırını sıkıştır) vb. gibi isteğe bağlı işlevler