ติดตั้งเครื่องพิมพ์ให้เครือข่าย

# aptitude install cupsys cupsys-bsd \
cupsys-client cupsys-common cupsys-dbg \
cupsys-driver-gimpprint \
cupsys-driver-gutenprint

Do you want to set up the BSD lpd compatibility server?
<<<--- No

ปรับตั้ง cupsys
# dpkg-reconfigure cupsys
Do you want CUPS to print unknown jobs as raw jobs?
<<<--- Yes
Printer communication backends:
<<<--- [DEFAULT]

ปรับตั้งให้สามารถใช้งานผ่านเว็บ ใช้พอร์ต 631 แบบไม่ต้องล๊อกอิน
# vi /etc/cups/cupsd.conf

...
#--- Listen localhost:631
Listen *:631
...
#BrowseAllow @LOCAL
BrowseAllow all
...

<Location />
  Order allow,deny
# Allow localhost
  Allow all
</Location>

<Location /admin>
#  Encryption Required
  AuthType None
  Order allow,deny
# Allow localhost
  Allow all
</Location>

<Location /admin/conf>
  AuthType None
  Require user @SYSTEM
  Order allow,deny
# Allow localhost
  Allow all
</Location>
...

# /etc/init.d/cupsys restart

สามารถใช้งานผ่านบราวเซอร์ในเครือข่ายได้แล้ว
เช่น http://192.168.1.5:631/

debian: บันทึกเครื่องพิมพ์อิงก์เจ็ต epson

สำหรับเครื่องพิมพ์ในลินุกซ์ เราเรียกใช้จาก cups ผ่านบราวเซอร์ที่พอร์ต 631 ซึ่งก็ใช้งานสะดวกพอควร
แต่ถ้าหากว่าเป็นเครื่องพิมพ์อิงก์เจ็ตที่ต้องมีการตรวจดูระดับหมึกด้วย การใช้งานผ่าน cups จะดูระดับหมึกไม่ได้

สำหรับเครื่องพิมพ์ Epson เดเบียนจะมีแพกเกจที่ทำหน้าที่ดังกล่าว ชื่อ mtink
ติดตั้งดังนี้

ติดตั้งแพกเกจ
$ sudo aptitude install mtink

แก้ไขให้เราสามารถใช้งานเครื่องพิมพ์ได้ โดยปรับตั้งให้เราไปอยู่ในกรุ๊ปของเครื่องพิมพ์ คือ lp
สมมุติว่าเราชื่อ user1
$ sudo usermod -G lp user1
หรือถ้ามีชื่อผู้ใช้หลายคน อาจแก้ไขที่ไฟล์ /etc/group โดยตรง
$ sudo vi /etc/group

...
lp:x:7:cupsys,user1
...

เรียกใช้งานด้วยคำสั่ง mtink

  • อาจต้องล๊อกเอาต์ออกจากระบบหนึ่งครั้ง การปรับตั้งจึงจะสมบูรณ์
  • การตอบสนองของโปรแกรม ค่อนข้างช้า แต่ก็ใช้งานได้ราบรื่นดี
Topic: 

debian: สร้างเครื่องพิมพ์ socket ให้ cups

มีปัญหาเรื่อง cups พิมพ์ผ่านเครือข่ายไม่ได้ เป็นอยู่เครื่องเดียว ไม่ทราบว่าเป็นเพราะอะไร

แก้ชั่วคราวด้วยการสร้างซอคเก็ตสำหรับรับงานพิมพ์ผ่านเครือข่าย (เผื่อเอาไว้เวลาอัปเกรดรุ่นบนเดเบียนแล้ว cups ชอบตายด้วย)

เอาความรู้จาก debian: ปรับปรุง HylaFax Client โดยใช้ perl สร้างเครื่องพิมพ์เทียมขึ้นมา โดย

ที่เครื่องปรินต์เซิร์ฟเวอร์
สร้างไฟล์ perl รับงานพิมพ์ผ่าน socket
สมมุติว่าเครื่องพิมพ์ชื่อ brother ติดตั้งไดร์ฟเวอร์ไว้เรียบร้อยแล้ว
เราจะสร้างสคริปต์สำหรับรับงานพิมพ์ผ่านทาง socket หมายเลข 5692
# vi /usr/local/bin/brother-print

#!/usr/bin/perl

# Daniel E. Markle 
# 20031114 Revision 0.1

# This program starts up a daemon which will watch for a postscript file
#  coming in from CUPS, then launch pyla to send it as a fax.
# Use it with the socket://localhost:5691 URL in cups.

