สร้างปรินเตอร์เทียมพิมพ์ลงไฟล์ Tiff

เอามาจาก ThaiLinuxCafe - tip1 : สร้างปรินเตอร์เทียม สำหรับงานพิมพ์ลงไฟล์ (tiff)

โครงร่าง

  • จะให้ปรินเตอร์เทียมตัวนี้ชื่อ PrintToTiff
  • เวลาพิมพ์ งานพิมพ์คือไฟล์ Tiff จะให้ออกมาอยู่ที่ //smbserver/data/PrintToTiff/tif ตัวจริงอยู่ที่ /samba/data/PrintToTiff/tif
    โดยให้บันทึกวันที่เป็นชื่อไฟล์ เพื่อความสะดวกในการค้นหา
  • ไฟล์ข้อมูลบันทึก ( log file ) จะให้อยู่ที่ //smbserver/data/PrintToTiff/log ตัวจริงอยู่ที่ /smba/data/PrintToTiff/log
    โดยจะเก็บการบันทึกไว้เฉพาะการพิมพ์ครั้งล่าสุด ( ขี้เกียจทำ logrotate )

ที่เซิร์ฟเวอร์
สร้างพาธให้ไฟล์ข้อมูล
# mkdir -p /samba/data/PrintToTiff/tif
# mkdir -p /samba/data/PrintToTiff/log

เปลี่ยนสิทธิ์ให้พาธ PrintToTiff
# chown -R user1:smbgroup /samba/data/PrintToTiff
# chmod -R 0777 /samba/data/PrintToTiff

คิดตั้ง ghostscript เพื่อใช้สำหรับแปลงไฟล์ postscript เป็น tiff
# aptitude install gs

แก้ไขไฟล์คอนฟิกของ samba โดยเพิ่มส่วนของพรินเตอร์ PrintToTiff
# vi /etc/samba/smb.conf
เพิ่มเข้าไปต่อท้ายไฟล์

...
[PrintToTiff]
    path = /samba/data/PrintToTiff/tif
    create mask = 0777
    printing = bsd
    printable= yes
    Print command = DATE=`date +%F`;LOG="/samba/data/PrintToTiff/log";gs -dBATCH -sDEVICE=tiffg3 -sOutputFile=/samba/data/PrintToTiff/tif/$DATE-%s.tif %s > $LOG/smb-PrintToTiff.log;rm %s
    valid users = @smbgroup
    public = yes

เริ่ม samba ใหม่
# /etc/init.d/samba restart

เสร็จแล้วครับ

เครื่องลูกข่ายที่เป็น Windows 98/Me
เพิ่มเครื่องพิมพ์ โดยเลือกเป็นเครื่องพิมพ์อะไรก็ได้ ขอให้ใช้ไดร์ฟเวอร์เป็น postscript ก็ใช้ได้
นิยมใช้เป็น Apple LaserWriter
โดยเลือกให้พิมพ์ไปที่ \\smbserver\PrintToTiff

เครื่องลูกข่ายที่เป็นลินุกส์
ติดตั้ง cups
$ sudo aptitude install cupsys-client cupsys-driver-gimpprint cupsys-driver-gimpprint-data

ถ้าเป็นบรรทัดคำสั่งก็ใช้
$ sudo lpadmin -p PrintToTiff -u allow:all -E -v smb://$USER:$PASSWORD@smbserver/PrintToTiff -m ImageWriter.ppd

หรือถ้าเป็น Ubuntu/Gnome ก็ใช้
System -> Administation -> Printing -> New Printer
1.Printer Connection
NetWork Printer -> Windows Printer (SMB)
!!!! Authentication Required
<<<--- Username : user1
<<<--- Password : YOUR-user1-PASSWORD
<<<--- Host : smbserver
<<<--- Printer : PrintToTiff

2.Printer Driver
Apple - Laser Writer IIg

การประยุกต์ใช้งาน
อาจสร้างเป็น FaxIn ไว้เก็บแฟกซ์เข้า
และ FaxOut ไว้เก็บแฟกซ์ที่ส่งออก
หรืออาจเปลี่ยนเอนจินเป็น pdf เพื่อเอาไว้ใช้แปลงเป็น pdf

update
ตัวอย่าง ทำเป็น FaxOut แบบกระจายไปเป็น ปีพ.ศ./เดือน แบบอัตโนมัติ

...
[PrintToTiff]
    path = /samba/data/FaxOut
    create mask = 0777
    printing = bsd
    printable= yes
    Print command = ROOT="/samba/data/FaxOut";MONTH=`date +%m`;let "YEAR=`date +%G` + 543";FAXDIR="$ROOT/$YEAR/$MONTH";mkdir -p $FAXDIR;gs -dBATCH -sDEVICE=tiffg3 -sOutputFile="$FAXDIR/%s.tif %s > $ROOT/lastlog.log;rm %s
    valid users = @smbgroup
    public = yes

