Windows Yazdırma Süreci ve RHS Easy Printer
Burada sizlere Microsoft® Windows Server™ 2008 ile birlikte tanıştığımız Remote Desktop Easy Printer özelliğinin teknik analizini ve ihtiyaçlarımızı ne şekilde karşılayacağına yönelik çalışma yapacağız. Konuya geçmeden önce bilinmesi gereken bazı terimleri açıklamaya çalışayım.
Remote Desktop Sesion Host Service (RDHS):
Remote Desktop Sesion Host; (RDS)Microsoft® Windows Server™ 2008R2 işletim sistemine Remote Host Service rolü ekleyerek gelmektedir. Bu rol; sunucuda çalışan Windows tabanlı uygulamalara Kişisel bilgisayar kullanarak “Uzak Ara Bağlantısı” (RDP) protokolü ile dünyanın her noktasından, şirket datalarına kolay, hızlı, güvenli ve esnek erişim sağlaması ile tanınan bir teknolojidir. RDHS; ekran paylaştırması ( Sesion Sharing ) yaparak çalışmaktadır. Yani aynı anda birden çok kullanıcının tek makineye bağlanıp çalışmasına olanak sağlamaktadır.
Easy Printer:
Windows Server 2008R2 Remote Desktop Sesion Services için bir rol değildir. Microsoft® Windows Server™ 2008R2 işletim sistemli sunucumuz üzerinde RDS Rol’ünü yükledikten sonra kullanabileceğimiz bir özelliktir. Bu özelliliğinin anlatımı daha önceden portalımızda Fatih KARAALIOGLU’nun “W2008 Terminal Services Easy Printer Teknolojisi” başlıklı yazısında anlatıldığından burada tekrarlamayacağım.
Spool File ( Bekletme Dosyası):
Spool (bekletme) dosyası, yazıcıya gönderilen belgelerinizin, yazdırma işlemi sırasında ayrı bir şekilde tutulabilmesi için, sabit sürücüde oluşturulan bir geçici dosyadır. Bir uygulama içinden yazdır komutunu verdiğinizde, Windows sabit sürücünüzde bir spool dosyası yaratıp belgeyi özel bir meta file biçemi kullanarak bu dosyaya kopyalar. Spool dosyasının yaratılmasının ardından da ipleri tekrar uygulamanın eline verir. Biriktirme işlemi birden çok yazdırma işlerini yazıcıya aynı anda sırayla verilmesi sağlar.
Windows, belgeleri spool dosyasına kopyalarken, gelişmiş meta file formatını (EMF) kullanır. Windows, varsayılan ayarlarında, Spool Data Format seçeneğini EMF olarak işaretler.Bu format, olasılıklar arasında en etkin formattır. Çünkü bütün yazıcılarla uyumlu, görece küçük boyutlu bir dosya oluşturur. Diğer meta file formatı ise; RAW’dır. Dolayısıyla, Windows yazdırma bilgisini seçili yazıcıya uyarlamak zorunda olduğundan, yazdırma isi daha uzun sürer.
EMF (Enhanced MetaFile):
Windows95 ‘ten beri yazdırma ihtiyaçlarının artması ve önem kazanması nedeniyle Microsoft daha hızlı yazdırma yapabilmek için 1992 yılında ilk olarak 16 bit sonrasında ise 32 bit Enhanced Meta File versiyonunu geliştirmiştir. 2006 yılında ise OSP (Microsoft Open Specification Promise) kapsamına alınarak donanım üreticileri tarafından geliştirilmesine olanak sağlamıştır.
EMF formatı karmaşık grafik programlarından grafikleri yazdırma WMF formatında eksiklikleri gidermek için oluşturuldu. EMF formatı aygıttan bağımsız çalışmaktadır. Bu grafik boyutları yazdırılan kopya çözünürlüğü yazıcının inç başına nokta bakılmaksızın korunur anlamına gelir. Network içerisinde EMF formatı daha küçük dosya boyutu sağladığından ağ trafiğini azaltır. EMF, Windows işletim sistemi tarafından kullanılan biriktirme dosyasıdır. EMF ayrıca yazıcı sürücüleri için bir grafik dili olarak kullanılmaktadır.
RAW SPOOL FILE
Windows Spooler Servisi, Spooler File’a işlemeden gönderdiği dosya formatıdır. Bu nedenle ismi RAW yani ham’dır. Raw dosyası PostScript komutlarını bir PostScript yazıcıya göndermek için kullanılır. PostScript komutları yazıcı tarafından anlaşılan, ancak Windows Biriktirici tarafından yorumlanmayan düz verilerdir. RAW aygıta bağımlı ve daha yavaş biçimlidir. Her üreticinin kendine has algoritma yöntemleri kullandığından, farklı firmaların ürettiği RAW dosyaları farklı boyutlarda olur.RAW formatının en önemli özelliklerinden biri de kayıt yapıldıktan sonra üzerinde bazı değişikliklere izin vermesi. Yani bir nevi zaman içinde geri giderek yanlış ayarları düzeltebilmeye imkân tanıması. EMF biçimi kullanılarak yazdırma işlemlerinde sorun yaşarsanız yazdırma formatı olarak RAW seçilmesi önerilir.
Print Spooler(Yazdırma Biriktiricisi) :
Temel olarak PrintSpooler Servisi; bilgisayarınızdaki uygulama ile yazıcı arasındaki iletişimi kurarak belgenin yazıcıya gönderilip basılması işlemini yönetir. Print Spooler; uygulama üzerinden yazdırma talebi bulunulmasından sonra devreye girer. İlk olarak disk üzerindeki tampon bölgede yazdırılacak belgeyi düzene sokar daha sonrasında kernel’deki yüklü yazıcı sürücüsünün (print driver) anlayacağı formata (RAW, EMF, XPS v.b) dönüştürerek baskı dizileri halinde sırayla yazıcıya gönderir. Eğer işlem sırasında olası bir hatayla karşılaşılırsa yazıcının gönderdiği hata mesajını yorumlayarak kullanıcı ekranına yansıtır.Bu servisin en önemli özelliği belge yazdırılırken sizin çalışmanızda kesintiye uğratmaksızın devam etmenizi sağlamak.
Tüm spooler (biriktirici) hizmetleri user moda gerçekleşir. Windows işletim sitemi; dil monitörleri ve bağlantı noktası olmak üzere iki tip yazdırma izleyicisini destekler. Uygulamayla yazıcı eğer aynı bilgisayar üzerinde ise bu diyagram tek bir yapıda gerçekleşir yok eğer başka bilgisayara bağlı yazıcıdan çıktı alınacaksa RPC servisi ile o makineye aktarılır.
Application |
Yazdırma isteğinde bulunan uygulama GDI işlevlerini çağırarak bir yazdırma işi oluşturur. |
GDI |
Grafik Aygıt Arabirimi (GDI) hem kullanıcı (user) modu hem de çekirdek (kernel) modu bileşenleri içerir. Kullanıcı modu bileşeni, Microsoft Win32 GDI, grafik desteği gerektiren Win32 uygulamaları tarafından kullanılır. Çekirdek modu bileşeni, grafik motoru (veya grafik oluşturma motoru), hizmetleri ve grafik aygıt sürücüleri kullanabileceğiniz işlevler verir. (Aşağıda örneklendirmeli şekliyle tekrardan anlatılacaktır) |
Winspool.drv |
Biriktirici (Spooler) istemci arabirimidir. Spooler; Win32 API işlevleri dışa aktarır ve ayrıca erişmek içinde RPC taslakları sağlar. (GDI birincil istemcisidir, ancak uygulamalar da bazı Win32 işlevleri çağırır.) |
Spoolsv.exe |
Spoolsv.exe biriktirici’nın API sunucusudur. İşletim sistemi başlatıldığında devreye girer. Bu modül bir RPC arabirimi biriktiricinin Win32 API sunucusu tarafından dışa aktarılır. Spoolsv.exe istemcileri Winspool.drv (yerel) ve Win32spl.dll (remote) içerir. Modül bazı API işlevleri gerçekleştirir, ancak çoğu işlev çağrıları için baskı servis sağlayıcısı (Spoolss.dll) yönlendirici aracılığıyla iletilir. |
Router |
Spoolss.dll dan gelen yazıcı adı veya her işlev çağrısı ile sağlanan yazıcıyı belirler. Router ise çağrıyı doğru yazıcıya iletir. |
XPS (XML Paper Specification):
(MS dışı kaynaktan alınan bilgiye göre) PDF teknolojisine karşı geliştirilen XPS belgesi XML Kağıt Belirtimi’nde veya. xps dosya biçiminde kaydedilmiş herhangi bir dosyadır. Windows’da yazdırabileceğiniz herhangi bir programla XPS belgesi (.xps dosyası) oluşturabilirsiniz, ancak XPS belgelerini yalnızca XPS (viewer) görüntüleyici kullanarak görüntüleyebilirsiniz. Microsoft .NET Framework 3.0 ve üstü varsa, görüntüleyici Internet Explorer ile çalışır ve bu Windows sürümüne eklenmiştir.
XPS notları, sözleşmeleri, raporları, web sayfalarını, çevrimiçi makbuzları veya düzenli olarak yazdırıp kaydettiğiniz diğer belgeleri paylaşmak ve arşivlemek için tasarlanmış bir dosya biçimidir.
Neden XPS Kullanılıyor;
Açık kaynak doküman formatına sahiptir.
Taşınabilir ve yazıcı bağımsız oluşu kullanılabilirliğini arttırmaktadır.
Esnek belge işleme özelliğiyle daha hızlı yazdırma sağlamaktadır.
Özellikle çok ve yoğun yazdırmalarda daha düşük bantwith kullanımı sağlamaktadır.
Graphics Device Interface (GDI):
Microsoft işletim sistemleri üzerinde programcıların kendi bileşenlerini daha kolay geliştirmeleri amacıyla kullanabilecekleri grafik kütüphanesine GDI denir. GDI+,ekranda özel çizimleri kontrol etmek için ulaşılabilir olan. NET base class’ları setini içermektedir.Bu class’lar ekrana verildiğinden emin olmak için grafik cihaz sürücülerine gönderilecek uygun komutlar için ayarlanırlar. Örneğin; diske dosyalarınızı yazmak ya da diskten dosya okumak için programlama olarak sabit disk cihaz sürücünüz hakkında herhangi bir şeyi anlamaya ihtiyaç duymazsınız; sadece ilgili. NET class’ların olduğu uygun methodları çağırırsınız.Bu prensip çizim için de doğrudur. Bilgisayar ekrana birşey çizdiğinde, ekran kartına komutlar göndererek yapar. Fakat piyasada birçok farklı ekran kartı bulunmaktadır ve bunların çoğu farklı komut setlerine ve yetenekleriıne sahiptir. Eğer bunu hesaba katmanız ve her ekran kartı sürücüsü için özel kod yazmanız gerekseydi, herhangi bir uygulama yazmanız neredeyse imkânsız olurdu. Windows Graphical Device Interface, Windows’ un ilk versiyonlarından itibaren bu sebeplerden ötürü kullanılmaktadır. Her ne kadar Windows GDI kolay kullanımlı bir kütüphane olsa da, yavaştır ve bazı alanlarda kısıtlı fonksiyonellik sağlar.
GDI Printers :
Düşük maliyetli yazıcı firmaları sürücü yazımında Windows’un GDI kütüphanesindeki baskı istemcisini kullanarak yazdırma işlemini yaptırırlar. GDI Printering kullanan bilgisayarda; çıktı öncelikle bitmap görüntülerine render edilir sonrasında yazıcıya gönderilir.
Windows Presentation Foundation
Windows Presentation Foundation (WPF, kod adı Avalon) .NET Framework 3.0’ın grafik altyapısını oluşturan XAML tabanlı sistemdir. Son kullanıcılar için Microsoft Windows programlarında yüksek derecede görsel arayüz sağlar. Bu nedenle geleceğin programlama teknolojisi denilebilir.WPF’in klasik Win32 uygulamalarına olan en büyük üstünlüğü, eski GDI+ pencereleme sistemini kullanmaması, bunun yerine DirectX üzerine kurulmuş bir mimari sayesinde gelişmiş grafik kartlarının GPU’sunun (Graphics Processing Unit) bütün avantajlarından yararlanmasıdır. XPS formatındaki dosyanın bilgisayarının GPU’sunu kullanarak GDI formatına dönüştürmesini sağlamaktadır.
Microsoft XPS Document Writer (MXDW):
Çıktıların XML formatında dosyaya ( print-to-file) kaydedilmesini sağlayan platformdur.
RDS EasyPrint için Genel Şartlar:
Şimdilik Easy Print özelliğinin GUI arayüzden yönetimi bulunmamaktır. Bu yüzden kurulum ve yapılandırma işlemleri manuel veya GPO üzerinden yapılmaktadır.
Sunucu ve client üzerinde .NET Framework 3.5 ve XPS Feature’ının kurulması gerekmektedir
RDP client uygulamasının versiyonu 6.1 üstü olmalı ve yazıcının sunucuya yönlendirilmesi (map edilmesi) için ayarlardan “Local Resource” başlığı altındaki “Printer” sekmesinin işaretlenmesi gerekmektedir.
Sunucu üzerinden client makinedeki yazıcının sunucuya maplenmesine izin vermek için RDS Host Conguration ayarlarında “Client Setting” tabı içerisindeki “Redirection” sekmesi altındaki “Windows Printer” işaretsiz olmalıdır. Burayı okuduktan sonra “Biz bunu Windows 2003 Terminal Server’da da yapıyorduk” diye düşünebilirsiniz. Evet, doğru fakat kullanıcı yazıcısını map ettiğinde yazıcının çalışabilmesi için sunucuya sürücüsünü kurmamız gerekiyordu. İşte bizde bunu yapmamak için Easy Print özelliğini sunucu üzerinde aktif ediyoruz.
EasyPrint özelliğinin aktif edilmesi için Group Policy (GP) üzerindeki “Administrative TemplatesWindows ComponentsRemote Desktop Services Remote Desktop Sesion Host ServerPrinter Redirection” altındaki tercih ettiğiniz uygun parametre “enable” edilir.
RDS EasyPrint Özelliği ile Yazdırma
Şimdi sırasıyla RDS üzerinde yazdırma işlemleri nasıl olduğunu inceleyelim.
- Kullanıcı, RDHS oturumundaki uygulamasından belge baskısı almak ister
- Uygulama Spoolsv.exe’yi çağırarak yazıcıları kullanıcının ekranına listeler. KullanıcıSpoolss.dll ile listelenen yazıcılardan uygun yazıcıyı belirler.
- tsprint.dll ile RDS Easy Print sürücüsü yükler ve ilgili companetleri çağırır
- TS Easy Print sürücüsü RDC Client uygulaması kullanarak istemci üzerinde kurulu olan gerçek yazıcı sürücüsünü sanal olarak çağırır.
- Bu kısımda kullanıcı isterse yazdırma işleminden önce yazdırma tercihlerini belirleyebilir. “ok” ‘e basarak yazdırma sürecini başlatır.
- TS Easy Print sürücüsü RDC Client uygulaması üzerinden kullanıcının belirlemiş olduğu yazdırma tercihlerini sunucu üzerinden client sisteme gönderir.
- Uygulama kullanıcının belirlemiş olduğu tercihe göre yazdırma işlemini yeniden şekillendirir.
- RDC Client istemci üzerinde baskı işi işleme yardımcı olması için TSWPFWRP.EXE (WPF printing .Net Framework API) çağırır.TSWPFWRP uygulaması sadece RDS sunucusu üzerinde çalışmaktadır.
- Terminal Server Easy Print sürücüsü belgeyi GDI-to-XPS dönüştürmesi için TSWPFWRP.EXE iş süreçlerine başlar
- GDI tabanlı yazdırma işleri GDI-to-XPS yordamlarıyla XPS biçimine dönüştürmek için yönlendirilir. WPF tabanlı yazdırma işlemleri GDI-to-XPS dönüştürücüsüne yönlendirilmez
- Sunucu tarafında biriktirici bir XPS spool dosyası oluşturur ve RDC client’a statik sanal kanal kullanarak dosyayı gönderir
- RDC client XPS spool dosyasını alır
- RDC client istemci tarafdaki yazıcının sürücüsünün XPS dosya formatını destekleyip desteklemediğini sorgular. Destekliyorsa RDS üzerinden gelen XPS dosyasını yazcıya göndererek çıktının oluşturulmasını ister. Yok eğer yazıcı XPS formatını desteklemiyorsa istemci client sistemininWPF’sine gönderilerek yerel GPU’su kullanılarak GDI formatına dönüştürülür
Dönüşümü yapılan dosya yazdırılması için local Print Spooler Servisine iletilir.
Easy Print hangi durumlarda kullanılmamalı ?
Çıktı alınacak yazıcı eğer XPS formatını desteklemiyorsa; bir yazdırma işlemi için iki taraflı (sunucu – istemci) dosya converter işlemi uygulanacağından özellikle WAN’da gecikme süreleri artacaktır. Buda son kullanıcının isyanına neden olabilir. Böyle bir durum için thirdparty yazılım olan ThinPrint uygulaması çözüm olacaktır. Ayrıca ThinPrint 2003 TS’ida desteklemektedir.
ThinPrint uygulaması sunucu ve client olmak üzere iki yapıdan oluşur. Son kullanıcı RDS’e bağlandığında ThinPrint Sunucu uygulamasıyla local yazıcılarını sürücülerini yüklemeden map eder. Kullanıcı çıktı almak istediğinde küçük RAW formatlarına dönüştürülerek client’a gönderilir. Client yerel kaynaklarını kullanarak dosyaları birleştirip çıktıyı normal süreçden daha hızlı almasını sağlar. (Uygulama bir ayar yapmaksızın çalışmaktadır. İsterseniz profesyonel yapılandırma seçenekleri de bulunmaktadır)
WAN kullanıcıları için çıktı alınacak dokümanda birden fazla yazı fontu kullanılmış işe converter işlemleri uzayacaktır. Microsoft tarafından çalışmalar devam etmekte olup güncellemeler ile daha fazla yazı tipi sorunsuz desteklenir duruma gelmektedir.
Eğer yazıcı ismine önem veren bir uygulamanız varsa Easy Print’i kullanamayacaksınız. Çünkü RDS’da oturum açan her kullanıcının map eden yazıcıları sunucuya bağlandığı sesion id ile isimleşmektedir. Yani kullanıcı birinci gün sunucuya 3 numarali id ile bağlandıysa yazıcı ismi “userprint (redirected 3)” şeklinde olmaktadır. Ertesi gün sunucuya bağlandığında 11 numaralı id ile bağlandı ise bu sefer yazıcının ismi “userprint (redirected 11)” olacaktır.
KAYNAKLAR :
http://www.undocprint.org/winspool
http://blogs.technet.com/b/askperf/archive/2008/02/17/ws2008-terminal-services-printing.aspx
http://windows.microsoft.com/tr-TR/windows7/products/features/xps
http://en.wikipedia.org/wiki/Graphics_Device_Interface
http://msdn.microsoft.com/en-us/library/ff686799%28VS.85%29.aspx
http://www.microsoft.com/whdc/device/print/xps/default.mspx
http://www.printspooler.com/printspooler.php
http://msdn.microsoft.com/en-us/library/ff551781%28VS.85%29.aspx
http://tr.wikipedia.org/wiki/Windows_Presentation_Foundation