终于可以在 Linux 下愉快打印了:Linux 发行版配置打印机攻略
在办公用的操作系统领域,Windows 常年傲视群雄。而近年来,政、企等单位操作系统国产化的进程,让「竞争对手」Linux 的市场份额有所提高 —— 越来越多的政府机构、国有企业都将既有的 Windows 电脑更换为国产电脑,配备银河麒麟、统信 UOS 等国产 Linux 发行版。
不过,对于运维人员来说,面对办公必备的装备——打印机,配置工作并不是那么好做:
好在,这些困难都是可以一一化解的。
笔者在给自己的 Linux 主力机配置打印机时,在一次次的「踩坑」中,积累了不少有用的经验。在这篇文章里,且看我抽丝剥茧,抓住 Linux 打印机配置问题的本质,带领大家一步步完成配置,最终在 Linux 下畅享优质、便捷的打印体验。
熟悉 Windows 的读者都知道,在 Windows 下,打印机作为硬件设备直接由系统管理,是要安装驱动的。安装打印机驱动的过程,和显卡、声卡、网卡等基础硬件如出一辙。
然而,在 Linux 则不同。打印机采用基于软件的 CUPS(Common Unix Printer Service,通用 Unix 打印服务)来管理。CUPS 是苹果公司推出的打印机管理套件,广泛应用于 macOS 与各大 Linux 发行版。
在 Linux 下,打印机不需要安装专门的硬件驱动1,相反你只需要根据你的打印机型号,为CUPS 提供相应的「驱动文件」。这里的「驱动文件」,并不是直接从系统底层操纵设备的驱动,相反更多相当于软件配置,包括(但不限于)打印机的配置文件、过滤器2等。
CUPS 理论上支持市面上绝大部分的打印机,适用面非常广,支持(但不限于)以下几种连接:
管理方面,Linux 发行版普遍使用 system-config-printer 这款工具来管理打印机,类似于 Windows 控制面板的「设备和打印机」。它是通用于各款发行版的打印机管理工具,由 RedHat 团队开发,界面简洁、体积轻巧,操作流程有章可循。
部分桌面环境,如 Gnome、KDE、深度桌面(DDE),也提供了自己的打印机管理工具。为方便起见,接下来将全程使用 system-config-printer 来演示。其余桌面环境自带工具的操作思路是相通的34。
想要顺畅地使用 CUPS 来管理打印机,首先要安装一系列软件包。
一般地,像 Ubuntu、Deepin、Zorin OS 这样的「新手向」发行版,安装时就已经配置好了CUPS 支持,开箱即用。而对于 Arch Linux、Gentoo 等「玩家向」的发行版,则需要自行配置。
通常 CUPS 主要包含以下常用软件包:
软件包名 | 说明 |
---|---|
cups | CUPS 的本体。通常各大发行版的 CUPS 软件包是一站式的(即「meta package」),能够帮你安装 CUPS 的各个核心组件 |
cups-browsed | 用于搜索网络上采用 IPP 的打印机,也可以与其他电脑上安装的CUPS联动。若你希望连接 IPP 的打印机,则需要安装这个包。 |
bluez-cups | 用于连接蓝牙打印机。该包属于 Linux 蓝牙协议栈 BlueZ 的模块,若你希望通过蓝牙打印,则需要安装这个包。 |
cups-pdf | CUPS 提供的 PDF 打印机,用于将文档打印成PDF格式。类似于 Microsoft Print To PDF 与 Foxit PDF Printer。 |
注:除 CUPS 外,其余的都是可选组件。
各大 Linux 发行版都收录了 CUPS,按照以下命令安装(其中可选组件根据你的需求安装)。常用的发行版安装命令如下:
# Arch Linux
sudo pacman -Sy cups cups-browsed bluez-cups cups-pdf
# Debian及衍生版,如:Ubuntu / Deepin / 银河麒麟 / UOS
sudo apt update
sudo apt install cups cups-browsed bluez-cups cups-pdf
# OpenSUSE
sudo zypper install cups cups-browsed bluez-cups cups-pdf
# Fedora
sudo dnf install cups cups-browsed bluez-cups cups-pdf
安装完成后,你需要启动 CUPS 服务:
# 启用CUPS基本服务
sudo systemctl enable cups # 启用CUPS服务
sudo systemctl start cups # 立即启动CUPS服务
# 若安装了cups-browsed,你也要单独启用它,因为它是一个独立的服务
sudo systemctl enable cups-browsed
sudo systemctl start cups-browsed
system-config-printer 同样收录在发行版的软件仓库中,可以直接安装。部分发行版(如Manjaro、Linux Mint、银河麒麟)也有预装。
常用的发行版安装命令如下:
# Arch Linux
sudo pacman -Sy system-config-printer
# Debian及衍生版,如:Ubuntu / Deepin / 银河麒麟 / UOS
sudo apt update
sudo apt install system-config-printer
# OpenSUSE
sudo zypper install system-config-printer
# Fedora
sudo dnf install system-config-printer
CUPS 使用 Avahi 来搜索网络打印机。Avahi 是 Linux 上用于搜索网络设备的客户端(基于 mDNS/DNS-SD 协议),兼容苹果的 Bonjour 服务。
但是,在有的电脑上,光有Avahi还不够5——CUPS 能搜索到打印机,但是只能解析打印机的主机名6,却无法解析主机名对应的 IP 地址。主机名并不是域名,仅靠主机名,没有 IP 地址,你是连不上打印机的。
为了补齐这一短板,我们还需要安装 nss-mdns 软件包,它为 Avahi 提供解析网络打印机等网络设备 IP 地址的支持。由于该软件包只是 Avahi 的可选包,我们必须手动安装。
# Arch Linux
sudo pacman -Sy nss-mdns
# Debian及衍生版,如:Ubuntu / Deepin / 银河麒麟 / UOS
sudo apt update
sudo apt install libnss-mdns
# OpenSUSE
sudo zypper install nss-mdns
# Fedora
sudo dnf install nss-mdns
要想正式开始打印,还需要安装打印机驱动包。笔者在上一章提到,这里的「驱动」相当于软件配置,由 CUPS 调用。想要在 Linux 下安装打印机驱动,就离不开 Foomatic-db。
Foomatic-db 是一套打印机数据库,收录了各大品牌主流型号打印机的配置文件(以 XML 格式编写)。这些配置文件通过配套的 Foomatic-db-engine 工具,转换为 PPD(PostScript Printer Description,PostScript 打印机描述)文件,CUPS 就是根据 PPD 文件来操作打印机的。
一般各大发行版都提供了 Foomatic-db 数据库,以及开箱即用的 PPD 文件合集,无须安装 Foomatic-db-engine 即可使用。
常用发行版的安装命令如下,注意不同发行版要安装的软件包差异极大,请注意区分:
# Arch Linux
sudo pacman -Sy foomatic-db foomatic-db-ppds # 采用开源协议分发的驱动,支持型号较多
sudo pacman -S foomatic-db-nonfree foomatic-db-nonfree-ppds # 非开源驱动,通常是厂商的专有驱动程序。支持型号较少
# Debian及衍生版,如:Ubuntu / Deepin / 银河麒麟 / UOS
sudo apt update
sudo apt install foomatic-db foomatic-db-compressed-ppds # 打印机驱动
sudo apt install foomatic-filters # 打印机过滤器
# Fedora
sudo dnf install foomatic-db foomatic-db-ppds foomatic-db-filesystem
注意:OpenSUSE 的软件仓库没有收录 Foomatic-db。希望使用 OpenSUSE 的读者在评论区分享自己配置打印机的经验。
CUPS 与 Foomatic 驱动包安装好之后,我们就可以着手连接打印机了。如果以 USB 有线方式连接打印机,那么配置相对会简单很多。
在接下来的操作之前,你需要开启打印机,用 USB 线缆将打印机与电脑连接起来。
连接之后,可以使用 lsusb 工具来检测打印机是否正确连接。7在终端中运行 lsusb,此时会列出所有已连接的 USB 设备。
若打印机已连接,则列表中会显示它的厂商名和型号。
通常 system-config-printer 会出现在程序列表里,命名为「打印设置」「打印机配置」等,图标为一台打印机。运行后的界面如下图所示:
点击工具栏的「添加」按钮,启动打印机添加向导。此时,程序会自动扫描当前已连接的打印机,需要等待几秒钟,USB 打印机才会出现在列表中。
选中 USB 打印机,然后点击「转发」按钮8。此时程序会加载驱动列表,注意这个过程耗时较长,需要你耐心等待。
在接下来的界面中,找到你打印机的厂商:
紧接着,选择打印机型号,随后在右侧会列出该型号支持的驱动。我们优先选择标注有「推荐」的项目。
向导的最后一步,程序会让你给打印机命名。其中:
项目 | 说明 |
---|---|
打印机名称 | 是打印机的唯一标识符。 由英文、数字与分隔符「-」组成,不能带空格。 |
描述 | 则是在各个软件的「打印」对话框里显示的打印机名称。 建议填写打印机型号、用途等易于分辨的名字。 |
设置完成后,单击「应用」,打印机就添加到了列表中。此时程序会询问你是否打印测试页,你可以打印一张测试页来检查打印机的连接情况。9
如果打印机连接正常,稍等片刻就会开始打印。
记得曾经在单位折腾打印机,失败多次后终于选择了正确的驱动,那一刻,听到打印机工作的声响,仿佛就是见证奇迹的时刻,欣喜之情不言而喻。
越来越多的打印机开始摆脱数据线和网线的束缚,支持 Wi-Fi 连接,无疑提升了打印的便捷性。CUPS 对网络打印功能提供了完备的支持,局域网中的 Wi-Fi 打印机自然不在话下,操作步骤与 USB 连接大致相同。
在接下来的操作之前,你需要:
启动 system-config-printer,点击工具栏上的「添加」按钮,打开添加打印机向导。
展开界面左侧「网络打印机」,稍等片刻,连接在局域网上的打印机就会出现在列表中。
往往一台打印机支持多种连接方式,包括 IPP、DNS-SD10、LPD/LPR。因此,正如上面的插图所示,同一台打印机有可能会在列表出现两次(一个是IPP,另一个是其他协议)。你可以根据自己的需要来选择。
就笔者的经验而言:
较新的打印机支持 IPP Everywhere™ 技术,无须准备驱动,直接连接打印机即可。因此不妨优先选择。
第一步:在system-config-printer 中,以 IPP 方式连接的打印机,在列表中显示的格式为「打印机型号(<打印机型号名>._ipp._tcp.local)
」。选中该项目,右侧的「连接」列表中会显示「Driverless IPP(免驱动的 IPP)」项目。
第二步:点击「转发」按钮。此时依然会搜索驱动,稍微耐心等待。
第三步:在驱动列表中,选择「Generic」,点击「转发」。
然后,再依次选择「IPP Everywhere」→「Genetic IPP Everywhere Printer [en]」。这就是 IPP Everywhere 的驱动程序。点击「转发」按钮确认。
第四步:随后会有个选项,询问你的打印机是否安装了双工器(英文版选项为「Duplexer Installed」)。这里的「双工器(duplexer)」正确翻译应当为「双面打印器」,这是部分打印机可拆卸的双面打印组件。13
就我的经验来说,不支持或者内置了双面打印的机型都无须勾选该选项。
第五步:最后,向导会要求你输入打印机的名称与描述,方法与上一张添加 USB 打印机的步骤相同。
完成向导后,建议打印一张测试页,用以检测 IPP 打印机的连接情况。
有的打印机能使用 IPP,但会出现各种兼容性问题,例如连接失败、传输缓慢等。那么,不妨改用 LPD/LPR 方式来连接。
注意:LPD/LPR 需要配合打印机驱动使用。
第一步:在system-config-printer 中,以 IPP 以外方式连接的打印机,在列表中显示的格式为「打印机型号(<打印机序列号>.local)
」。不同品牌打印机会有不同的序列号。
选中该项目,右侧的「连接」列表中会显示「LPD/LPR,队列 xxxxx」项目(其中,「xxxxx」视厂家的不同而不同14,通常不必更改)。
第二步:点击「转发」按钮。此时依然会搜索驱动,稍微耐心等待。
第三步:接下来的步骤和上一章「USB 连接打印机」相同——选择驱动、输入打印机名称和描述。这里不再赘述。
为了检测连接状况,笔者同样建议你打印一份测试页。
DNS-SD 是一种用于检测局域网设备的协议。有的时候,system-config-printer 的添加打印机向导会有 bug,无法为你的打印机显示单独的IPP项目(也就是「Driverless IPP」)。
此时,如果你仍想使用 IPP,就可以尝试以 DNS-SD 连接打印机。连接成功后,系统就能以 IPP 方式操作打印机。
具体的操作方法与上文「连接方式一」大致相同。唯一区别是:选择打印机时,要选择「打印机型号(<打印机序列号>.local)
」,随后在右侧列表中选择「通过 DNS-SD 的 IPP 网络打印机」。如下图所示。
通常情况下,配合 nss-mdns 软件包,Avahi 会自动在后台解析打印机的 IP 地址,因此只要根据上一章的步骤就可以使用无线打印机。但是,因不明原因,在笔者的 Arch Linux 上,Avahi 解析 IP 地址的能力「失灵」了,导致无论采取何种协议,都无法用 Wi-Fi 连接打印机。
此时,可以考虑手动解析打印机的 IP 地址,并在添加打印机时,手工将主机名替换为 IP 地址。解析的方式是使用 Avahi 自带工具进行 mDNS 查询。
第一步:启动 system-config-printer,打开添加打印机向导。待你的打印机扫描出来后,观察列表,括号中显示为「xxxxxxx.local
」的地址就是打印机的主机名。
第二步:打开终端,运行以下命令,解析打印机地址。
avahi-resolve-host-name <主机名>
运行结果类似于下图:
第三步:记下打印机的 IP 地址,随后在添加打印机向导中,将打印机地址或主机名进行如下替换:
ipp://Brother%20DCP-B7535DW%20series._ipp._tcp.local/
替换为ipp://192.168.200.1/
。15第四步:后续按照上一章的教程,正常添加打印机即可,这里不再赘述。
尽管 Foomatic-db 收录的驱动程序包罗万象,但是在实践中,找不到驱动的情况仍然比比皆是。笔者最深刻的体验是:仅靠 Foomatic-db,是无法「征服」我历来接触过的打印机型号的(涵盖 Canon、Epson、Brother 等品牌),因为它们根本就没被收录在数据库中。
若无法找到驱动程序,你就需要另辟蹊径,通过以下渠道来为你的打印机寻找驱动。
一些打印机品牌提供了完备的跨平台支持,提供了 Linux 平台下的驱动。你可以在打印机官方网站的「技术支持」板块下载。
第一步:检索并打开兄弟打印机的技术支持页面。
第二步:在技术支持页面中,搜索打印机型号「HL-3190CDW」,随后进入产品页面。
第三步:在产品页面中,可见兄弟公司同时提供了三大平台的驱动。选择「Linux」,此时你可以视你的发行版,选择 RPM 或 DEB 格式的驱动包。
点击「确认」后,网站会要求你重新选择语言。选择「English」后,点击下方的「Linux printer driver (deb package)」(或「rpm package」),按提示操作即可下载。
第四步,安装驱动包。你需要直接使用发行版底层的驱动管理工具(rpm
或dpkg
)来安装。
# Debian及其衍生发行版(Ubuntu、Deepin、银河麒麟、UOS等)
sudo dpkg -i hl3190cdwpdrv-1.0.2-0.i386.deb
# Red Hat及其衍生发行版(Fedora、RHEL、OpenSUSE、CentOS、AlmaLinux等)
sudo rpm -i hl3190cdwpdrv-1.0.2-0.i386.rpm
提醒:兄弟这类打印机大厂普遍保守,要经过多道步骤才能让你下载到驱动程序。你需要保持耐心。
其他品牌打印机查找驱动的思路是相同的,不必担心找不着方向。通常大部分驱动都可以从官方网站找到16。
一个特例是,惠普的 Linux 驱动由第三方的 HPLIP 项目提供支持。通常各大 Linux 发行版都提供了hplip
软件包,开箱即用。
如果你使用 Arch Linux 及其衍生版(Manjaro、SteamOS 等),查找驱动要更为方便。AUR 和 Arch Linux CN 软件源是个大宝库,往往Foomatic没有收录的驱动程序常常可以从这两个渠道找到。
其中:
第一步,为了确保你的目标品牌驱动程序有收录,你需要先用yay -Ss
来检索打印机品牌名称。该命令同时也会检索 Arch Linux CN 源的内容。
例如,可分别使用以下四个命令,检索兄弟(Brother)、佳能(Canon)、爱普生(Epson)、三星(Samsung)这四个品牌的驱动程序:
yay -Ss brother
yay -Ss canon
yay -Ss epson
yay -Ss samsung
随后 Yay 会自动检索 AUR 软件源。仅仅是兄弟打印机,就可以搜索到近百个驱动,以下是搜索结果的节选:
...
aur/brother-hl1210w 3.0.1-2 (+10 0.07)
Brother HL-1210W CUPS driver. After installing this, install printer from CUPS web interface
aur/brother-hll2320d 3.2.0_1-1 (+7 0.00)
Brother HL-L2320D CUPS driver
aur/brother-lpr-drivers-common 1.0.0-1 (+54 0.00)
This package provides common files for Brother LPR drivers packages.
aur/brother-dcp7055 2.0.4-2 (+14 0.00)
LPR and CUPS driver for the Brother DCP7055
...
aur/brother-hl1118 3.0.2-1 (+12 0.00)
LPR and CUPS driver for the Brother HL-1110, HL-1110R, HL-1111, HL-1112, HL-1112R, HL-1118
aur/brother-hll2300d 3.2.0_1-1 (+11 0.02)
Brother HL-L2300D CUPS driver
aur/brother-hl2140 2.0.2_1-4 (+15 0.00)
LPR and CUPS driver for the Brother HL2140
aur/brother-brgenml1 3.1.0_1-3 (+32 0.00)
LPR and CUPS driver for various Brother DCP, HL and MFC models.
aur/brother-dcp7030 2.0.2-4 (+17 0.00)
Brother cupd and lpd driver for DCP-7030
aur/brother-hll2350dw 4.0.0-2 (+22 0.21)
Brother HL-L2350DW CUPS driver
...
aur/brother-hl2030 2.0.1-6 (+35 0.00)
Brother HL-2030 CUPS driver
aur/brother-hl3170cdw 1.1.4-1 (+10 0.00)
LPR and CUPS driver for the Brother HL3170CDW
archlinuxcn/brother-mfcj450dw 3.0.0-2 (1.5 MiB 4.5 MiB)
LPR and CUPS driver for the Brother MFC-J450DW
archlinuxcn/brother-hl3170cdw 1.1.4-1 (428.3 KiB 3.3 MiB)
LPR and CUPS driver for the Brother HL3170CDW
第二步,检索具体的打印机型号。注意在检索型号时,要把型号拆开来写,例如兄弟 HL-2240 打印机,检索型号时的关键字为hl 2240
。如下所示:
➜ ~ yay -Ss hl 2240
aur/brother-hl2240-lpr-bin 2.1.0-1 (+0 0.00)
LPR driver for Brother HL-2240 printer
aur/brother-hl2240-cups-bin 2.0.4-2 (+0 0.00)
CUPS wrapper for Brother HL-2240 printer
aur/brother-hl2240d 2.0.4_2-1 (+4 0.07) (已安装)
LPR and CUPS driver for the Brother HL-2240D printer
注意:有的打印机驱动同时提供了独立的 LPR、CUPS 版本,应当优选 CUPS版,或二者兼备的版本。
一个特殊的例子是三星打印机驱动,部分驱动程序同时适用于同系列的多款型号,所以输入具体型号反而检索不出来。此时你仍然需要直接检索厂商名(而非具体型号),翻翻列表,才能找到。
aur/samsung-ml191x-series 1.00.21-1 (+0 0.00)
CUPS printer driver for Samsung ML-191x Series
aur/samsung-ml1860series 1.00.21-1 (+1 0.00)
CUPS printer driver for Samsung ML-1860 Series
aur/samsung-m262x-m282x 1.00.36_00.91-2 (+1 0.00)
CUPS driver for Samsung Xpress M262x and M282x printers
第三步,安装驱动程序。例如,安装兄弟 HL-2240D 的驱动程序:
yay -S brother-hl2240d
随后按提示操作即可。17
确认驱动安装完成后,你就可以在 system-config-printer 的驱动列表中找到它了。按照前文配置打印机的教程正常配置即可。
部分品牌的打印机,例如联想、柯尼卡美能达(Konica Minorta),它们的一些型号无论怎么找都未必能找到驱动。实际上,它们或许是「贴牌打印机」—— 表面上是 A 品牌,实际上不过是 B 品牌的打印机以 A 品牌的名义发售(即 OEM 产品)。
往往,一台贴牌打印机,与它们对应的原厂型号机器在外观上极其相似。你可以通过对比外观,来找到贴牌机「表皮」下的真实型号,从而找到真正适用于该打印机的驱动。
下面就以笔者的经历,来告诉大家如何为贴牌打印机找驱动。
笔者曾经接触过一台打印机——柯尼卡美能达的 Bizhub 12p,要连接到自己的 Arch Linux 笔记本上。然而该驱动不仅没有被收录到 Foomatic-db 与 AUR 中,官方网站甚至根本不提供 Linux 平台下的驱动。
正当我一筹莫展的时候,我想起另一位朋友也安装了银河麒麟,配备的打印机是联想 LD 系列的一款激光打印机,外观和 Bizhub 12p 一样方方正正。于是我借他的电脑,查看这台打印机的驱动,竟然用的是兄弟打印机 HL 系列的一个型号。去兄弟的官网查询该型号,果然这台联想 LD 打印机与兄弟该型号的区别,就只是颜色不同、商标不同而已。
受此启发,我看了看 Bizhub 12p 的外观,想起兄弟的打印机也具有如此高辨识度的方正造型,我就判断出 Bizhub 12p 很可能是兄弟某款打印机的贴牌机。
果不其然,检索兄弟打印机的产品页面,我发现了意外惊喜:
且看HL-2240、HL-2260D 这两款打印机,外观与 Bizhub 12p 非常相近。尤其是指示灯、按键的布局,就是一个模子里刻出来的。
抓住这条线索,我立即连接 Bizhub 12p,在自己的 Arch Linux 系统上,通过 AUR 安装了 HL-2240 的驱动程序,配置打印机,结果顺利打印了测试页!
至此,就可以证明 Bizhub 12p 为 HL-2240 的贴牌机,在 Linux 下也通用后者的驱动18。对于银河麒麟,由于我做测试那会儿,还没有 HL-2240 的驱动,于是在麒麟客服的建议下,先用 HL-2260D 的驱动,也成功带动了 Bizhub 12p。
如果你一直找不到打印机的驱动,尤其是一些非一线品牌的打印机,那么首先就可以假设它是贴牌机,然后从一些主流品牌的打印机入手(尤其是像兄弟这样经常做 OEM 产品的品牌),寻找与该打印机外观相似的型号,往往你就能找到合适的驱动程序19。
和 Windows 与 macOS 不同,Linux 下配置打印机是个技术活。为了让部分型号的打印机能正常使用,的确需要「折腾」一番,对使用国产 Linux 的政企客户来说更是如此。
正是在这样的背景下,笔者写下这篇打印机安装攻略,为大家「抽丝剥茧」,将 Linux 配置打印机的步骤和要点写清、写透。相信无论是运维人员,还是更广大的 Linux 发行版用户,在阅读这篇教程后,能够轻松配置打印机,在 Linux 下享受畅快、自然的打印体验。
期待本文能给大家帮助和启发。
> 实用、好用的 正版软件,少数派为你呈现 🚀
© 本文著作权归作者所有,并授权少数派独家使用,未经少数派许可,不得转载使用。