Linux'ta LPRNG ile Yazıcı Yönetimi

Eyl 06, 2013

Linux'ta yazdırma işlemleri işletim sistemi ile birlikte gelen LPD ya da CUPS gibi programlar aracılığı ile yapılmaktadır. Bu programlar ve Samba sayesinde Linux, bir yazıcı sunucusu gibi de çalışabilmektedir. Biz bu yazımızda LPRng programını inceleyeceğiz.

Çoğu eski sürüm Linux işletim sistemleri, Berkeley Üniversitesi tarafından geliştirilen yazıcı programı LPD' yi kullanmaktadır. Bu program sorunsuz çalıştığı halde birçok eksiği de bulunmaktadır. Bu programa alternatif olarak Astart Technologies tarafından geliştirilen LPRng daha iyi bir çözüm sunmaktadır. Bu program Berkeley tarafından geliştirilen programın tüm özelliklerinin üstüne yazdırılan sayfa bilgisini tutma, bir kuyruktaki isteği diğer kuyruğa atma, kuyruğu yeniden sıralama, yazıcılara kullanıcı bazında izin verebilme, yük dağılımı vb. birçok özelliği bünyesinde bulundurmaktadır.

LPRng temini ve kurulumu:

LPRng yazılımının en son sürümü resmi ftp sitesinden çekilebilir. LPRNG'nin son sürümü rpm formatında bulunmaktadır. LPRNG.[sürüm_numarası].rpm dosyası indirilir ve 'rpm –i LPRNG.[son_sürüm].rpm' komutu ile kurulur. Kurulum bittikten sonra '/etc/init.d/lpd start' komutu ile lpd (Linux Printer Daemon) servisi başlatılır.

Linux'a Yazıcı Tanıtımı

Grafik arayüz kullanarak yazıcı tanıtmak

Linux da kullanılacak yazıcılar /etc/printcap dosyasında tanımlanırlar. Çoğu Linux sürümü ile birlikte X-Window 'da çalışan bir grafik ara yüzü ile yeni yazıcı tanımlaması yapılabilir. Çok kullanılan bir Linux dağıtımı olan RedHat ile birlikte RedHat Printer gelmektedir.

Yeni bir yazıcı eklemek için Add (Ekle) düğmesi kullanılır. Bu düğmeye basıldığında eklenecek yazıcının konumu ile ilgili bir pencere açılmaktadır.

Eğer yazıcı direk olarak bilgisayara bağlı ise Local Printer (Yerel Yazıcı) seçilmelidir. Bu durumda bilgisayarda bulunan yazıcı portları aranır ve bulunan portlardan hangisinin yazıcıya bağlı olduğu sorulur.
Eğer yazıcı başka bir Unix makinede veya direk olarak ağa bağlı ise Remote Unix (lpd) Queue (Uzak Unix (lpd) Kuyruğu) seçeneği seçilmelidir. Bu durumda yazıcının bağlı olduğu bilgisayarın ismi ve yazıcının kuyruk ismi gibi bilgiler girilmelidir.

Eğer yazıcı bir Windows 95/98/NT bilgisayardan paylaştırılmış ise Smb Printer, eğer bir NetWare sunucusundan paylaştırılmış ise NetWare Printer seçeneği seçilmelidir.

Yazıcının türüne göre yazdırılacak dosyaya bazı işlemlerin uygulanması gerekebilmektedir. Bu işlemler filtreler aracılığı ile yapılmaktadır. Filtre uygulamak için Input Filter seçeneğinin karşısındaki Select tuşu kullanılabilir. Bu durumda yazıcı isimlerinin bulunduğu bir pencere açılacaktır. Bu pencereden istenilen bir yazıcı seçilir.

Komut Satırı Kullanarak Yazıcı Tanıtmak:

Yazıcı eklemek için görsel araçlar kullanılabileceği gibi /etc/printcap dosyası düzenlenerek ve kuyruk alanları oluşturularak yeni bir yazıcı tanıtılabilir. Gerçekte de görsel araçların yaptıkları işlem de bundan ibarettir. Ayrıca bazı özel parametreler bu görsel araçlar tarafından desteklenmemektedir.
 
/etc/printcap Dosyası ve Ayarlanması

/etc/printcap dosyası tanıtılmış tüm yazıcılar için gerekli kayıtları tutmaktadır. Bu dosya vi gibi bir metin editöründe açılarak yeni bir yazıcı elle tanıtılabilir.

Yerel Yazıcı Tanıtmak