# Issues:
#    -security, make sure only localhost can see this port, it allows anyone
#      who can stream data to this port to popup pyla on your desktop
#    -must be ran as the user or the window may not pop up at the right
#      place, if at all

# ***CONFIGURE ME HERE

# Port to listen on, use socket://localhost: in cups
my $MY_PORT = 5692;

# Printer name
my $PRINTER = "brother";

# Temporary file storage, this is a file not a folder
my $TMP_FILE_NAME = "/tmp/brotherprint";

# ***END CONFIGURATION

# ----- You shouldn't need to touch anything beyond this point -----

use IO::Socket::INET;

# check to make sure we can use the temp file
open ( TMPFILE, ">", $TMP_FILE_NAME )
   or die "Can not open temp file $TMP_FILE_NAME, " .
   "check to make sure it is not owned by another user";
close ( TMPFILE );

my $data;
my $server = IO::Socket::INET->new (
   LocalPort => $MY_PORT,
   Type => SOCK_STREAM,
   Reuse => 1,
   Listen => 1
   ) or die "Could not start server process";

while ( my $job = $server->accept() ) {
   open ( TMPFILE, ">", $TMP_FILE_NAME );
   while ( <$job> ) {
      print TMPFILE $_;
      }
   close ( TMPFILE );
   close $job;
   `lpr -P "$PRINTER" "$TMP_FILE_NAME"`;
   unlink "$TMP_FILE_NAME";
   }

สร้างสคริปต์สำหรับเปิดปิดการใช้งาน
เอาไว้ที่ /etc/init.d/ (ไม่ค่อยดีเท่าไหร่ ควรเอาไว้ที่อื่นแล้วสร้างลิงก์มาจะดีกว่า)
# vi /etc/init.d/brother-printd

#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/bin/brother-print
NAME=brother-print
DESC="Pseudo printer for Brother"

test -x $DAEMON || exit 0

case "$1" in
        start)
                echo -n "Starting $DESC: "

                start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
                        --chuid $USER --background --make-pidfile \
                        --exec $DAEMON -- $DAEMON_OPTS

                echo "$NAME."
                ;;

        stop)
                echo -n "Stopping $DESC: "

                start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
                        --oknodo

                echo "$NAME."
                ;;

        restart|force-reload)
                echo -n "Restarting $DESC: "

                start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
                        --oknodo

                sleep 1

                                                                                    
                start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
                        --chuid $USER --background --make-pidfile \
                        --exec $DAEMON -- $DAEMON_OPTS

                echo "$NAME."
                ;;

        *)
                N=/etc/init.d/$NAME
                echo "Usage: $N {start|stop|restart|force-reload}" >&2
                exit 1
                ;;
esac

exit 0

สั่งเปิดใช้งานเมื่อเริ่มเปิดเครื่อง และสั่งเปิดใช้งานเลย
# update-rc.d brother-printd defaults
# /etc/init.d/brother-printd start

ที่เครื่องลูกข่าย
เปิดใช้งานด้วยบราวเซอร์ http://localhost:631
ให้ตั้งเครื่องพิมพ์ไปที่ Device URI: socket://server:5692
โดยใช้ไดร์ฟเวอร์เป็น Generic Postscript Printer

หรือสั่งด้วยบรรทัดคำสั่งว่า
$ sudo lpadmin -p brother -E -v socket://server:5692

เสร็จเรียบร้อยแล้ว สามารถพิมพ์ผ่านเครือข่ายได้แล้ว

debian: แก้ปัญหา cups

ปกติเวลาจะติดตั้งเครื่องพิมพ์เครือข่าย จะใช้การติดตั้งผ่านเว็บ ทางพอร์ต 631
แต่ปัญหาคือ สำหรับเครื่องพิมพ์ที่ต่ออยู่กับเครื่องวินโดวส์ จะไม่สามารถติดตั้งผ่านเว็บแบบนั้นได้
ต้องติดตั้งผ่าน gnome-cups-manager คือ System -> Administration -> Printing

ผมลองติดตั้งเครื่องพิมพ์ Brother MFC-7420
พบว่าต้องติดตั้งไดร์เวอร์สองตัวคือ brmfc7420lpr-2.0.1-1.i386.deb และ cupswrapperMFC7420-2.0.1-1.i386.deb
เมื่อติดตั้งเสร็จจึงเรียก gnome-cups-manager อีกทีนึง แต่พอติดตั้งเสร็จแล้ว เขาไม่ยอมบันทึกค่าให้ ลองย้อนมาดูล๊อกไฟล์ที่ /var/log/cups/error_log จึงทราบว่าเขาไม่ยอมคัดลอกไฟล์ MFC7420.ppd ไปยังไดเรคทอรี่ /usr/share/ppd
ก็เลยคัดลอกไฟล์ด้วยมือ
$ sudo cp /usr/share/cups/model/MFC7420.ppd /usr/share/ppd

