場景與挑戰
- 環境:Sun Ultra Enterprise 450 + Zeh ZPS 繪圖軟件 + 200+ 客戶端 + 50+ 打印設備 (HP 繪圖儀/噴墨/激光)
- 格式:純文本、PostScript、PCL、RTL (可打印二進制)
- 痛點:分散直打 → 無法審計、大文件 (GIF/JPEG) 浪費紙張、無標題頁、腳本掃描慢
解決方案:中心化打印服務器 + lpadmin 智能過濾
所有打印請求汇聚到單一服務器,由 lpadmin 配置的過濾鏈 自動識別格式、轉換、路由到目標設備。
lpadmin 核心配置參數
| 選項 | 含義 | 本案例值 |
-p | 打印機名稱 | no1316p |
-s | 服務器!打印機 | nolsn099!no1316p |
-o protocol=bsd | BSD 協議 (LPD) | 是 |
-o dest= | 目標設備名 | no1316p |
-T | 內容類型 | PS (PostScript) |
-I | 接受的內容類型 | PostScript |
-v | 設備文件 | /dev/null (網絡打印) |
-i | 介面腳本 (過濾器) | /usr/lib/lp/model/netstandard |
多格式智能過濾腳本邏輯 (netstandard 改造版)
#!/bin/sh
# 標準輸入為打印數據,參數含:用戶、標題、份數、選項...
# 1. 識別格式 (file 命令 / 魔數 / 頭部標記)
# 2. 根據目標打印機能力決定是否轉換
# 3. 調用相應轉換器:
# 文本 → a2ps/enscript → PostScript
# PostScript → 直通 (目標支援 PS) 或 pstops/pstoraster
# PCL/RTL → 直通 (目標支援 PCL) 或 ghostpcl
# 圖片 (GIF/JPEG) → 拒絕或轉為 PS (配置策略)
# 4. 通過 lpr -P 目標打印機 輸出
# 5. 記錄日誌:用戶、文件、格式、頁數、耗時
關鍵避坑經驗
- 文本樓梯效應:Unix 文本
LF 直接發送到 PS 打印機 → 階梯狀。修正:過濾器必須將文本轉 PS (添加換頁、字體指令)
- 二進制垃圾文件:用戶誤打圖片 → 浪費紙墨。策略:過濾器識別非打印格式 → 拒絕並郵件通知用戶
- 標題頁爭議:用戶嫌浪費紙,但無標題頁無法審計。折中:電子日誌記錄完整元數據,物理標題頁可選
- 腳本效能:Shell 腳本處理大文件慢。優化:C 寫過濾器、管道流式處理、避免落地臨時文件
驗證測試矩陣