Eğer yazıcı yerel olarak bilgisayara bağlı ise /etc/printcap dosyası aşağıdakine benzer şekilde düzenlenerek yazıcı kullanılabilir.

printer1
 :lp=/dev/lp1
 :sd=/var/spool/lpd/printer1
 :if=/usr/spool/lpd/printer1/fitler
 :mx#0

Bu örnekte tanıtılan yazıcının kuyruk ismi printer1 olarak verilmiştir. Bu örnekte verilen parametreleri incelersek.

lp=/dev/lp1 : Printerın bağlı olduğu bağlantı noktasını göstermektedir. Eğer bir network printer'ı tanıtılacaksa /dev/lp1 yerine [printer_adı veya IP'si]%9100 yazılması gerekir. Eğer seri porttan bir yazıcı takılacaksa :lp=/dev/ttya yazılması gerekir.

sd=/var/spool/printer1 : Yazıcının kuyruk alanını göstermektedir. Lpd çıktı gönderildiğinde önce bu alana kaydeder ve üstünde gerekli işlemleri (Örn: Filtreleme) yaptıktan sonra yazıcıya yollar.

if=/usr/spool/lpd/printer1/filter : Yollanan çıktı yazıcıya gönderilmeden önce kuyruk alanında, yazıcının anlayabileceği formata çevrilir. Bu işleme filtreleme denir. Gerekli filtrelemenin nasıl yapılacağına ilişkin bilgilerin olduğu yer gösterilir.

mx#0 : Bastırılabilecek en büyük dosya boyutunu göstermektedir. 0 değeri girilirse herhangi bir sınırlama uygulanmaz.

Eğer yazıcı bilgisayara seri port üzerinden bağlanmış ise yapılması gereken ayarlar değişecektir. Seri porttan bağlanan yazıcılar için br# ve stty parametreleri de kullanımalıdır. Örneğin :

printer1:
 :lp=/dev/ttya
 :sd=/var/spool/lpd/printer1
 :stty=9600 –echo –crmod –raw –evenp pass8 cbreak ixon
 :if=/usr/local/filter
 :mx#0

stty=9600 –echo –crmod –raw –evenp pass8 cbreak ixon : Sadece seri porttan bir yazıcı takılıyorsa :stty ayarı kullanılmalıdır. Burada seri portla nasıl konuşulacağına ilişkin ayar parametreleri verilir.

Uzak Yazıcı Tanıtmak

Eğer yazıcı başka bir bilgisayara bağlı veya başka bir bilgisayara tanıtılmış ise bu yazıcının tanıtılması için /etc/printcap dosyası aşağıdakine benzer şekilde ayarlanabilir.
 
printer1:
 :lp=yazici@sunucu

Bu örnekteki :lp parametresi sadece LPRng ile kullanılabilir. Bu parametredeki @ işaretinden önceki kısım yazıcının kuyruk ismini, sonraki kısım da yazıcının bağlı bulunduğu sunucuyu belirtmektedir. Böyle tanıtılan bir yazıcıda yazdırma işlemi öncesi hiçbir filtreleme yapılmamaktadır. Tüm filtreleme işlemi sunucu tarafında yapılmaktadır. Bu sayede yazıcının tipi ile ilgili bilgi sahibi olunması gerekmemektedir. Ağa bağlı yazıcılarda başka bilgisayara bağlı yazıcılar gibi düşünülebilir. Çünkü bu tür yazıcılarda da lpd desteği vardır. Bir ağ yazıcısı sadece sunucu ismi verilerek tanıtılabilir. Fakat bu durumda yazdırma işlemi direk olarak yazıcıya gönderileceğinden bastırılacak dosya filtre işlemlerinden geçirilmelidir.

Ağa bağlı yazıcılarda yazılacak dosyayı direk yazıcıya göndermek yerine yerel makinede bir kuyruğa atmak gerekebilir. Bunun için /etc/printcap dosyasında yazıcının tanımlarına force_localhost satırı da eklenmelidir.
Ayrıca LPRng gerekli filtreleme işlemlerinden sonra bilgiyi başka bir bilgisayar üzerinde tanıtılmış yazıcı kuyruğuna gönderme yeteneğine de sahiptir. Bunun için bounce_queue(bq) parametresi bulunur. Bu sayede filtreleme işlemleri tamamlandıktan sonra bastırılacak bilgi sunucudaki kuyruğa gönderilir. Örnek ayar dosyası aşağıdaki gibi olabilir.
 
lp1
 :bq=yazici@sunucu
 :sd=/var/spool/lpd/lp1
 :if=/usr/local/filter
 :ab