Mục tiêu chương
Sau khi học xong chương này, bạn sẽ nắm được các kỹ năng cốt lõi sau
Cài đặt CUPS
Cài đặt gói cups và cups-client trên Fedora/RHEL và Ubuntu, khởi động dịch vụ cupsd và quản lý qua systemctl.
CUPS Web Admin
Sử dụng giao diện web quản trị CUPS tại http://localhost:631 để thêm, xóa, cấu hình máy in và quản lý hàng đợi in.
Print Settings GUI
Dùng công cụ system-config-printer để cấu hình máy in cục bộ và mạng trên hệ thống GNOME/Fedora.
Lệnh in ấn dòng lệnh
Thành thạo các lệnh lp, lpr, lpq, lprm để in file, xem hàng đợi, và hủy lệnh in từ terminal.
File cấu hình CUPS
Hiểu cấu trúc /etc/cups/cupsd.conf, printers.conf và classes.conf để tùy chỉnh hành vi máy chủ in.
In từ Windows & Samba
Cấu hình CUPS để nhận lệnh in từ Windows qua PostScript driver và chia sẻ máy in Linux qua Samba/SMB.
Lý thuyết
Tổng quan về CUPS
CUPS (Common Unix Printing System) là hệ thống in ấn tiêu chuẩn trên Linux. Daemon cupsd lắng nghe trên TCP port 631 để cung cấp giao diện web quản trị và chia sẻ máy in. Các file cấu hình nằm trong /etc/cups/.
# Fedora / RHEL
$ sudo dnf install cups cups-client
# Ubuntu / Debian
$ sudo apt install cups cups-client
# Khởi động và kích hoạt dịch vụ CUPS
$ sudo systemctl enable --now cups
Created symlink /etc/systemd/system/multi-user.target.wants/cups.service
$ sudo systemctl status cups
● cups.service - CUPS Scheduler
Active: active (running) since Mon 2025-01-15 10:00:00 EDT; 5s ago
Main PID: 1234 (cupsd)
File cấu hình CUPS
Thư mục /etc/cups/ chứa các file cấu hình quan trọng. File cupsd.conf định nghĩa quyền truy cập, xác thực và hành vi của daemon. File printers.conf lưu thông tin các máy in đã cấu hình.
LogLevel warn
Listen localhost:631
Listen /run/cups/cups.sock
Browsing No
BrowseLocalProtocols dnssd
# Cho phép quản trị từ xa
Port 631
<Location />
Order allow,deny
Allow @LOCAL
</Location>
<Location /admin>
Require user @SYSTEM
Order allow,deny
</Location>
Giao diện Web CUPS (localhost:631)
CUPS cung cấp giao diện web quản trị tại http://localhost:631. Từ đây bạn có thể thêm máy in, quản lý hàng đợi, và cho phép quản trị từ xa. Để mở firewall cho port 631:
# Mở firewall cho CUPS (port 631)
$ sudo firewall-cmd --permanent --add-service=ipp
success
$ sudo firewall-cmd --reload
success
# Khởi động lại CUPS sau khi thay đổi cấu hình
$ sudo systemctl restart cups
# Kiểm tra port 631 đang lắng nghe
$ ss -tupln | grep 631
tcp LISTEN 0 5 127.0.0.1:631 0.0.0.0:* users:(("cupsd",pid=1234))
Lệnh in ấn từ dòng lệnh
Linux cung cấp nhiều lệnh để in file và quản lý hàng đợi in từ terminal. Các lệnh quan trọng bao gồm lp, lpr, lpq, và lprm.
# In một file với lp
$ lp /etc/hosts
request id is HP_LaserJet-1 (1 file(s))
# In với máy in cụ thể và số bản sao
$ lp -d HP_LaserJet -n 2 report.pdf
request id is HP_LaserJet-2 (1 file(s))
# Xem hàng đợi in
$ lpq
HP_LaserJet is ready and printing
Rank Owner Job File(s) Total Size
active chris 1 hosts 1024 bytes
# Hủy lệnh in theo job ID
$ lprm 1
dfA001localhost dequeued
# Xem danh sách máy in đã cấu hình
$ lpstat -p
printer HP_LaserJet is idle. enabled since Mon 15 Jan 2025
$ lpstat -d
system default destination: HP_LaserJet
Công cụ system-config-printer
Công cụ system-config-printer cung cấp giao diện đồ họa để quản lý máy in trên Fedora/RHEL. Đây là cách được khuyến nghị vì tạo ra file cấu hình tương thích với cách CUPS service khởi động.
# Cài đặt công cụ
$ sudo dnf install system-config-printer
# Khởi động GUI (background)
$ system-config-printer &
# Xem danh sách driver máy in hỗ trợ
$ lpinfo -m | head -20
drv:///sample.drv/dymo.ppd Dymo Label
drv:///sample.drv/epson-dot-matrix.ppd Epson 9-pin Series
drv:///sample.drv/generpcl.ppd Generic PCL 6/PCL XL Printer
# Xem các loại kết nối máy in
$ lpinfo -v
network socket
network ipp
direct usb://HP/LaserJet%20P1005?serial=CNB3D14343
In ấn qua Samba từ Windows
Bạn có thể in từ Windows sang CUPS bằng cách dùng PostScript driver với URL: http://printservername:631/printers/targetPrinter. Cũng có thể tạo Raw Print Queue để dùng native Windows driver.
# Cài đặt Samba để chia sẻ máy in
$ sudo dnf install samba samba-common
# Thêm cấu hình [printers] vào smb.conf
$ sudo nano /etc/samba/smb.conf
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = yes
writable = no
printable = yes
# URL in từ Windows
http://192.168.1.100:631/printers/HP_LaserJet
Lab Thực Hành
Kịch bản: Cài đặt và cấu hình máy chủ in CUPS trên Fedora, thêm máy in, kiểm tra in ấn từ dòng lệnh
Cài đặt CUPS
Cài đặt gói cups và cups-client, sau đó khởi động và kích hoạt dịch vụ.
$ sudo dnf install -y cups cups-client
Installed: cups-2.4.11-1.fc42.x86_64
$ sudo systemctl enable --now cups
Created symlink /etc/systemd/system/multi-user.target.wants/cups.service
$ sudo systemctl status cups | grep Active
Active: active (running) since Mon 2025-01-15 10:00:00 EDT
Mở firewall cho CUPS
Cho phép kết nối từ mạng đến CUPS qua firewalld.
$ sudo firewall-cmd --permanent --add-service=ipp
success
$ sudo firewall-cmd --permanent --add-port=631/tcp
success
$ sudo firewall-cmd --reload
success
$ sudo firewall-cmd --list-services | grep ipp
ipp ipp-client
Cài đặt system-config-printer
Cài đặt công cụ GUI để quản lý máy in dễ dàng hơn.
$ sudo dnf install -y system-config-printer
Installed: system-config-printer-1.5.18-2.fc42.noarch
$ system-config-printer &
[1] 5678
Thêm máy in qua lệnh lpadmin
Thêm máy in PDF ảo (cups-pdf) để test mà không cần máy in vật lý.
$ sudo dnf install -y cups-pdf
Installed: cups-pdf-3.0.1-2.fc42.x86_64
$ sudo lpadmin -p PDF -E -v cups-pdf:/ -m CUPS-PDF.ppd
$ sudo lpadmin -d PDF
# Kiểm tra máy in đã thêm
$ lpstat -p PDF
printer PDF is idle. enabled since Mon 15 Jan 2025 10:05:00
In file test và kiểm tra hàng đợi
Thực hành in file, xem hàng đợi và hủy lệnh in.
# In file /etc/hosts
$ lp /etc/hosts
request id is PDF-3 (1 file(s))
# Xem hàng đợi
$ lpq -P PDF
PDF is ready and printing
Rank Owner Job File(s) Total Size
done user 3 hosts 2048 bytes
# Kết quả PDF trong ~/PDF/
$ ls ~/PDF/
hosts.pdf
Cho phép quản trị CUPS từ xa
Cấu hình CUPS cho phép quản trị từ các máy tính khác trên mạng.
# Thay "Listen localhost:631" thành:
Port 631
# Thêm Allow @LOCAL vào <Location />
<Location />
Order allow,deny
Allow @LOCAL
</Location>
$ sudo systemctl restart cups
# Từ máy khác trên mạng, truy cập:
http://192.168.1.100:631
Câu hỏi ôn tập
CUPS lắng nghe trên port nào và giao diện web admin được truy cập bằng URL nào?
CUPS daemon (cupsd) lắng nghe trên TCP port 631. Giao diện web quản trị được truy cập tại http://localhost:631. Để truy cập từ xa, cần mở port 631 trong firewall và đổi Listen sang Port 631 trong cupsd.conf.
Lệnh nào dùng để in file và lệnh nào để xem hàng đợi in?
- lp filename hoặc lpr filename — in file
- lpq — xem hàng đợi in hiện tại
- lprm job_id — hủy lệnh in
- lpstat -p — xem trạng thái tất cả máy in
Các file cấu hình CUPS nằm ở đâu và chức năng của mỗi file?
Thư mục /etc/cups/ chứa:
- cupsd.conf: quyền truy cập, xác thực, hành vi daemon
- printers.conf: thông tin máy in đã cấu hình
- classes.conf: định nghĩa các lớp máy in cục bộ
Làm thế nào để in từ Windows sang máy chủ CUPS Linux?
Cấu hình Windows dùng PostScript printer driver với URL printing port: http://printservername:631/printers/targetPrinter. Ngoài ra có thể tạo Raw Print Queue trên CUPS để Windows dùng native driver gửi dữ liệu thẳng đến máy in.
Lệnh lpadmin được dùng để làm gì? Cho ví dụ cụ thể.
lpadmin dùng để thêm, xóa, và cấu hình máy in:
lpadmin -p HP_LaserJet -E -v socket://192.168.1.50 -m drv:///HP/laserjet.ppd — thêm máy in mạng
lpadmin -d HP_LaserJet — đặt máy in mặc định
lpadmin -x HP_LaserJet — xóa máy in
Lệnh nào để in file với 3 bản sao trên máy in tên "OfficeJet"?
lp -d OfficeJet -n 3 document.pdf
Hoặc dùng lpr: lpr -P OfficeJet -#3 document.pdf
Tại sao nên dùng system-config-printer thay vì CUPS web admin để cấu hình máy in?
Vì system-config-printer tạo ra file cấu hình được tùy chỉnh để tương thích với cách CUPS service khởi động trên hệ thống Fedora/RHEL cụ thể đó. CUPS web admin là công cụ chung, có thể tạo cấu hình không tối ưu cho phiên bản Linux đang dùng.
lpinfo -v cho output gì và dùng trong trường hợp nào?
lpinfo -v hiển thị các loại kết nối máy in được hỗ trợ (USB, network socket, IPP, v.v.). Dùng khi cần biết URI kết nối chính xác để thêm máy in bằng lpadmin. Ví dụ output: direct usb://HP/LaserJet%20P1005?serial=CNB3D14343