在Ubuntu(Bonjour,IPP,Samba,AirPrint)上设置CUPS打印服务器

本教程将向您展示如何在同一网络上与Windows,macOS和iOS客户端共享连接到Ubuntu计算机的打印机。 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:在Ubuntu上安装和配置CUPS

Ubuntu桌面版已预安装CUPS。 如果使用Ubuntu服务器版本,则需要运行以下命令从默认Ubuntu存储库安装CUPS。

sudo apt install cups

然后启动CUPS。

sudo systemctl start cups

在启动时启用自动启动。

sudo systemctl enable cups

检查其状态:

systemctl status cups

样本输出:

杯子印刷系统ubuntu

接下来,使用命令行文本编辑器(如Nano)编辑CUPS主配置文件。

sudo nano /etc/cups/cupsd.conf

首先,我们需要显示本地网络上的共享打印机。 找到以下行。

Browsing Off

更改为

Browsing On

因此,同一网络中的其他计算机可以看到连接到Ubuntu计算机的打印机。

默认情况下,CUPS Web界面仅在以下位置可用 localhost:631。 如果您正在运行Ubuntu服务器版,则可能还希望使CUPS在所有可用的网络界面上侦听,以便您能够从其他计算机访问CUPS Web界面。 找到以下行。

Listen localhost:631

更改为

Port 631

因此CUPS将侦听所有网络接口,然后找到以下几行。

<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

请注意,如果在Ubuntu上启用了UFW防火墙,则需要允许同一网络中的客户端访问Ubuntu盒上的端口631。 例如,我的专用网络使用的是192.168.0.0〜192.168.0.255网络范围,因此我运行以下命令。

sudo ufw allow in from 192.168.0.0/24 to any port 631

步骤2:在Ubuntu上为打印机安装驱动程序

您需要在Ubuntu上安装驱动程序,以便它可以识别和使用打印机。 如果您有HP打印机,则可以使用以下命令轻松安装驱动程序。

sudo apt install hplip

我还建议安装 printer-driver-gutenprint 软件包,其中提供了适用于佳能,爱普生,惠普和兼容打印机的CUPS驱动程序。

sudo apt install printer-driver-gutenprint

如果您有其他打印机,则可以在openprinting.org上找到驱动程序。

安装驱动程序后,您可能需要将打印机重新连接到Ubuntu计算机的USB端口。 要测试驱动程序是否正常运行,可以在Ubuntu上创建一个文本文件:

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 apt install avahi-daemon

启动avahi-daemon。

sudo systemctl start avahi-daemon

在启动时启用自动启动。

sudo systemctl enable avahi-daemon

Avahi-daemon侦听UDP端口5353。在防火墙中将其打开。

sudo ufw allow 5353/udp

IPP无人驾驶打印

Bonjour用于在本地网络上宣传打印机。 为了使客户端和CUPS服务器相互通信,需要IPP(Internet打印协议)。 IPP的优点是客户端可以使用共享打印机,而无需在自己的设备上安装任何驱动程序。 CUPS开箱即用地支持IPP,因此您无需执行任何其他操作即可通过IPP共享CUPS打印机。

步骤4:在客户端计算机上添加打印机

macOS和Linux客户端

由于macOS和大多数Linux桌面发行版均已将CUPS安装为默认打印系统,因此,一旦在Ubuntu盒子上通过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客户端。 输入 打印机 在左下方的搜索栏中,然后打开 打印机和扫描仪。 然后点击 添加打印机或扫描仪 按钮。 它将扫描本地网络上的可用打印机。

Windows 10打印机和扫描仪

如您所见,它找到了我的HP Deskjet打印机。 选择找到的打印机,然后单击 添加设备。 稍后,它将被添加到打印机列表中。

add-printers-scanners-windows10-ipp

如果您使用的Windows版本无法通过这种方式添加打印机,则可以安装Bonjour Print服务。 安装完成后,启动Bonjour打印机向导。 它将自动扫描本地网络上的可用打印机。 从屏幕截图中可以看到,它找到了我的HP打印机。

在Windows上添加Bonjour共享打印机

单击“下一步”,然后需要为此打印机选择驱动程序。 您可以选择默认情况下安装在系统上的Microsoft IPP类驱动程序。

bonjour微软ipp类驱动程序

单击下一步,打印机将被添加到Windows系统中。

在Linux上手动添加打印机

如果出于任何原因看不到打印机,则可以手动添加。 要在台式机Linux上添加Bonjour共享的打印机,请在系统设置或应用程序菜单中搜索打印机配置实用程序。 点击 按钮添加新打印机。

在Linux上添加杯子打印机

然后单击“网络打印机”,它将自动扫描本地网络上的可用打印机。 如您所见,它找到了我的HP Deskjet打印机。 点击 前锋 按钮。

