OpenPrinting CUPS ile Raspberry Pi 4 Üzerinde USB Etiket Yazıcısı Kullanımı(Sürücüsüz | DRIVERLESS PRINTING)

Mehmet Zantur
5 min readFeb 14, 2024

--

https://www.staneales.com

Uzun bir aradan sonra yeniden merhaba. Bu yazımda yine ihtiyaçtan ötürü çözdüğüm bir sorundan bahsedeceğim.

Raspberry Pi 4 üzerinde USB’den bağladığım bir etiket yazıcısını kullanmam gerekiyordu. Yapmak istediğim şey; etiket tasarım programlarından birinde oluşturulan .prn uzantılı bir dosyayı, etiket üzerine yazdırmaktı. Fakat ana malzemeler ARM tabanlı bir cihaz, USB bağlantısı ile bağlanan bir yazıcı ve Linux tabanlı bir işletim sistemi olduğu için kullanım ve konfigürasyon işlemlerinde mutlaka bazı sıkıntılar çıkacak düşüncesi birden zihnimde istemsizce beliriverdi. :)

Windows işletim sisteminde de önceden USB ile bağlanan cihazlarda driver problemleri ile karşı karşıya kalabiliyorduk fakat artık çoğu cihaz tak çalıştır mantığında kullanıldığı için artık driver ihtiyacı çok fazla hissetmiyoruz. Ama Linux dağıtımı bir işletim sisteminde durumlar biraz değişiyor. Şimdi neler yaptım ve nelerle karşılaştım bunlardan bahsetmek istiyorum.

Bu süreçte kullandığım etiket yazıcısı TSC markalı TTP-244CE modelidir. Yazıcıyı USB bağlantısı ile Raspberry Pi 4 cihazına bağladıktan sonra çıktı almak için çeşitli yöntemler denemeye başladım fakat denediğim yöntemler başarısız oldu. Sanırım bir driver paketine ihtiyacım var diye düşünmeye başladım ve gerekli araştırmaları yaptım. Raspberry Pi 4 cihazında kullanmam gerektiği için ARM tabanlı bir driver a ihtiyacım vardı. TSC’nin resmi sitesinde ARM tabanlı elimdeki modele uygun bir driver bulamadım ne yazık ki. Hal böyle olunca araştırmalara biraz daha devam ettim. Yolum bir şekilde CUPS ile kesişti.

Peki nedir bu CUPS?

CUPS’dan kısaca bahsedecek olursam; OpenPrinting tarafından Linux ve diğer Unix benzeri işletim sistemleri için geliştirilen, mevcut standartlara dayalı, açık kaynaklı yazdırma sistemi olarak tanımlanmakta. İlk olarak 1997 de Michael R Sweet tarafından geliştirilmeye başlanmış ve ilk beta sürümü 1994 de yayınlanmış. Daha sonra Apple 2002 yılında macOS için CUPS’u lisanslamış ve Şubat 2007 de Apple CUPS’u satın almış. Devamında da CUPS’u açık kaynak olarak geliştirmeye devam etmesi için Michael’ı işe almış. Aralık 2019'da Michael, Apple’dan ayrılmış ve Eylül 2020'de OpenPrinting geliştiricileri ile bir araya gelmiş. Bu noktada CUPS projesi Apple CUPS ve OpenPrinting CUPS olmak üzere ikiye ayrılmış. Apple CUPS macOS ve IOS için Apple tarafından geliştirilmeye devam edilen bir proje, OpenPrinting CUPS ise OpenPrinting topluluğu tarafından tüm işletim sistemleri için geliştirilmeye devam edilen CUPS sürümüdür. Her iki projenin de github repolarına aşağıdaki linklerden ulaşabilirsiniz.

Apple CUPS: GitHub — apple/cups: Apple CUPS Sources

OpenPrinting CUPS: GitHub — OpenPrinting/cups: OpenPrinting CUPS Sources

CUPS, yerel ve ağ yazıcılarına yazdırmayı desteklemek için IPP Everywhere (Internet Printing Protocol) kullanmakta. Bu protokol aslında arka tarafta HTTP üzerinden çalışmaktadır. Yani bir IPP isteğinde bulunmak = yazdırılmak istenen bir dosyayı binary olarak HTTP POST yöntemiyle bir istekte bulunmak diyebiliriz. En önemli ayrıntı da driver a ihtiyaç olmadan aynı ağda veya USB den bağlı yazıcıların kullanılmasını sağlayan bir PWG(Printing Working Group) standardıdır. Detaylı bilgi için buraya gidebilirsiniz.