samba: ปรับปรุงสร้างปรินเตอร์เทียม

จากคราวก่อนเรื่อง สร้างปรินเตอร์เทียมพิมพ์ลงไฟล์ Tiff
หลังจากเริ่มเอา lenny มาใช้กับเซิร์ฟเวอร์ ผ่านการอัปเกรด/ดาวน์เกรดแพกเกจ samba หลายครั้ง พบว่าปรินเตอร์เริ่มทำงานรวนเร
สุดท้ายกลายเป็นเขียนสคริปต์แยกออกมาดีกว่า สรุปดังนี้คือ
มีปรินเตอร์ 3 ตัว

  1. FaxOut เอาไว้เก็บสำเนาแฟกซ์ส่งออก
  2. FaxIn เอาไว้เก็บสำเนาแฟกซ์เข้า
  3. PrintToPDF เอาไว้เก็บสำเนาแผนที่ (รวมทั้งอาจทำ annotate เพิ่มได้จาก Inkscape)

ในการพิมพ์แต่ละตัว จะแยกโฟลเดอร์ไปเป็นรายปีและรายเดือนตามลำดับ โดยตั้งชื่อเป็นวันที่วันที่พิมพ์

รายละเอียดดังนี้

ส่วนของ samba
$ sudo vi /etc/samba/smb.conf

...
[FaxOut]
    path = /samba/data/smbprn/tif
    create mask = 0777
    printing = bsd
    printable= yes
    Print command = "/usr/local/bin/d.faxout %s"

[FaxIn]
    path = /samba/data/smbprn/tif
    create mask = 0777
    printing = bsd
    printable= yes
    Print command = "/usr/local/bin/d.faxin %s"

[PrintToPDF]
    path = /samba/data/smbprn/tif
    create mask = 0777
    printing = bsd
    printable= yes
    Print command = "/usr/local/bin/d.printtopdf %s"

...

$ sudo /etc/init.d/samba restart

ส่วนของสคริปต์
$ cd /usr/local/bin
$ sudo vi d.faxout

#!/bin/bash
ROOT="/samba/data"
FAXROOT="$ROOT/FaxOut"
LOG="$ROOT/smbprn/tif"
DATE=`date +%F`
MONTH=`date +%m`
let "YEAR=`date +%G` + 543"
TARGET="$FAXROOT/$YEAR/$MONTH"
mkdir -p $TARGET
chmod 777 $TARGET
gs -dBATCH -sDEVICE=tiffg3 -sOutputFile="$TARGET/$DATE-%s.tif" %s > $LOG/smb-FaxOut.log
rm %s

$ sudo vi d.faxin

#!/bin/bash
ROOT="/samba/data"
FAXROOT="$ROOT/FaxIn"
LOG="$ROOT/smbprn/tif"
DATE=`date +%F`
MONTH=`date +%m`
let "YEAR=`date +%G` + 543"
TARGET="$FAXROOT/$YEAR/$MONTH"
mkdir -p $TARGET
chmod 777 $TARGET
gs -dBATCH -sDEVICE=tiffg3 -sOutputFile="$TARGET/$DATE-%s.tif" %s > $LOG/smb-FaxIn.log
rm %s

$ sudo vi d.printtopdf

#!/bin/bash
ROOT="/samba/data"
FAXROOT="$ROOT/PrintToPDF"
LOG="$ROOT/smbprn/tif"
DATE=`date +%F`
MONTH=`date +%m`
let "YEAR=`date +%G` + 543"
TARGET="$FAXROOT/$YEAR/$MONTH"
mkdir -p $TARGET
chmod 777 $TARGET
gs -dBATCH -sDEVICE=pdfwrite -sOutputFile="$TARGET/$DATE-%s.pdf" %s > $LOG/smb-PrintToPDF.log
rm %s

$ sudo chmod 755 d.faxout d.faxin d.printtopdf

ส่วนของการแมปเครื่องพิมพ์
$ sudo lpadmin -p FaxOut -u allow:all -E -v smb://$USER:$PASSWORD@server/FaxOut
$ sudo lpadmin -p FaxIn -u allow:all -E -v smb://$USER:$PASSWORD@server/FaxIn
$ sudo lpadmin -p PrintToPDF -u allow:all -E -v smb://$USER:$PASSWORD@server/PrintToPDF

เสร็จแล้ว

(ลองกับเซิร์ฟเวอร์ lenny ลูกข่าย sid)