杯子ubuntu dnssd

然后,您可以给打印机起一个名称和描述。 我只是接受默认值。 请点击 应用 到此为止。

ubuntu-cups-printer-mdns-dnssd

在macOS上手动添加打印机

要在macOS上添加Bonjour共享的打印机,请转到 系统偏好 -> 打印机和扫描仪。 单击加号(+)按钮添加打印机。

在macOS上添加bonjour打印机

它将自动扫描本地网络上的可用打印机。 如您所见,它找到了我的HP Deskjet打印机。

macos bonjour共享打印机

点击 按钮,它将出现在打印机列表中。

macOS-printers-scanners-list

步骤5:通过Samba共享CUPS打印机

Samba是针对Unix和Linux的免费开源SMB / CIFS协议实现,它允许Unix / Linux与局域网中Windows机器之间的文件和打印共享。 它主要用于与Windows客户端共享文件和打印机。

要在Ubuntu上安装Samba,只需在终端中运行以下命令。

sudo apt install samba samba-common-bin

要检查Samba服务是否正在运行,请发出以下命令。

systemctl status smbd

systemctl status nmbd

要启动这两项服务,请发出以下命令:

sudo systemctl start smbd

sudo systemctl start nmbd

然后编辑主配置文件。

sudo nano /etc/samba/smb.conf

建议启用 spoolssd 共享打印机时的服务。 当有大量打印作业时,这将使Samba更加高效。 只需将以下两行添加到 [global] 部分以启用 spoolssd 服务。

 rpc_server:spoolss = external
 rpc_daemon:spoolssd = fork

接下来,转到文件末尾,您将看到 [printers] 部分。 在Nano文本编辑器中,您可以通过按跳到文件末尾 Ctrl+W,然后按 Ctrl+V。 找到以下两行。

browseable = no
guest ok = no

更改为

browseable = yes
guest ok = yes

保存并关闭文件。 然后重新启动Samba。

sudo systemctl restart smbd nmbd

在Windows中添加Samba共享打印机。

打开文件浏览器,在地址栏中输入Ubuntu计算机的IP地址,例如 \192.168.0.110。 现在应该列出打印机。

在Windows 10上添加samba共享打印机

双击打印机将其添加​​到Windows系统。 然后单击确定按钮以选择要安装的驱动程序。 安装驱动程序后,打印机将被添加到Windows系统中。

Windows添加打印机向导

步骤6:通过AirPrint与iOS客户端共享CUPS打印机

AirPrint允许iPhone,iPad和macOS客户端通过Wi-Fi进行打印,而无需在客户端设备上安装驱动程序软件。 CUPS支持AirPrint,但是 avahi-daemon 默认情况下,不会在本地网络上宣布AirPrint服务。 我们需要创建一个 .service 文件在 /etc/avahi/services/ 带有以下命令的带有Python脚本的打印机目录。 我的打印机型号是DeskJet 2130 series。 用您自己的型号名称替换它。

sudo nano /etc/avahi/services/AirPrint-DeskJet-2130-series.service

在文件中添加以下行。

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">AirPrint DeskJet-2130-series @ %h</name>
  <service>
    <type>_ipp._tcp</type>
    <subtype>_universal._sub._ipp._tcp</subtype>
    <port>631</port>
    <txt-record>txtvers=1</txt-record>
    <txt-record>qtotal=1</txt-record>
    <txt-record>Transparent=T</txt-record>
    <txt-record>URF=none</txt-record>
    <txt-record>rp=printers/DeskJet-2130-series</txt-record>
    <txt-record>note=HP DeskJet 2130 series</txt-record>
    <txt-record>product=(GPL Ghostscript)</txt-record>
    <txt-record>printer-state=3</txt-record>
    <txt-record>printer-type=0x2900c</txt-record>
    <txt-record>pdl=application/octet-stream,application/pdf,application/postscript,application/vnd.cups-raster,image/gif,image/jpeg,image/png,image/tiff,image/urf,text/html,text/plain,application/vnd.adobe-reader-postscript,application/vnd.cups-pdf</txt-record>
  </service>
</service-group>

保存并关闭文件。 重新启动Avahi守护程序。

sudo systemctl restart avahi-daemon

现在,同一网络中的iOS和macOS客户端应该可以使用您的打印机。 以下屏幕截图显示了我的iPhone成功找到了AirPrint打印机。

ubuntu-cups-airprint

包起来

我希望本教程可以帮助您在Ubuntu上设置CUPS打印服务器。 与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多提示和技巧。 您可能还需要阅读以下文章来设置Samba文件共享服务器。

  • 在Ubuntu上设置Samba服务器以进行文件共享
Sidebar