İşin hikaye kısmı bu kadardı, şimdi ise sıra adımlarda.

Yazıcıyı USB ile Raspberry Pi ye bağladıktan sonra Raspberry Pi OS son sürümlerde birlikte CUPS zaten gelmekte. Ekstra bir kurulum yapmaya gerek kalmadan kullanabiliyoruz. CUPS’un bir web arayüzü var. Yazıcı tanımlamasını bu arayüzü kullanarak yapıyoruz. Arayüze http://localhost:631 adresinden ulaştığınızda sizi aşağıdaki gibi bir ekran karşılayacak. Arayüze girmeden önce terminal ekranından aşağıdaki komutla kullanıcınıza bu arayüzde yetkilendirme yapmamız gerektiğini unutmayın. (Benim kullanıcı adım “pi”)

sudo usermod -a -G lpadmin pi

Ben bu denemeyi yaptığım tarihteki(14.02.2024) son versiyon olan CUPS 2.4.2 versiyonunu kullandım. Hatırladığım kadarıyla 2.2 versiyonunda yazıcıyı görmemişti.

Arayüzdeki menüden Administration ekranından “Add Printer” butonuna tıklayarak yazıcı tanımlama işlemine başlıyoruz. Aşağıdaki ekranda bağlı olan yazıcımız TSC’yi listeden seçerek “Continue” butonu ile bir sonraki sayfaya geçiyoruz.

Aşağıdaki ekranda herhangi bir değişiklik yapmadan yine “Continue” diyerek sonraki sayfaya geçiyoruz.

Aşağıdaki ekranda da yazıcımız için genel bir sürücü seçimi yapıyoruz. Burada “Generic” seçeneğini seçip “Continue” diyoruz.

Aşağıdaki ekranda da Model olarak “Generic IPP Everywhere Printer” seçeneğini seçerek “Add Printer” butonuna tıklıyoruz ve tanımlama işlemini böylece bitirmiş oluyoruz. Farkındaysanız TSC’ye ait ne özel bir driver yükledim, ne bir ppd dosyası gösterdim, ne de herhangi bir özel seçim yaptım. İşte CUPS’un yeteneği burada ortaya çıkıyor.

Artık “Printers” sayfasında yazıcımız ile ilgili bilgileri görüntüleyebiliriz.

Sıra geldi yazdırma işlemini gerçekleştirmeye…

Yazdırmak istediğim .prn uzantılı dosya içeriği:

I8,A,001

Q304,024
q831
rN
S4
D7
ZT
JF
OD
R156,0
f100
N
A495,48,2,4,1,1,N,”ICERIK_1"
A495,182,2,4,1,1,N,”ICERIK_2"
A495,206,2,4,1,1,N,”ICERIK_3"
A494,232,2,4,1,1,N,”ICERIK_4"
A493,256,2,4,1,1,N,”ICERIK_5"
A494,282,2,4,1,1,N,”ICERIK_6"
X11,9,8,511,297
P1

Aşağıdaki ekran görüntüsünde görüldüğü üzere, terminal ekranında önce lpinfo -v ile cihaz üzerinde bağlantıları listeledim. Daha sonra lpstat -p ile tanımlı ve kullanılabilir yazıcımı listeledim. Ardından lpadmin -d TSC_TTP-244CE komutu ile varsayılan yazıcımı belirledim(yazıcının name bilgisini yukarıdaki ekranda görebilirsiniz.) lpstat -d komutu ile varsayılan yazıcımı kontrol ettim. Son olarak da lp -o raw mzantur.prn komutu ile mevcut prn uzantılı dosyamı yazıcıdan yazdırdım.

Final:

OpenPrinting CUPS ile ilgili tüm detaylara buradan ulaşabilirsiniz.

Umarım faydalı olur, görüşmek üzere, hoşça kalın.

--

--

Mehmet Zantur
Mehmet Zantur

Written by Mehmet Zantur

Software Development Chief & Team Lead at Wagner Kablo — A Computer Engineer Fall In Love With Software Development

No responses yet