SDB:Print Settings with CUPS

Şuraya atla: kullan, ara


Version: 7.2


Bulgu

Diyelim ki; yönetici(admin) olarak CUPS yazım sistemi ile karşılaştınız. Karşınıza farklı biçimlerde kuyruğa atma (queue) ve atılanları izleme ile ilgili sorunlar çıkabilir. Örneğin;

  • Birden fazla kullanıcı, benzer ya da aynı kuyruğa atılı, bir veya birden fazla farklı yazıcı çıktısı almak isteyebilir.(kötü kalitede ya da sonuçsuz çıktılar gibi...)
  • Ağ üzerindeki yazdırma işlemlerinde; farklı kullanıcıların benzer ya da aynı kuyruğa atılı, yazdırma işlemi farklı kullanıcıların bilgisayarlarından geliyor olabilir.

Sonuç olarak, bu durum genel kuyruk ayarlarına başvuracaktır : Genel kuyruk ayarları için, ek olarak PRINTER çevresel değişkeni gelmektedir. Eğer bu çevresel değişkene bir değer atanmışsa lp, bu atama genel kuyruk ayarlarına en yüksek dereceden öncelik tanıyacaktır. Eğer PRINTER; lp, olarak ayarlanmışsa CUPS tarafından gözardı edilir. Geleneksel yazdırma sistemlerinde, /etc/profile ya da /etc/SuSEconfig/profile için bir giriş mevcuttur. Ki bu durum PRINTER'i lp yapar. Ve yine bu durumun genel kuyruk ayarlarına en yüksek dereceden öncelik tanıyacağı gibi. Bu durum, CUPS araçları ile genel kuyruk ayarlarını değiştirmeyi imkansız kılmaktadır.

Bununla birlikte, CUPS sunucular üzerinde yer alan makinelere genel kuyruk ayarlarını atamak mümkün olmayacaktır. Çünkü birden fazla istemci için, birden fazla CUPS sunucusu olabilir. Bu nedenle, her istemci kendine ait varsayılan sıra ayarlarına sahip olmalıdır. Genel sıra ayarlarına göre bir değişiklik mümkün değilse, ilk sıra ayarı alfabetik olarak atanacaktır.


Neden

not only on client machines, but also on the CUPS server).

Bu durum aslında bir hata değil, CUPS'un basit bir özelliğidir.

  • Tüm kullanıcılar, her bir sıra ayarı için farklı atama yapabilirler.
  • Ayrıca, "kök dizin" her bir makine için farklı sıra ayarı ataması yapabilir. (sadece istemci makineler için değil, Cups sunucular için de geçerlidir.)


Çözüm

Çözüm aslında çok kolay olmakla birlikte, ayarların nerede olduğunu ve hangi ayarların hangi konumlarda etkili olduğunu bilmek gerekiyor.

SuSE Linux 8.1'den itibaren, temel bilgi; Yönetici Klavuzundaki, "Yazıcı İşlemi"(Printer Operation) bölümündeki "CUPS Yazdırma işlemleri için Komut Dizisi Araçları"(Command Line Tools for the CUPS Printing System) başlığında ya da "Yerel yazdırma sıra ayarlarında Yönetim"(Managing Local Queues) alt başlıklarında bulunabilir.

Örnek

Konuyu tam açıklamaya yönelik, şöyle bir örnek seçtik ki, durum itibari ile çok daha karmaşık hale gelmektedir. Örneği mümkün olduğunca net ve anlaşılır yapmaya çalıştık ki, içeriğinde sadece komut satırı yönergeleri bulunmaktadır. Bununla birlikte, Kprinter ve XPP veya ağ tabanlı CUPS gibi çizgesel(graphical) araçlar kullanılsa dahi bir farklılık yaratmayacaktır.

Başlangıç olarak :

Çünkü, her iki yazdırma sırası da, aynı yazıcı için kullanılacaktır. Aynı PDD dosyası, her iki yazdırma için de temel olarak kullanılacak, fakat her bir yazdırma sırası için farklı değer alacaktır. Örneğin, YaST2; farklı biçimde oluştururken, bu geçiş yolunu kullanır. (bakınız: SDB yazısı "SuSE linux 8.1 ile yazıcı biçimlendirme) PPD dosyaları, sıra ayarları ile sürekli bir iletişim(uyum) halindedirler; /etc/cups/ppd/mono.ppd ve /etc/cups/ppd/color.ppd dosyaları aşağıdaki gibi geçerli ayarları ve temel değerleri içermktedir:

 *DefaultColors: Gray
 *Colors Gray ...
 *Colors Color ...
 ...
 *DefaultInkCartridge: Black
 *InkCartridge Black ...
 *InkCartridge Color ...
 ...
 *DefaultResolution: 600dpi
 *Resolution 150dpi ...
 *Resolution 300dpi ...
 *Resolution 600dpi ...
 
and

 *DefaultColors: Color
 *Colors Gray ...
 *Colors Color ...
 ...
 *DefaultInkCartridge: Color
 *InkCartridge Black ...
 *InkCartridge Color ...
 ...
 *DefaultResolution: 300dpi
 *Resolution 150dpi ...
 *Resolution 300dpi ...
 *Resolution 600dpi ...
 
In certain circumstances it makes sense to have several queues with their respective settings for the same printer due to the following reasons:

Bu gibi durumlarda, aynı yazıcı için bir kaç kuyruk ayarını kendi ayarlarına göre algılayacak ve bunun sebebi aşağıdaki gibi olacaktır:

    • Yazdırma seçenekleri arasında birçok değişiklik yapmak mümkün olabilecek ve bu durum özellikle renkli mürekkep püskürtmeli için, aşağıdaki örnekte olduğu gibi olacaktır:
      • "Tek renk"(mono) için; Colors=Gray ve InkCartridge=Black
      • "renkli"(color) için; Colors=Color ve InkCartridge=Color
    • Bazı özel yazdırma işlemleri, sadece belli çözünürlüklerde çalışabilir, özellikle "mürekkep püskürtmeli yazıcılarda" aşağıdaki örneklerde olduğu gibi:
      • Çözünürlük 150dpi, 300dpi, ve 600dpi olduğunda "tek renk"(mono) çalışacaktır.
      • Çözünürlük sadece 150dpi ve 300dpi olduğunda "renkli"(color) çalışacaktır. SuSE Linux 8.2'den beri (özellikle Foomatic Vers.3.x) Bir çok PPD dosyalarındaki "Çıktı modu" seçeneği Püskürtmeli yazıcılar içindir. Kullanıcı çıktı biçemini seçtiğinde, tüm kişisel biçem ayarları ki sadece özel yazıcı çıktısı seçeneğidir, eşzamanlı olarak ayarlanacaktır. Bu sebeple, bir yazıcı için adet PPd dosyası yeterli olacaktır.
  • "earth" ve "moon" adlı istemcilerin sıra(kuyruk) ayarı yoktur. Ayrıca "kök dizin"(root); normal kullanıcılar "tux" ve "geeko" da bu istemciler üzerindedirler.
  • Sıra(kuyruk) ayarları yenden yapılandırılmadıkça; tüm makineler için,"tek renk"(mono)için sıra(kuyruk)ayarı, yazıcı çıktısı 600 dpi çözünürlükte, ve "renkli" için sıra(kuyruk)ayarı da 300 dpi çözünürlükte olacaktır.

Now the options will be changed in the following order: Şimdi de seçenekler aşağıdaki gibi değiştirilecektir:

  1. "root" (kök dizin) aşağıdaki komut ile, "sun" üzerinde, PPD dosyası içindeki temel çözünürlük değerini 150 dpi yapar:

lpadmin -p mono -o Resolution=150dpi
/etc/cups/ppd/mono.ppd

 *DefaultColors: Gray
 *Colors Gray ...
 *Colors Color ...
 ...
 *DefaultInkCartridge: Black
 *InkCartridge Black
 *InkCartridge Color
 ...
 *DefaultResolution: 150dpi
 *Resolution 150dpi ...
 *Resolution 300dpi ...
 *Resolution 600dpi ...
 
Thus, the queue "mono" prints in grayscale with a 150 dpi resolution for all users on all machines.
  1. Then "root" executes the following command on "sun":
    lpoptions -p mono -o Resolution=300dpi
    to set the default resolution value to 300 dpi only for the machine "sun" in its file /etc/cups/lpoptions:
Dest mono Resolution=300dpi
Thus, "mono" prints in grayscale with a 300 dpi resolution for all the users on "sun" and in grayscale with a 150 dpi resolution for all users on "earth" and "moon".
  1. Now "root" executes the following command on "earth":
    lpoptions -p mono -o Resolution=600dpi
    to set the default resolution value to 600 dpi only for the machine "earth" in its file /etc/cups/lpoptions
Dest mono Resolution=600dpi
Thus, "mono" prints in grayscale with a 600 dpi resolution for all the users on "earth", in grayscale with a 300 dpi resolution for all the users on "sun", and in grayscale with a 150 dpi resolution for all the users on "moon".
  1. The normal user "tux" executes the following command on "earth":
    lpoptions -p mono -o Resolution=300dpi
    to set his default resolution value as 300dpi in his home directory in the file ~/.lpoptions:
Dest mono Resolution=300dpi
Thus, "mono" prints in grayscale with a 300 dpi resolution for the user "tux" on "earth" and in grayscale with a 600 dpi resolution for the rest of users on "earth". The settings on "sun" and "moon" remain unchanged.
  1. The user "geeko" executes on "earth" the command
    lpoptions -p mono -o Colors=Color
    to change his settings for the queue "mono". The new settings for the user "geeko" will be saved in the file ~/.lpoptions in his home directory:
Dest mono Colors=Color
Geeko's settings for the queue "mono" on "earth" make no sense, because two contradictory values are used: Colors=Color and InkCartridge=Black.
  1. "geeko" executes the following command on "earth":
    lpoptions -p color -o Resolution=600dpi
    to set his options for the queue "color" as follows. The new settings will be saved in his file ~/.lpoptions:
Dest color Resolution=600dpi
Dest mono Colors=Color
The settings of the queue "color" for "geeko" on "earth" are wrong, because the only deployed value is Resolution=600dpi, which does not work for this printer (see above). This results in the queue "color" no longer working for "geeko" on "earth".
  1. "geeko" executes the following command on "earth":
    lpoptions -p color -o Resolution=1200dpi -o Foo=Bar
    to set his options for the queue "color" as follows. The new settings will be saved in his file ~/.lpoptions:
Dest color Resolution=1200dpi Foo=Bar
Dest mono Colors=Color
It is possible to set values like Resolution=1200dpi and options like Foo=Bar, even though they are not considered in the PPD file. When printing, however, the default value from the PPD file (Resolution=300dpi) will be used and the option (Foo=Bar) will be ignored. Thus, the queue "color" works again for "geeko" on "earth", but the set values are totally unsuitable.
  1. When "root" deletes the queue "mono" on "sun" with the command
    lpadmin -x mono
    the now invalid entries in the files lpoptions mentioned above are not deleted, but remain unchanged.
  2. "root" creates again the queue "mono" on "sun", but a different PPD file is used:
 *DefaultColours: Gray
 *Colours Gray ...
 *Colours Color ...
 ...
 *DefaultResolution: 300x300dpi
 *Resolution 300x300dpi ...
 *Resolution 600x600dpi ...
 
None of the previous entries in the files lpoptions are valid for the new queue "mono", since either the option names no longer match (Colours instead of Colors) so the option is ignored or the option values no longer match (300x300dpi and 600x600dpi instead of 150dpi, 300dpi, and 600dpi) so the default value from the PPD file is used.

General Rules for Setting Definitions:

  • When the user customizes an option (e.g., in his file ~/.lpoptions), those settings will be used for the print job.
  • If a file /etc/cups/lpoptions is already available on the computer, only the options not previously defined by the user will be used for the print job.
  • If any invalid option has been defined in the previous steps, it will be ignored. If any option value is invalid, it will be replaced with the default value from the PPD file.
  • Default values for the corresponding queue (specially default values from the PPD file) will be used for the remaining options.

The command
lpoptions -p "queue" -l
displays the possible settings. The values that, according to the rules above, will be used for a print job are marked with a preceding *.

According to this, the user "geeko" on "earth" might have used the following command in item 7
lpoptions -p color -l
to verify which settings would be used for his print job via the queue "color". He would have seen that these do not correspond to the settings in his file ~/.lpoptions, because the output would be

Colors: Gray *Color
InkCartridge: Black *Color
Resolution: 150dpi *300dpi 600dpi

Suggestion for Keeping an Overview:

  • Never define general presettings separately on each machine. Set the default values in the PPD file:
    • If possible, do not use any /etc/cups/lpoptions files.
    • If possible, do not execute the command lpoptions as "root" on each machine. Instead, execute the command lpadmin on the CUPS server.
  • Remove any unsuitable or unwanted setting from the PPD file manually or add appropriate constraints to the PPD file:
    • For example, to avoid unsuitable settings as described in the items 5 and 6 above, "root" can edit the PPD files /etc/cups/ppd/mono.ppd and /etc/cups/ppd/color.ppd manually on the CUPS server as follows (see also the article "ASCII Editors"):
 *DefaultColors: Gray
 *Colors Gray ...
 ...
 *DefaultInkCartridge: Black
 *InkCartridge Black ...
 ..."root"
 *DefaultResolution: 600dpi
 *Resolution 150dpi ...
 *Resolution 300dpi ...
 *Resolution 600dpi ...
 
and

 *DefaultColors: Color
 *Colors Color ...
 ...
 *DefaultInkCartridge: Color
 *InkCartridge Color ...
 ...
 *DefaultResolution: 300dpi
 *Resolution 150dpi ...
 *Resolution 300dpi ...
 
    • Adding appropriate constraints to the PPD file is another solution. The constraints avoid that the user can select incompatible value combinations in the PPD file, but often appropriate constraints are missing in the PPD files. The example PPD file with constraints may look as follows. Note that each constraint must be specified in both ways - for example: When "*Colors Gray" was selected then "*InkCartridge Color" is no longer allowed and when "*InkCartridge Color" was selected then "*Colors Gray" is no longer allowed.
 *UIConstraints: *Colors Gray *InkCartridge Color
 *UIConstraints: *InkCartridge Color *Colors Gray
 *UIConstraints: *Colors Color *InkCartridge Black
 *UIConstraints: *InkCartridge Black *Colors Color
 *UIConstraints: *Colors Color *Resolution 600dpi
 *UIConstraints: *Resolution 600dpi *Colors Color
 *UIConstraints: *InkCartridge Color *Resolution 600dpi
 *UIConstraints: *Resolution 600dpi *InkCartridge Color
 ...
 *DefaultColors: Color
 *Colors Gray ...
 *Colors Color ...
 ...
 *DefaultInkCartridge: Color
 *InkCartridge Black ...
 *InkCartridge Color ...
 ...
 *DefaultResolution: 300dpi
 *Resolution 150dpi ...
 *Resolution 300dpi ...
 *Resolution 600dpi ...
 
    • Some values might be possible for the printer, but unwanted for a particular queue, such as high resolutions for a "draft" queue. Such option settings should be removed for the particular queue. After manually changing PPD files, the CUPS daemon must be forced to reread the files by using the command rccups reload or rccups restart.
  • The users must be informed about any queue modification on the CUPS server, if the modification leads to the invalidity of the settings in the users' ~/.lpoptions files, especially if a queue is deleted completely or if a different PPD file will be used for an existing queue.
    • Then, the users can use the command
      lpoptions -x "queue"
      or, in the example above,
      lpoptions -x mono
      to remove the corresponding entries from their ~/.lpoptions files then reconfigure their personal settings for the relevant queue.
    • lpoptions -x does not work for deleted queues. Invalid entries can be either ignored or manually deleted from the ~/.lpoptions file (see the SDB article "ASCII Editors").
    • If personal settings will be newly configured, the whole file should first be deleted with the command
      rm ~/.lpoptions

SDB:Printer Configuration from SuSE Linux 8.1 on

SDB:Print Settings for ASCII Texts with CUPS


<keyword>print,printer,cups,settings,options</keyword>