ก็จะสามารถใช้งานเครื่องพิมพ์เครือข่ายวินโดวส์ได้แล้ว

update: แก้ปัญหาพิมพ์ไปวินโดวส์ไม่ได้

บางครั้งเวลาอัปเกรดแพกเกจ อาจเกิดปัญหาพิมพ์ไปยังเครื่องพิมพ์วินโดวส์ไม่ได้
แก้ปัญหาด้วยการ ถอดและลงไดรฟเวอร์ปรินเตอร์ใหม่

update2: 50-08-20 - แก้ปัญหาพิมพ์ผ่านเครือข่ายไม่ออก

บางครั้งเวลาเลือกเปลี่ยนไดรฟเวอร์เครื่องพิมพ์ให้เหมาะสมกับเครื่องพิมพ์นั้น ๆ เมื่อเปลี่ยนแล้วพิมพ์ผ่านเครือข่ายไม่ออก
ดู /var/log/cups/error_log แล้วแก้ปัญหาโดยต้องเปลี่ยนการอนุญาตใช้ไฟล์ของ cache ของ cups
$ sudo chmod 660 /var/cache/cups/*
$ sudo chown root:lp /var/cache/cups/*

โดยให้เราเข้าไปเป็นสมาชิกของกลุ่ม lp
$ sudo usermod -G lp $USER
(แต่ผมใช้วิธีเข้าไปแก้ไฟล์ /etc/group ตรง ๆ )

update3: 50-09-06 - การพิมพ์ไปยังเครื่องวินโดวส์

การพิมพ์ไปเครื่องวินโดวส์
การพิมพ์ไปเครื่องวินโดวส์ อาจต้องปรับแก้ /etc/cups/mime.convs ลบคอมเมนต์บรรทัด raw filter ออก
$ sudo vi /etc/cups/mime.convs
...
application/octet-stream        application/vnd.cups-raw        0       -
...

(ลองบน sid เครื่องนึงต้องแก้ อีกเครื่องนึงไม่ต้องแก้ ยังงงอยู่ครับ)
เอามาจาก: Debian and Windows Shared Printing mini-HOWTO

update4: 51-01-11 - ปัญหา Upgrade Required

แก้ปัญหา Upgrade Required
เกิดเวลาเราปรับตั้งเครื่องพิมพ์ผ่านบราวเซอร์
ปรับแก้ที่ /etc/cups/cupsd.conf โดยเติม
DefaultEncryption Never

แล้วสั่งเริ่มใหม่
$ /etc/init.d/cupsd.conf restart
เอามาจาก CUPS: 426 - Upgrade Required

update5: 51-04-22 - ปัญหาหาไฟล์ ppd ไม่พบ

ถ้าติดตั้งใหม่แล้วโดนรายงานว่า หาไฟล์ /usr/share/cups/model/MFC7420.ppd ไม่พบ
ให้สร้างไฟล์เปล่าขึ้นมา แล้วติดตั้งใหม่ เขาจะสร้างไฟล์ใหม่ขึ้นมาแทน
# mkdir -p /usr/share/cups/model
# touch /usr/share/cups.model/MFC7420.ppd
# aptitude reinstall cupwrappermfc7420
# /etc/init.d/cupsys restart

update6: 55-07-08 - ตั้งค่าความละเอียดและขนาดกระดาษ

  • ส่วนบุคคล แก้ที่ไฟล์ ~/.cups/lpoptions
  • ระบบส่วนรวม แก้ที่ไฟล์ /etc/cups/lpoptions

สมมุติว่าจะให้พิมพ์ไปเครื่องพิมพ์ brother โดยตั้งความละเอียดที่ 600dpi และขนาดกระดาษ A4

Dest brother Resolution=600dpi PageSize=A4

debian: แก้ปัญหางานพิมพ์ "socket failed"

จากเรื่อง debian: สร้างเครื่องพิมพ์ socket ให้ cups
พบว่าหลังปรับรุ่น cups เป็นรุ่น 1.4.4-1 แล้วมีปัญหาว่าเครื่องพิมพ์แบบ socket พิมพ์ไม่ออก

ค้นพบว่า มีบั๊กอยู่ตรงไดเรคทอรี่ backend โดยให้เพิ่มข้ออนุญาตในการอ่านและรัน

$ sudo chmod go+rx /usr/lib/cups/backend

ที่มา: Bug#586324: Printing fails with "/usr/lib/cups/backend/socket failed" fixed for me

Topic: