2008-06-06

CUPS + SAMBA

20071111_象山行 200

http://www.cups.org/index.php

CUPS ( Common UNIX Printing System ),是在 linux上的列印工具。為了讓 user 可以把 NAS當 printer server,所以需要跟 samba 一起 build,讓 user 可以透過 samba 直接列印。下面列出幾點 CUPS 的需求:

1. driver 安裝

描述:
    driver 在client端安裝就好。

解法:
    在 samba config中加入 use client driver = yes 這一行。以下列出 samba 中所有 跟 cups 相關的設定:

        printcap name = cups
        load printers = yes

        printing = cups
        use client driver = yes
[ printers]
        comment = All Printers
        printable = yes
        browsable = yes
        public = yes
        path = /home/service/cups/log
        guest = yes

2. 權限問題

描述:
    在列印東西時,會跳出 "未發送 StartDocPrinter 呼叫" 的視窗。

解法:
    似乎是 samba config 中寫的 path 權限沒開,把所有CUPS folder 的權限都改成 777 (-rwxrwxrwx),就可以印了。

3. root 列印權限

描述:

    換成新版 CUPS 後無法列印,後來發現是 CUPS 中有以下這段:

if (!getuid())
{
     /*
      * Change to an unpriviledged user...
      */

      setgid(fileinfo.st_gid);
      setuid(fileinfo.st_uid);
}

    造成無法找到 usb  printer。

解法:
    把這段 mark 掉就好了。

4. Printer information

描述:
    希望在 smaba 中可以看到 printer 的廠牌型號等資訊。

解法:
    CUPS 在 build 的時候,在 $CUPS$/lib/cups/backend/ 會有一支usb 的程式,可以掃出插在 usb port 上 printer 的資訊。利用這資訊去 create cups printer,在samba 上就可以正確顯示。

5. Samba show

描述:
    希望可以插上 printer時才出現,沒插就不顯示。

解法:
    在 scheduling 中利用 usb 去檢查是否有 usb printer,若有插則加入 printer,沒插就把 printer 刪掉。注意要紀錄現在 printer的狀態,不然只要插著就會一直加入 printer。還有當列印的工作在進行中時,usb是無法偵測的,有可能是因為 device busy,所以在檢查是否有插 printer時也要檢查是否有列印的 process在運作中。

6. Spindown

描述:
    1. 雖然用 usb 可以得到 usb printer的 information,但它卻會使用到好幾支 lib,這些 lib 存在於硬碟中,每次呼叫都造成硬碟的讀取。也就使得 spindown 無法運作。

    2. CUPS 為了安全性問題,會每隔一段時間就產生新的認證檔,但因為認證檔會記錄於硬碟上,所以也會造成 spindown 失效。

解法:
    1. 每次開機都把usb 跟 lib copy 到 ramdisk 下,讓它不會直接用到硬碟。用到的 lib 有以下三隻:

        libcrypto.so.0.9.7
        libcups.so.2
        libssl.so.0.9.7

    2. 在 cups.conf 中設定為0,表示只有開啟的時候才做一次。

        RootCertDuration 0

7. CUPS spool

描述:
    在列印的時候,Windows會先把檔案傳送到 NAS,而 CUPS會將他存在 spool中,等檔案傳送完成再傳送給指定的 device。但當檔案過大,有可能會造成 spool所在的partiotion空間不足。

解法:
    原本spool是在 system partition中,所以當檔案稍大就會空間不足,在 cups.conf 中指定 spool 的位置到 user partition,就比較不會有 size 的問題。寫法如下:

    RequestRoot /config/Disk/Disk1/cups-spool

8. DNS issue

描述:
    如果指定的 DNS 是連不到的,在啟動cups跟 smaba時會等到 timeout 才繼續啟動,造成開關的動作非常廢時。

解法:
    在 /etc/hosts 中記錄 localhost,如下:

    127.0.0.1       NAS NAS.WORKGROUP localhost

沒有留言:

★★★★★★ 傑森系列 ★★★★★★