最近因為計畫的關係,lab多了好多 raspberry pi;剛好 printer server 壞了,於是就來跟一下潮流,玩玩 raspberry pi。

  • 環境:
    • Raspberry Pi: version 1
    • OS: Raspbian GNU/Linux 7
    • Printer: HP LaserJet 2420
    • CUPS: 1.5.3

我是利用網路去連接 printer;而不是透過 usb 之類的連線。

Step

  1. 首先,當然是要先準備好 Raspberry Pi,OS的話則是直接用官網的 image。網路設定的部分,因為 printer 本身是 private IP;而 printer server 必須要有 public IP 與 private IP。因此,在網路設定中,eth0 綁了兩個IP:

    /etc/network/interfaces
    auto eth0
    iface eth0 inet static
    address X.X.X.X
    netmask 255.255.255.0
    gateway X.X.X.Y
    post-up ip addr add 10.34.182.1/24 dev eth0
    pre-down ip addr del 10.34.182.1/24 dev eth0
    dns-nameservers 168.95.1.1
    
  2. 安裝 CUPS

    sudo apt-get update
    sudo apt-get install cups
    sudo usermod -a -G lpadmin pi
    sudo service cups start
    
  3. 連接 printer
    打開瀏覽器,輸入你的 IP/web domainname 並加上 631 port (例如:http://192.168.0.1:631)。就可以看到 cups 的管理頁面,在設定 administration 的相關選項時,系統會要求轉成 https 並輸入帳號密碼,這個帳號密碼就是 raspberry pi 的 OS 的 user,例如: pi

    新增印表機時,最重要的兩件事情是:

    1. Printer 連接的方式。 這邊設定連接的方式,不會影響到 client 連到 printer 的方式,我試過使用 HTTP 協定或是 socket 的方式去連接都可以成功。
      (註一:別忘了勾選分享該 printer server)
      (註二:建議使用 socket 的方式,原因:Print file was not accepted)

    2. Driver 的選擇問題。 選完印表機的廠牌後,會看到該廠牌的 driver 列表。同一個型號可能會有很多種不同的 driver。這裡的選擇會影像到 printer 是否能正確的印出文件。建議選擇帶有 (recommend) 的 driver 比較不會發生問題。
  4. 設定 client

  • Windows client

新增印表機時,直接輸入 printer 的網址:(例如: https://192.168.0.1:631/printers/HPLJ2420)
Windows 新增 CUPS 印表機

  • Mac client

輸入 printer server IP 位址,選擇 IPP 協定,然後將網址的後半段放在佇列那個欄位;
Mac 新增 CUPS 印表機

以上就是整個設定的步驟。

別忘了,如果設定了實體IP,那最好在設定 iptables 來阻擋不必要的連線,以免留給別人惡作劇的空間~

例如:

iptables -A INPUT -s <<trust ip or ip range>> -p tcp --dport 631 -j ACCEPT
iptables -A INPUT -p tcp --dport 631 -j DROP

Troubleshooting

Print file was not accepted

  • 狀況描述:
    MAC 上可以順利列印,但是 Windows 就不行。在 Cups 的 Job 管理中,看到錯誤訊息是 Print file was not accepted

    實際上 error message 有兩個,在 job 列表中,最開始先出現 Printer does not support IPP 2.0, trying IPP 1.1...,然後很快的換成 Print file was not accepted。如果不是請 user 列印,我在旁邊死命的盯著 cups 網頁,根本就很難發現這個 error。

    根據這個 error message,大概猜測原因是: cups 用 http://<<printer IP>>:631/ipp 的方式連接 printer;所以問題點在於 printer 不接受 client 使用的 IPP 協定版本。

  • 解決方法: cups 改用 socket 的方式連接 printer。例如:socket://<<printer IP>> 就可以解決了。

Secure Admin page

修改 /etc/cups/cupsd.conf,設定 admin 頁面只有特定 IP 才能讀取

/etc/cups/cupsd.conf
<Location /admin>
  # Allow remote administration...
  Order deny,allow
  Deny all
  Allow 192.168.0.1
</Location>
<Location /admin/conf>
  AuthType Default
  Require user @SYSTEM
  # Allow remote access to the configuration files...
  Deny all
  Allow 192.168.0.1
</Location>

Reference

Comments

comments powered by Disqus