在CentOS 8 / RHEL 8(Bonjour,IPP,Samba,AirPrint)上设置CUPS打印服务器
本教程将向您展示如何在同一网络上与Windows,macOS和iOS客户端共享连接到CentOS 8 / RHEL 8计算机的打印机。 CUPS(通用Unix打印系统)是Linux,FreeBSD和macOS上的默认打印系统。 您的Linux桌面环境可能具有专用的打印机配置实用程序,但是它们都在后台使用CUPS。 CUPS打印机可以使用多种协议在网络上共享,包括:
- 卓悦+ IPP:Bonjour,也称为mDNS / DNS-SD(多播DNS / DNS服务发现),允许计算机在本地网络上查找服务。 IPP(Internet打印协议)是传输协议。
- 中小型企业:又名Samba,主要用于与Windows客户端共享文件和打印机。
- AirPrint:允许iPhone,iPad和macOS客户端通过Wi-Fi打印。
每种协议都有其优点和缺点。 首先,我将向您展示如何安装和配置CUPS。 然后,我们将学习如何通过以上3种协议共享CUPS打印机。 我建议使用所有3种方法共享您的打印机,以便用户可以轻松地在本地网络上找到可用的打印机。
步骤1:在CentOS 8 / RHEL 8上安装和配置CUPS
CentOS 8 / RHEL 8桌面版已预安装CUPS。 如果您使用的是CentOS 8 / RHEL 8服务器版本,则需要运行以下命令从默认的CentOS 8 / RHEL 8存储库安装CUPS。
sudo dnf install cups
然后启动CUPS。
sudo systemctl start cups
在启动时启用自动启动。
sudo systemctl enable cups
检查其状态:
systemctl status cups
样本输出:
接下来,使用命令行文本编辑器(如Nano)编辑CUPS主配置文件。
sudo nano /etc/cups/cupsd.conf
默认情况下,CUPS Web界面仅在以下位置可用 localhost:631
。 如果您正在运行CentOS 8 / RHEL 8服务器版本,则可能希望使CUPS在所有可用的网络接口上侦听,以便您能够从其他计算机访问CUPS Web界面。 找到以下行。
Listen localhost:631
将其更改为以下内容,因此CUPS将侦听所有网络接口。
Port 631
以下行将使CUPS显示本地网络上的共享打印机,因此同一网络中的其他计算机可以看到连接到CentOS 8 / RHEL 8计算机的打印机。
Browsing On
然后找到以下几行。
<Location /> Order allow,deny </Location>
以上配置仅允许从本地主机访问CUPS Web界面。 要允许来自同一网络中其他计算机的访问,请添加 Allow @LOCAL
如下所示。
<Location /> Order allow,deny Allow @LOCAL </Location>
如果要允许从本地网络进行远程管理,请同时将其添加到 /admin
目录。
<Location /admin> Order allow,deny Allow @LOCAL </Location>
保存并关闭文件。 然后重新启动CUPS,以使更改生效。
sudo systemctl restart cups
我们需要允许同一网络中的客户端访问CentOS 8 / RHEL 8计算机上的端口631。
sudo firewall-cmd --permanent --add-port=631/tcp
重新加载防火墙以使更改生效。
sudo systemctl reload firewalld
除主 cups.service
,还有 cups-browsed.service
,用于从本地网络扫描和添加打印机。 如果您希望CentOS 8 / RHEL 8计算机能够使用本地网络上的其他打印机,请启动此服务。
sudo systemctl start cups-browsed
并在引导时启用自动启动。
sudo systemctl enable cups-browsed
步骤2:在CentOS 8 / RHEL 8上为打印机安装驱动程序
您需要在CentOS 8 / RHEL 8上安装驱动程序,以便它可以识别和使用打印机。 如果您有HP打印机,则可以使用以下命令轻松安装驱动程序。
sudo dnf install hplip
我还建议安装 gutenprint-cups
软件包,其中提供了适用于佳能,爱普生,惠普和兼容打印机的CUPS驱动程序。
sudo dnf install gutenprint-cups
如果您有其他打印机,则可以在openprinting.org上找到驱动程序。
安装驱动程序后,您可能需要将打印机重新连接到CentOS 8 / RHEL 8计算机的USB端口。 要测试驱动程序是否正常运行,可以在CentOS 8 / RHEL 8上创建一个文本文件:
echo "LinuxBabe is awesome!" > file.txt
然后运行以下命令从命令行打印此文本文件。
lp file.txt
这是一种非常基本的方法,因此现在不必担心打印质量。
步骤3:通过Bonjour / IPP协议共享CUPS打印机
安装Avahi守护程序
CUPS可以通过mDNS(多播DNS)和DNS-SD(DNS服务发现)协议(也称为Bonjour)在网络上宣布其存在。 为此,您需要安装并运行 avahi-daemon
,它是类似于Apple Bonjour服务的服务,该服务允许计算机自动发现本地网络上的共享设备和服务。
sudo dnf install avahi
我们还需要安装 nss-mdns
EPEL存储库中的软件包,客户端需要此软件包来解析 .local
网络上的域。
sudo dnf install epel-release sudo dnf install nss-mdns
启动avahi-daemon。
sudo systemctl start avahi-daemon
在启动时启用自动启动。
sudo systemctl enable avahi-daemon
Avahi-daemon侦听UDP端口5353。在防火墙中将其打开。
sudo firewall-cmd --permanent --add-port=5353/udp
重新加载防火墙以使更改生效。
sudo systemctl reload firewalld
IPP无人驾驶打印
Bonjour用于在本地网络上宣传打印机。 为了使客户端和CUPS服务器相互通信,需要IPP(Internet打印协议)。 IPP的优点是客户端可以使用共享打印机,而无需在自己的设备上安装任何驱动程序。 CUPS开箱即用地支持IPP,因此您无需执行任何其他操作即可通过IPP共享CUPS打印机。
步骤4:在客户端计算机上添加打印机
macOS和Linux客户端
由于macOS和大多数Linux桌面发行版均已将CUPS安装为默认打印系统,因此,一旦在CentOS 8 / RHEL 8盒子上通过Bonjour / IPP启用了打印机共享,则同一网络中的macOS和Linux用户可以自动使用打印机。 当他们在应用程序(文字处理器,电子邮件阅读器,照片编辑器和Web浏览器)中单击打印选项时,打印机将自动可用。 他们不必显式添加打印机。 这是魔法。
如果您的Linux计算机找不到打印机,则您的系统可能没有 ippfind
命令。 运行以下命令以将其安装在基于Debian的Linux发行版上。
sudo apt install cups-ipp-utils
在CentOS 8上,运行以下命令。
sudo dnf install cups-ipptool
然后在客户端计算机上重新启动CUPS。
sudo systemctl restart cups
视窗
Windows 10随附IPP客户端。 输入 打印机 在左下方的搜索栏中,然后打开 打印机和扫描仪。 然后点击 添加打印机或扫描仪 按钮。 它将扫描本地网络上的可用打印机。
如您所见,它找到了我的HP Deskjet打印机。 选择找到的打印机,然后单击 添加设备。 稍后,它将被添加到打印机列表中。
如果您使用的Windows版本无法通过这种方式添加打印机,则可以安装Bonjour Print服务。 安装完成后,启动Bonjour打印机向导。 它将自动扫描本地网络上的可用打印机。 从屏幕截图中可以看到,它找到了我的HP打印机。
单击“下一步”,然后需要为此打印机选择驱动程序。 您可以选择默认情况下安装在系统上的Microsoft IPP类驱动程序。
单击下一步,打印机将被添加到Windows系统中。
在Linux上手动添加打印机
如果出于任何原因看不到打印机,则可以手动添加。 要在台式机Linux上添加Bonjour共享的打印机,请在系统设置或应用程序菜单中搜索打印机配置实用程序。 点击 加 按钮添加新打印机。
然后单击“网络打印机”,它将自动扫描本地网络上的可用打印机。 如您所见,它找到了我的HP Deskjet打印机。 点击 前锋 按钮。
然后,您可以给打印机起一个名称和描述。 我只是接受默认值。 请点击 应用 到此为止。
在macOS上手动添加打印机
要在macOS上添加Bonjour共享的打印机,请转到 系统偏好 -> 打印机和扫描仪。 单击加号(+)按钮添加打印机。
它将自动扫描本地网络上的可用打印机。 如您所见,它找到了我的HP Deskjet打印机。
点击 加 按钮,它将出现在打印机列表中。
步骤5:通过Samba共享CUPS打印机
Samba是针对Unix和Linux的免费开源SMB / CIFS协议实现,它允许Unix / Linux与局域网中Windows机器之间的文件和打印共享。 它主要用于与Windows客户端共享文件和打印机。
要在CentOS 8 / RHEL 8上安装Samba,请运行以下命令。
sudo dnf install samba
然后发出以下命令以启动 smbd
和 nmbd
服务。
sudo systemctl start smb nmb
在启动时启用自动启动。
sudo systemctl enable smb nmb
要检查Samba服务是否正在运行,请发出以下命令。
systemctl status smb nmb
一旦开始, smb
守护程序将监听TCP端口139和445。 nmbd
将在UDP端口137和138上监听。运行以下命令在防火墙中打开这些端口。
sudo firewall-cmd --permanent --add-service=samba
重新加载firwall守护程序以使更改生效。
sudo systemctl reload firewalld
然后编辑主配置文件。
sudo nano /etc/samba/smb.conf
找出 [printers]
部分。 默认情况下,它看起来像这样:
[printers] comment = All Printers path = /var/tmp printable = Yes create mask = 0600 browseable = No
我们需要改变的价值 browseable
至 yes
,因此同一网络中的客户端可以找到打印机并添加 guest ok = yes
允许网络中的任何人使用打印机。
[printers] comment = All Printers path = /var/tmp printable = Yes create mask = 0600 browseable = yes guest ok = yes
建议启用 spoolssd
共享打印机时的服务。 当有大量打印作业时,这将使Samba更加高效。 只需将以下两行添加到 [global]
部分以启用 spoolssd
服务。
rpc_server:spoolss = external rpc_daemon:spoolssd = fork
保存并关闭文件。 然后重新启动Samba。
sudo systemctl restart smb nmb
在Windows中添加Samba共享打印机。
打开文件浏览器,在地址栏中输入CentOS 8 / RHEL 8计算机的IP地址,例如 \192.168.0.110
。 现在应该列出打印机。
双击打印机将其添加到Windows系统。 然后单击确定按钮以选择要安装的驱动程序。 安装驱动程序后,打印机将被添加到Windows系统中。
步骤6:通过AirPrint与iOS客户端共享CUPS打印机
AirPrint允许iPhone,iPad和macOS客户端通过Wi-Fi进行打印,而无需在客户端设备上安装驱动程序软件。 CUPS支持Airprint,但 avahi-daemon
默认情况下,不会在本地网络上宣布AirPrint服务。 我们需要创建一个 .service
文件在 /etc/avahi/services/
带有Python脚本的打印机的目录。 运行以下命令以在CentOS 8 / RHEL 8上下载脚本。
wget https://raw.github.com/tjfontaine/airprint-generate/master/airprint-generate.py
添加执行权限。
chmod +x airprint-generate.py
这个python脚本是为Python2制作的。 CentOS 8 / RHEL 8默认使用Python3。 我们需要安装Python2。
sudo dnf install python2
编辑此文件。
nano airprint-generate.py
更改
#!/usr/bin/env python
至
#!/usr/bin/env python2
保存并关闭文件。 然后安装依赖项。
sudo dnf install gcc python2-devel cups-devel redhat-rpm-config
安装杯子模块。
sudo pip2 install cups pycups
然后运行此脚本。
sudo ./airprint-generate.py -d /etc/avahi/services/
现在应该有一个 .service
文件下 /etc/avahi/services/
打印机的目录。
ls /etc/avahi/services/
样本输出:
AirPrint-DeskJet-2130-series.service
重新启动Avahi守护程序。
sudo systemctl restart avahi-daemon
现在,同一网络中的iOS和macOS客户端应该可以使用您的打印机。 以下屏幕截图显示了我的iPhone成功找到了AirPrint打印机。
包起来
我希望本教程可以帮助您在CentOS 8 / RHEL 8上设置CUPS打印服务器。与往常一样,如果您发现这篇文章很有用,请订阅我们的免费时事通讯以获取更多提示和技巧。 您可能还需要阅读以下文章来设置Samba文件共享服务器。
- 在CentOS 8 / RHEL 8上设置Samba服务器以进行文件共享