การจัดการเครื่องพิมพ์และการสั่งพิมพ์ไม่ว่าจะเป็นการสั่งพิมพ์ไปยังเครื่องพิมพ์ที่เชื่อมต่อโดยตรงกับเครื่องคอมพิวเตอร์ของเรา หรือจะเป็นการสั่งพิมพ์ไปยังเครื่องพิมพ์ที่อยู่บนเครือข่าย เราจะต้องรู้วิธีในการติดตั้งและตั้งค่าเครื่องพิมพ์ และในการพิมพ์ต้องใช้โปรแกรมในการแปลงข้อมูลจากแอพลิเคชั่นไปเป็นภาษาที่เครื่องพิมพ์เข้าใจซึ่งโปรแกรมมาตรฐานที่ลินุกซ์มีมาให้คือ Common UNIX Printing System (CUPS)
รู้จัก CUPS
CUPS เป็นโปรแกรมที่ทำงานอยู่เบื้องหลังเพื่อให้เราสามารถพิมพ์เอกสารต่างได้ โดยจะแปลงข้อมูลจากรูปแบบเอกสารของแต่ละแอพพลิเคชั่นไปเป็นข้อมูลที่เครื่องพิมพ์เข้าใจ โปรแกรม CUPS จะทำตัวเป็นเหมือนเซอร์ฟเวอร์บนเครื่องคอมพิวเตอร์ที่รอรับข้อมูลที่เราต้องการพิมพ์
CUPS ทำงานอย่างไร
CUPS ประกอบดวยองค์ประกอบหลายส่วนดังนี้
- Configuration Files
- Scheduler
- Job Files
- Log Files
- Filter
- Printer Drivers
- Backend.
ขั้นตอนการทำงานคือเมื่อเราสั่งพิมพ์ ตัว scheduler จะตรวจสอบคำสั่งและและดำเนินการ print job ในขณะเดียวกัน scheduler จะบันทึกกิจกรรมต่างๆลงไฟล์ log
ไฟล์ print job จะถูกสร้างตามข้อกำหนดในไฟล์ configuration และด้วยองค์ประกอบจาก filter, printer driver และ backend จากนั้นจึงส่งไปยังเครื่องพิมพ์
ภาพแสดงการทำงานของ CUPS
Scheduler
CUPS ถูกออกแบบโดยมี scheduler เป็นแกนเพื่อจัดการ print jobs, จัดการคำสั่งต่างๆ มีส่วนที่ผู้ใช้งานสอบถามสถานะของงาน และจัดการ flow ของข้อมูลผ่านส่วนต่างๆของ CUPS
Configuration Files
ในการทำงาน scheduler จะอ่านการตั้งค่าจากไฟล์ configuration หลายๆไฟล์ ไฟล์ configuration ที่สำคัญๆคือ cupsd.conf และ printers.conf ไฟล์ configuration ทั้งหมดจะเก็บอยู่ที่ไดเร็คทอรี่ /etc/cups/
ไฟล์ cupsd.conf จะเก็บการตั้งค่าหลักของระบบเกือบทั้งหมดซึ่งโดยมากจะเกี่ยวกับความปลอดภัยในการใช้งานผ่านเครือข่าย เช่น ระบบงานใดสามารถใช้งานความสามารถด้านเครือข่ายของ CUPS ได้ การแสดงตัวของเครื่องพิมพ์ในเครือข่าย ทั้งนี้จะไม่รวมการตั้งค่าเฉพาะสำหรับแต่ละเครื่องพิมพ์
printers.conf จะเก็บค่าเฉพาะสำหรับแต่ละเครื่องพิมพ์ ข้อมูลของแต่ละเครื่องพิมพ์จะแบ่งเป็นส่วนๆอยู่ในไฟล์ ไฟล์นี้จะถูกสร้างหลังจากเราเชื่อมต่อเครื่องพิมพ์เข้ากับเครื่องคอมพิวเตอร์และห้ามแก้ไขเอง
Job Files
CUPS จะเก็บไฟล์งานพิมพ์ (job file) ที่ต้องการพิมพ์ไว้ที่ไดเร็คทอรี่ /var/spool/cups และหลังจากข้อมูลถูกส่งไปยังเครื่องพิมพ์แล้วไฟล์งานจะหายไป ไฟล์งานที่ขึ้นตนด้วยอักษร d จะเป็นไฟล์ข้อมูลและเป็นส่วนที่เราเห็นใน print queue ส่วนไฟล์ที่ขึ้นต้นด้วยตัวอักษร c จะเป็นไฟล์ควบคุม
Log Files
Scheduler จะบันทึกกิจกรรมต่างๆลงในไฟล์ log ซึ่งอยู่ที่ไดเร็คทอรี่ /var/log/cups
Filters, Printer Drivers, and Backends
CUPS ใช้ filters ในการแปลงรูปแบบข้อมูลในไฟล์ job ไปเป็นรูปแบบที่สามารถพิมพ์ได้ด้วยเครื่องพิมพ์ โดยรูปแบบข้อมูลที่เครื่องพิมพ์รู้จักจะได้มาจาก printer driver ซึ่งจะมีรายละเอียดของเครื่องพิมพ์ที่เชื่อมต่ออยู่โดยไฟล์ printer dirver จะเก็บอยู่ที่ /etc/cups/ppd/ จากนั้น backend จะส่งข้อมูลไปยังเครื่องพิมพ์ต่อไป
การติดตั้ง CUPS
เนื่องจากการพิมพ์เป็นเรื่องพื้นฐานในการใช้งานคอมพิวเตอร์ ดังนั้น CUPS จึงมักจะถูกติดตั้งมาในแต่ละดิสโทรอยู่แล้ว แต่สำหรับบางดิสโทร เช่น เซอร์ฟเวอร์ อาจจะไม่มีการติดตั้ง CUPS มาให้ เราสามารถติดตั้ง CUPS ได้ดังนี้
– CentOS: sudo yum install cups
– OpenSUSE: sudo zypper install cups
– Ubuntu: sudo apt-get install cups
นอกจากโปรแกรม CUPS แล้วยังมี cups-common และ libcups2 ที่ต้องถูกติดตั้งด้วยโดยไฟล์ทั้งหมดจะถูกติดตั้งมาพร้อมกันด้วยคำสั่งด้านบน
การจัดการ CUPS
หลังจากติดตั้ง CUPS แล้วเราจะเริ่มต้นใช้งานและจัดการ CUPS daemon ได้ด้วยคำสั่งต่งๆดังนี้
เริ่มต้นใช้งาน CUPS daemon : sudo /etc/init.d/cups start
เริ่มต้น CUPS daemon ใหม่ (restart) อีกครั้ง : sudo /etc/init.d/cups restart
ตรวจสอบว่า CUPS daemon ทำงานอยู่ : sudo /etc/init.d/cups status
หยุดการทำงานของ CUPS daemon : sudo /etc/init.d/cups stop
กำหนดให้เริ่มต้น CUPS ทุกครั้งที่บู๊ตเครื่องคอมพิวเตอร์ : sudo update-rc.d cups enable
หากเป็นการเริ่มต้น CUPS ครั้งแรกหลังจากติดตั้ง : sudo update-rc.d -f cups defaults
หากต้องการยุติการเริ่มต้น CUPS ทุกครั้งที่บู๊ตเครื่อง : sudo update-rc.d cups disable.
การตั้งค่าเครื่องพิมพ์โดยใช้ GUI
ลินุกซ์แต่ละดิสโทรจะมีเครื่องมือที่เป็น GUI ให้เราจัดการเครื่องพิมพ์ ในขั้นตอนการตั้งค่าเครื่องพิมพ์เราต้องเชื่อมต่อและเปิดใช้งานเครื่องพิมพ์ไว้ซึ่งหน้าจอจะแสดงเครื่องพิมพ์ที่เราใช้ขึ้นมาให้เลือก
ภาพแสดงไอคอนสำหรับการจัดการเครื่องพิมพ์
การเพิ่มเครื่องพิมพ์ผ่านเว็บของ CUPS
CUPS มีส่วนติดต่อผู้ใช้งานในแบบเว็บมาให้ด้วย ซึ่งเราสามารถตั้งค่าต่างๆผ่านเว็บของ CUPS ซึ่งโปรแกรมจะนำค่าที่เรากำหนดไปปรับปรุงไฟล์การตั้งค่าต่างๆผ่านทาง CGI script เราสามารถใช้งานเว็บของ CUPS โดยใช้โปรแกรมบราวเซอร์แล้วไปที่ http://localhost:631 ด้วยเว็บ CUPS เราสามารถ เพิ่ม/ลบ เครื่องพิมพ์ทั้งที่เป็นเครื่องพิมพ์ที่เชื่อมต่อตรงกับเครื่องคอมพิวเตอร์ (local pronter) และเครื่องพิมพ์ที่เชื่อมต่อกับเครือข่าย (remote printer) ตั้งค่าต่างๆของเครื่องพิมพ์ แชร์การใช้เครื่องพิมพ์ จัดการงานพิมพ์ (print job) และติดตามสถานะต่างๆ
ภาพแสดงหน้าจอเว็บสำหรับการจัดการ CUPS
การพิมพ์ด้วย GUI
ในแอพพลิเคชั่นส่วนใหญ่เราสามารถสั่งพิมพ์ได้งานโดยตรงจากภายในแอพพลิเคชั่น ซึ่งจะแสดงหน้าจอให้เราเลือกเครื่องพิมพ์ (หรืออาจจะเลือกเป็นไฟล์ก็ได้ถ้าต้องการบันทึกเป็นไฟล์) กำหนดหน้าที่ต้องการพิมพ์ จำนวนที่ต้องการพิมพ์ คุณภาพ สี เป็นต้น เมื่อเราสั่งพิมพ์งานจะถูกส่งไปยัง CUPS ซึ่งเราสามารถติดตามสถานะได้จากเว็บของ CUPS นั่นเอง.
การพิมพ์จากหน้าต่าง command
ในการพิมพ์งานจากหน้าต่าง command เราใช้คำสั่ง lp ในการสั่งพิมพ์ไฟล์ที่เป็นไฟล์ข้อความ ไฟล์postscript ไฟล์PDF และไฟล์รูปภาพ อันที่จริง lp เป็นส่วนรับคำสั่งจากผู้ใช้งานซึ่งจะส่งอินพุทที่ได้ไปยังโปรแกรม lpr อีกต่อหนึ่ง โดยมากคำสั่งพิมพ์แบบนี้จะถุกใช้กับการเขียนสคริปเพื่อให้พิมพ์สื่งที่ต้องการตามขั้นตอนต่างๆอย่างอัตโนมัติ
คำสั่ง lp
เราสามารถใช้คำสั่ง lp ในการทำงานได้เหมือนกับการทำงานผ่าน GUI ตัวอย่างการใช้งานดังนี้
lp filename : สั่งพิมพ์ไฟล์ไปยังเครื่องพิมพ์ที่เป็นค่าตั้งต้น (default printer)
lp -d printer filename : สั่งพิมพ์ไฟล์ไปยังเครื่องพิมพ์ที่กำหนด กรณีที่เชื่อมต่อมากกว่าหนึ่งเครื่อง
program | lp : กำหนดให้พิมพ์ผลลัพธ์ของโปรแกรมออกทางเครื่องพิมพ์
echo string | lp : กำหนดให้พิมพ์ข้อความออกทางเครื่องพิมพ์
lp -n number <filename> : สั่งพิมพ์ตามจำนวนสำเนาที่กำหนด
lpoptions -d printer : กำหนดเครื่องพิมพ์ตั้งต้น (default printer)
lpq -a : แสดงสถานะของคิวงานพิมพ์
Lpadmin : ตั้งค่าคิวงานพิมพ์
นอกจากคำสั่ง lp แล้วยังมีคำสั่ง lpoptions ซึ่งเป็นเครื่องมือที่ใช้ในการตั้งค่าเครื่องพิมพ์ เราสามารถศึกษาการใช้งาน lpoptions ได้ด้วยคำสั่ง lpoptios help
การจัดการงานพิมพ์
ในการจัดการงานพิมพ์ยังมีคำสั่งต่างๆที่เราสามารถใช้งานเพื่อติดตามผลการพิมพ์ การจัดการคิวการพิมพ์ ยกเลิกหรือสลับงานพิมพ์ ดังนี้
lpstat -p -d : แสดงเครื่องพิมพ์ที่เชื่อมต่ออยู่ทั้งหมดพร้อมสถานะของเครื่องพิมพ์
lpstat -a :ตรวจสอบสถานะการเชื่อมต่อของเครื่องพิมพ์และเลขที่งาน
cancel job-id หรือ lprm job-id : ยกเลิกงานพิมพ์ตามเลขที่งานที่กำหนด
lpmove job-id newprinter : ย้ายงานพิมพ์ไปเครื่องพิมพ์อื่น
การใช้งานไฟล์ PostScript
PostScript เป็นภาษามาตรฐานในการอธิบายการจัดหน้าของงานพิมพ์โดยหลักๆจะเป็นการจัการขนาดของฟอนต์ ขนาดของภาพในแบบเวคเตอร์ เพื่อให้ได้คุณภาพของงานพิมพ์ตามที่ต้องการ รูปแบบของไฟล์ postscript จะเป็นข้อความซึ่งต้องแปลด้วยตัวแปรภาษา postscript (PostScript interpreter) รูปแบบของภาษา postscript พัฒนาโดย Adobe ช่วงต้นปี 1980 เพื่อใช้ในการส่งข้อมูลไปยังเครื่องพิมพ์ ความสามารถของ postscript คือ
- สามารถใช้งานได้กับทุกเครื่องพิมพ์ที่รองรับการใช้ postscript ซึ่งเครื่องพิมพ์รุ่นใหม่ๆรองรับหมดอยู่แล้ว
- โปแกรมที่เข้าใจ postscript สามารถพิมพ์งานออกมาได้
- ข้อมูลการจัดหน้าจะถูกฝังอยู่ในแต่ละหน้าของเอกสาร
การใช้งาน enscript
enscript เป็นเครื่องมือที่ใช้ในการแปลงไฟล์ข้อความไปเป็นไฟล์ postscript หรือไฟล์ในรูปแบบอื่นๆ เช่น Rich Text Format (RTF) และ HyperText Markup Language (HTML) ตัวอย่างเช่น เราสามารถแปลงไฟล์ข้อความไปเป็นไฟล์ postscript ที่จัดหน้าแบบ 2 คอลัมภ์โดยใช้คำสั่ง enscript -2 -r -p psfile.ps textfile.txt. ในคำสั่งนี้มีการใช้ออปชั่น -r(rotate) ซึ่งทำให้สามารถพิมพ์ได้ทั้งแบบแนวตั้ง (portrait) และแนวนอน (landscape) ซึ่งจะพิจารณาความกว้างและความสูงของกระดาษขนาดกระดาษและปรับจำนวนหน้าให้เหมาะสม ตัวอย่างการใช้คำสั่งอื่นๆ เช่น
enscript -p psfile.ps textfile.txt : แปลงไฟล์ข้อความไปเป็นไฟล์ postscript (บันทึกในชื่อ psfile.ps)
enscript -n -p psfile.ps textfile.txt : แปลงไฟล์ข้อความไปเป็นไฟล์ postscript ที่มี n คอลัมภ์ (รองรับ 1-9)
enscript textfile.txt :พิมพ์ไฟล์โดยใช้เครื่องพิมพ์ตั้งต้น
การแปลงไฟล์ระหว่าง PostScript และ PDF
ถึงแม้ผู้ใช้งานจะคุ้นเคยกับการใช้งานไฟล์ PDF มากกว่าและไม่ค่อยได้ใช้ไฟล์ postscript แต่ในทางเทคนิกไฟล์ postscript ยังคงมีความสำคัญอยู่ บางครั้งเราอาจต้องการแปลงไฟล์ระหว่างไฟล์ postscript และไฟล์ PDF ซึ่งโปรแกรมที่ใช้ในการแปลงไฟล์คือ ps2pdf และ pdf2ps โดยทั้ง 2 โปรแกรมเป็นส่วนหนึ่งของเพคเกจ ghostscript ที่ติดตั้งมากับทุกดิสโทรอยู่แล้ว นอกจากนี้ยังมีโปรแกรม pstopdf และ pdftops ซึ่งเป็นส่วนหนึ่งของเพคเกจ popple ที่เราสามารถใช้ในการแปลงไฟล์ได้แต่ต้องติดตั้งแพคเกจเอง และยังมีโปรแกรม convert ซึ่งเป็นโปรแกรมแปลงไฟล์สารพัดประโยชน์ที่มากับเพคเกจ ImageMagick ตัวอย่างการใช้งาน เช่น
pdf2ps file.pdf : แปลงจากไฟล์ postscript ไปเป็น ไฟล์ PDF
ps2pdf file.ps : แปลงจากไฟล์ PDF ไปเป็นไฟล์ postscript
pstopdf input.ps output.pdf : แปลงจากไฟล์ postscript ไปเป็น ไฟล์ PDF โดยระบุชื่อไฟล์
pdftops input.pdf output.ps : แปลงจากไฟล์ PDF ไปเป็นไฟล์ postscript โดยระบุชื่อไฟล์
convert input.ps output.pdf : แปลงจากไฟล์ postscript ไปเป็น ไฟล์ PDF โดยระบุชื่อไฟล์
convert input.pdf output.ps : แปลงจากไฟล์ PDF ไปเป็นไฟล์ postscript โดยระบุชื่อไฟล์
การดูไฟล์ PDF
ลินุกซ์มีโปรแกรมและแอพพลิเคชั่นที่ใช้อ่านไฟล์ PDF อยู่มากมายรวมถึงชุดแอพพลิเคชั่นสำนักงานอย่าง LibreOffice ตัวอ่านไฟล์ PDF ที่นิยมกันมี Evince Okular GhostView และ Xpdf
การจัดการไฟล์ PDF ด้วย pdftk
pdftk เป็นแอพพลิเคชั่นที่เราใช้ในการดำเนินการกับไฟล์ PDF เช่น รวมไฟล์(merge) แบ่งไฟล์(split) หรือหมุนหน้าเอกสาร(rotate) ความสามารถประกอบด้วย การรวมไฟล์(Merging) การแบ่งส่วนไฟล์(Splitting) การหมุนหน้าเอกสาร(Rotating) ซ่อมไฟล์ PDF ที่เสียหาย ดึงบางหนาในไฟล์ออกมาเป็นไฟล์ต่างหาก เข้ารหัสและถอดรหัสไฟล์ PDF เพิ่ม/แก้ไข/ส่งออก metadata ของไฟล์ ส่งออกบุ๊คมาร์คเป็นไฟล์ข้อความ กรอกข้อมูลลงในแบบฟอร์มที่เป็นไฟล์ PDF เป็นต้น การติดตั้งแอพพลิเคชั่น pdftk ทำได้โดยใช้คำสั่งดังนี้
Ubuntu : sudo apt-get install pdftk
Ubuntu 18.04 : snap install pdftk (ไฟล์ไบนารี่จะอยู่ที่ /snap/bin/pdftk)
CentOS 6 : sudo yum install pdftk
openSUSE : sudo zypper install pdftk
การใช้งาน pdftk
ตัวอย่างการใช้งาน pdftk ในแบบ command
pdftk 1.pdf 2.pdf cat output 12.pdf : ให้รวมไฟล์ 1.pdf และ ไฟล์ 2.pdf และบันทึกเป็นไฟล์ชื่อ 12.pdf
pdftk A=1.pdf cat A1-2 output new.pdf : ดึงเฉพาะหน้าที่ 1-2 จากไฟล์ 1.pdf และบันทึกเป็นไฟล์ชื่อ new.pdf
pdftk A=1.pdf cat A1-endright output new.pdf : หมุนทุกๆหน้าตามเข็มนาฬิกา 90 องศาและบันทึกเป็นไฟล์ชื่อ new.pdf
การเข้ารหัสไฟล์ PDF
ถ้าเราต้องการให้ไฟล์ PDF สามารถเปิดได้โดยผู้รับเท่านั้น เราสามารถกำหนดรหัสผ่านสำหรับเปิดไฟล์ได้โดยใช้ออปชั่น user_pw ตัวอย่างเช่น
$ pdftk public.pdf output private.pdf user_pw PROMPT
เป็นการสั่งให้เอาไฟล์ public.pdf มาใส่รหัสผ่านและบันทึกเป็นไฟล์ชื่อ private.pdf โดยออปชั่น user_pw PROMPT หมายถึงให้หน้าจอสอบถามให้เราใส่รหัสผ่านซึ่งจะรองรับสูงสุด 32 ตัวอักษร เมื่อเราส่งไฟล์ไปถึงผู้รับ ผู้รับจะต้องใส่รหัสเพื่อเปิดไฟล์ดังตัวอย่าง
ภาพแสดงการใส่รหัสผ่านก่อนเปิดไฟล์ pdf
การใช้ Ghostscript
Ghostscript เป็นตัวแปรภาษาที่ถูกใช้อย่างกว้างขวางสำหรับภาษา Postscript และภาษา PDF เราสามารถเรียกใช้โปรแกรมด้วยคำสั่ง gs ความสามารถของโปรแกรม gs จะเหมือนกันกับ pdftk แต่การใช้งาน gs อาจจะยากสักหน่อยด้วยออปชั่นทีมีอยู่จำนวนมาก สามารถดูรายละเอียดเพิ่มเติมได้ด้วยคำสั่ง man gs ตัวอย่างการใช้งาน gs เช่น
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=all.pdf file1.pdf file2.pdf file3.pdf : เป็นการรวมไฟล์ PDF 3 ไฟล์เป็นไฟล์เดียวกัน
gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dDOPDFMARKS=false -dFirstPage=10 -dLastPage=20\
-sOutputFile=split.pdf file.pdf : เป็นการดึงหน้าที่ 10-20 จากไฟล์ file.pdf
การใช้เครื่องมืออื่นๆ
ยังมีเครื่องมืออื่นๆที่ใช้ทำงานกับไฟล์ pdf เช่น pdfinfo flpsed และ pdfmod โดย pdfinfo สามารถสกัดข้อมูลเกี่ยวกับไฟล์ pdf โดยเฉพาะไฟล์ที่มีขนาดใหญ่ และไม่มีเครื่องมืออื่นที่เป็น GUI สำหรับ flpsed สามารถเพิ่มข้อมูลลงในเอกสาร PostScript ซึ่งมีประโยชน์มากในการกรอกแบบฟอร์มหรือการเพิ่มคอมเมนท์ลงในไฟล์ pdf ส่วน pdfmod เป็น GUI แอพพลิเคชั่นที่ใช้งานได้ง่ายสำหรับแก้ไขไฟล์ pdf โดยสามารถเรียงลำดับ หมุนหน้า เอาบางหน้าออก ส่งออกรูปในเอกสาร แก้ไขหัวเรื่อง หัวข้อ และชื่อผู้แต่ง เพิ่มคีย์เวอร์ด และควบรวมเอกสาร