如何在我的Ubuntu上安装最新的HPLIP以支持我的HP打印机和/或扫描仪?

假设某人拥有一台现代的惠普打印机和/或扫描仪,但官方软件库中的HPLIP软件包不支持该设备。
目前Ubuntu版本在“宇宙”存储库中有以下版本:
bionic (18.04 LTS): 3.17.10+repack0-5
focal (20.04 LTS): 3.20.3+dfsg0-2
impish (21.10): 3.21.6+dfsg0-0ubuntu1  
jammy (22.04 LTS): 3.21.12+dfsg0-1
kinetic (22.10): 3.22.6+dfsg0-1 
lunar (23.04): 3.22.10+dfsg0-1
如果打印机在更高版本的HPLIP中得到支持(在HP开发者门户 | 所有支持的打印机型号中已经确认),那么我们能做些什么呢?
4个回答

安装

目前没有包含更新的hplip软件包的PPA。

但用户可以根据他们的手册从HP下载并安装二进制文件。

在继续之前,您应该删除任何与hplip相关的软件包,以避免可能的未来冲突。

如果您的系统是最新的Debian(11 bullseye及更高版本)或Ubuntu(20.04 LTS focal及更高版本),您应该检查是否安装了python2的遗留支持(请参见下面的“与最新的Debian和Ubuntu上的python2遗留支持不兼容”)

HP在支持页面上有关于这个问题的说明:

警告:如果您正在升级HPLIP,并且HPLIP已经预装在您的发行版中,或者您使用RPM、DEB或其他软件包安装了HPLIP,请使用适用于您的发行版的特定方法卸载先前的版本。如果您不这样做,可能会出现软件包冲突问题或功能问题。
我已经通过实验确定了软件包列表(在16.04 LTS、18.04 LTS、20.04 LTS和21.04上进行了测试),以下是命令:
sudo apt-get purge hplip hplip-data hplip-doc hplip-gui hpijs-ppds \
libsane-hpaio printer-driver-hpcups printer-driver-hpijs
sudo rm -rf /usr/share/hplip/

sudo apt-get autoremove

然后,您应该执行以下步骤:
  1. 步骤1:从官方链接下载 Ubuntu 自动安装程序(.run 文件)或者使用 wget 命令来下载最新版本。

    wget -c  https://download.sourceforge.net/project/hplip/hplip/3.23.3/hplip-3.23.3.run
    
  2. 步骤2:运行自动安装程序

    sh hplip-3.23.3.run
    

    然后按照屏幕上的说明操作(它会要求您的有 sudo 权限的用户输入密码以运行 apt,并删除已安装的 hplip-gui 文件)。安装过程已在HPLIP 站点上有详细文档。

    安装完成后,将显示打印机安装向导,并可以将打印机添加到系统中。


卸载

在这里,我们开始进行二进制HPLIP安装(因此我们没有安装HPLIP相关的deb软件包)。

假设我们已经使用文件hplip-3.23.3.run(或其他版本)完成了安装。我们需要按照以下方式调用特殊的卸载脚本:

sudo hp-uninstall
sudo rm -vrf /usr/share/hplip/ 
sudo rm -vrf /root/.hplip
sudo rm -v /usr/share/hal/fdi/preprobe/10osvendor/20-hplip-devices.fdi

之后,我们可以选择安装官方的Ubuntu软件包:
sudo apt-get -o Dpkg::Options::="--force-confask" install --reinstall hplip hplip-data hplip-doc hplip-gui libsane-hpaio

注意:我已经向HPLIP的LaunchPad账户报告了bug 1782137,要求开发人员在Ubuntu中包含deb软件包HPLIP组件的卸载功能。

近期Debian和Ubuntu上与Python2的兼容性问题

自从Debian 11(bullseye)和Ubuntu 20.04 LTS(focal)开始,Python2已经被弃用,因此许多旧的Python软件包已不再存在。此外,软件包必须明确引用python3或者python2而不能是python

为了向后兼容使用/usr/bin/python的旧Python2代码,你的系统上可能已安装了两个软件包python-is-python2python-dev-is-python2。它们只是安装一些链接,使得pythonpython-config指向这些命令的Python2版本。

例如,你需要这样做才能运行颜色校准套件DisplayCal(displaycal 3.8仍然依赖于Python2代码)。

最简单的检查方法是运行python --version,看它是否显示Python版本2还是版本3。

如果你运行hplip安装包,它会失败,因为它试图找到要使用的python版本(可能是基于`python --version`或等效命令)。如果你已经安装了python2兼容性包,脚本会被欺骗,并尝试安装不再可用的python2依赖包。
如果你真的需要从HP网站安装hplip,并且你确实需要基于python2的工具,你可以暂时更改python版本的链接:
sudo apt-get install python-is-python3 python-dev-is-python3

然后运行安装程序。
当一切都安装好后,编辑/usr/share/hplip/*.py的Python文件,将第一行(#!/usr/bin/env python)替换为#!/usr/bin/python3,因为这是Debian和Ubuntu的hplip软件包中的设置。

4这帮助我解决了Python的依赖问题。谢谢你。 - Mookey
所以使用sudo apt install hplib-gui似乎比下载和运行更好(我遇到了"no systemtrayicon available"和"Failed to load module 'canberra-gtk-module'")。但是你之后如何运行它呢?我曾经有一个出现在我的工具栏上的图标。 - Dr Xorile
1@DrXorile 托盘行为取决于您的桌面环境。在GNOME上可能会失败,但在MATE上可以正常工作。您可以使用hp-toolbox运行HPLIP。只有当您的设备需要最新的HPLIP版本时才需要进行二进制安装。 - N0rbert
对我来说,这个链接中的错误是关于依赖项的问题:https://askubuntu.com/questions/1173641/installing-hplip-3-19-8-fails - matanster
那些“sudo pip2 install”命令在.run脚本中执行后该怎么办呢?它在系统层面上加载了许多python2的依赖库,如opencv-python、skit-image等。为什么脚本会调用sudo pip安装并且污染了系统呢? - Zeta.Investigator
这里有些奇怪。我有一台台式电脑和一台笔记本电脑,它们都从Ubuntu 18.04升级到了20.04。笔记本电脑上的打印功能完美运行,但是我无法让它在我的台式电脑上工作。真是令人烦恼!有人能提供建议吗?我该如何找出笔记本电脑上的情况是什么,以便修复我的台式电脑呢? - Duncan
错误:不支持debian-bullseye/sid版本,因此可能无法安装所有依赖项。不过我们将尝试使用debian-10.3版本的软件包进行安装。然后它拒绝接受sudo密码。这真是一场噩梦,我想知道其他品牌是否运行得更好。 - matanster
1@matanster Debian在这里是不相关的,但如果Ubuntu被错误地检测为Debian - 请参考此问答 - N0rbert
@N0rbert 你好,我今天在尝试设置新打印机时阅读了您的答案和其他答案。我发布了自己的(临时)答案,并分享了我的发现。我认为现有答案中可能存在一些改进的空间,特别是可以避免硬编码版本号和一些其他误解。目前我正在使用20.04存档中的版本。18.04根本不适用于我,但我认为在向前迈进方面付出的努力更好。请告诉我您对我发布的下载命令的看法,它是匆忙写成的,可能需要改进。 - LiveWireBT
https://bugs.launchpad.net/hplip/+bug/1939942 - Adam
不适用于21.04版本,因为hplip-3.21.8.run坚持要安装python-pyqt5python-dbuspython-dbus.mainloop.pyqt5python-notifypython-reportlabpython-gobject这些不存在的软件包。这些软件包都有一个对应的python3-____版本,除了python-gobject。这些对应版本已经安装,但脚本在pyqt5 dbus上失败了。此脚本不兼容21.04 Hirsute Hippo! - ChrisAga
经过更多的调查,发现hplip-3.21.8.run似乎同时兼容python2python3。在Ubuntu 21.04中,Python2已被弃用,但是安装了两个兼容性包python-is-python2python-dev-is-python2,分别将/usr/bin/python链接到/usr/bin/python2/usr/bin/python-config链接到python2默认版本。如果可能,请卸载这两个包。如果不行,您可以通过更改/usr/bin/python指向的Python版本来欺骗hplip-3.21.8.run,但请注意,如果切换回Python2,hplip工具将无法正常工作。hplip应该使用Python3。 - ChrisAga
@ChrisAga 谢谢,将Python2设置为默认确实失败了。现在已经更新答案以防止这种行为发生。再次感谢。 - N0rbert
@N0rbert。我提出了一个段落,关于如何理解并可能解决这个问题,希望能帮助那些仍在运行Python2代码的人。 - ChrisAga
在我的Ubuntu 20.04机器上无法工作。出现了错误:/home/user/.local/lib/python3.8/site-packages/PyQt5/QtCore.abi3.so: failed to map segment from shared object,然后又出现了error: Unable to load Qt4/Qt5 support. Is it installed?,即使安装了pythonispython3也无法让它再次正常工作。 虽然可以进行打印机的交互式设置,但尝试扫描时会产生一个错误:/home/user/.local/lib/python3.8/site-packages/PyQt5/QtWidgets.abi3.so: failed to map segment from shared object - Mr.Gosh
@Mr.Gosh 这样又怎么样?请先移除您本地安装的Python相关内容,然后重试。 - N0rbert
好的,我不知道有什么是我手动安装的。但你说得对,那就是问题所在。你是通过/home/...里的链接意识到了吗? - Mr.Gosh

直到几周前,最新的HPLIP驱动程序版本在HP Developers - HP Linux Imaging and Printing上可用,版本号为3.18.12。在Ubuntu 16.04官方仓库中,可用的版本是3.16.3
首先,我尝试安装从网站下载的最新版本。然而,与软件包python-gobject存在兼容性问题。正如N0rbert(主要答案)所指出的那样,在安装另一个版本之前,您需要完全卸载当前版本的HPLIP。按照N0rbert的描述手动执行此操作。之后,请确保以下文件不再存在(或者相应的文件夹为空):
/etc/hp/hplip.conf
/var/lib/hp/hplip.state
/usr/share/hplip/
/usr/share/ppd/hplip
~/.hplip/hplip.conf
/etc/cups/ppd/HP-....ppd

我不确定以上列出的所有文件是否都绝对需要被删除。然而,如果它们被删除了,我可以顺利进行新的安装,没有问题。
尽管仓库中没有最新版本的驱动程序,但我决定通过apt安装它,因为它与其他预装的软件包不会崩溃。我的操作如下:
  1. sudo apt install hplip(Linux驱动程序,适用于大多数惠普打印机和扫描仪)。

  2. sudo apt install hplip-gui(hp-plugin所需的软件)。

  3. hp-plugin(以普通用户身份运行)。

    此插件是惠普驱动程序的专有“部分”,不开源。设备将无法正常工作。您将被提示接受条款并安装与您已安装的驱动程序版本完全匹配的所需插件。

  4. hp-doctor(确保一切都正确安装,特别是插件)。

  5. hp-setup添加连接的设备,或使用已在此时安装的惠普软件(带有图形界面)。

  6. 转到Ubuntu系统设置,使用HPLIP添加新的打印机/扫描仪。

附注:截至2019年1月,最新版本为3.19.1,我尚未测试过。

一般来说,如果你不是非常需要一个软件包的最新版本,最好安装官方仓库提供的版本。这样更有可能避免后续出现问题。

这对于Ubuntu 18.04来说是一个很好的解决方案。官方仓库中的旧版本以及hp-doctor都声明了该发行版尚未得到支持,但整个过程对我来说非常顺利,与3.19.1版本相比,后者由于在hp-setuphp-plugin命令期间出现了python2/python3依赖不匹配的问题而无法正常工作。 - jerome
2对于像我一样使用Ubuntu 18.04操作系统,通过update-alternatives工具管理多个python2python3版本的用户来说(如果您想了解更多,请点击这里),运行hp-doctorhp-setup命令可能会出现错误:无法加载cupsext,请检查hplip安装的提示信息。解决方案:改为运行python3 $(which hp-doctor)python3 $(which hp-setup)命令。 - KiriSakow
1@KiriSakow 看起来对于我的HP LaserJet打印机来说,最好的解决方案是在Ubuntu 18.04的官方软件源中安装hplip软件包。它完美运行,没有我在最新的HP驱动中遇到的一些问题。然而,像hp-setup、hp-doctor和hp-systray这样的功能无法正常工作(虽然不是很重要),即使按照你提供的解决方案进行操作,我仍然会收到相同的Python错误信息,尽管已经安装了Python3。你认为我可能漏掉了什么吗? - Sadi
在我的情况下,第6步已经由第5步处理了。 - matanster
2这个答案非常重要,因为它包含了HP插件的步骤,似乎这是确保事情真正运作的必要步骤。 - matanster
确认这些步骤(大部分)在我的Ubuntu 19.10上有效。(大部分情况下,hp-doctor会出现错误error: cupsext not present in the system. Please re-install HPLIP. - 但打印机选择和打印功能完全正常。) - jerome

如果你使用的是Ubuntu 20.04
sudo apt install hplip hplip-gui

然后重新启动电脑!!

注意:首先删除所有以前的安装。参见this答案。


在我的另一个品牌的旧打印机拒绝打印大约15年后,我今天尝试安装了一台HP M182n。我以为HP的驱动程序是最好的,从我的18.04安装开始,我遇到了一些问题,我将在这里列出。
对于我的情况来说,最简单的方法是使用默认软件包的Ubuntu 20.04。所以如果有疑问,请先尝试这个,以免浪费太多时间。
接着说:
有一个snap,显然是一个夏季辅导项目,但从未离开实验阶段,然而当人们在软件中心搜索HPLIP时,它会出现在搜索结果中,许多人似乎不愿打开终端,毕竟这是Ubuntu。2019年8月的Snap版本0.2似乎根本无法工作。描述只是稍微暗示了它是非功能性软件。
由于我的型号是一台多功能打印机和扫描仪,我需要安装HPLIP插件,最简单的方法似乎是使用hp-plugin,正如Felipe和其他人所写的那样。你也可以从HP网站下载,但对我来说太麻烦了。
值得注意的是:如果你以前没有过网络打印机/多功能打印机,并且你认为防火墙可能是由于连接超时而出现问题,请确保在追逐其他事情并因为沮丧而禁用很多安全功能之前,先安装HPLIP插件。
最后,如果你绝对必须从HP网站下载最新版本,请确保你正在下载的是最新版本。GitHub有一个API,今天我了解到Sourceforge也有一个!让我们使用它,不要编写带有硬编码版本号的说明,你必须跟踪。
# 使用Sourceforge发布API下载最新版本 # 注意: # - Linux平台仍然被标记为提供2016年的3.16版本。 # - URL的部分被替换以产生类似于以下结果的结果: # https://nchc.dl.sourceforge.net/project/hplip/hplip/3.20.9/hplip-3.20.9.run # https://sourceforge.net/p/forge/documentation/Using%20the%20Release%20API/
wget $(curl https://sourceforge.net/projects/hplip/best_release.json \ | jq -r '.platform_releases.windows.url' \ | sed -e '{s/tar\.gz.*/run/;s/downloads/nchc.dl/}')
在Ubuntu 20.04上安装HPLIP 3.20.9给我带来了更多麻烦,因为它有一些损坏的依赖关系。正如我所说,我的设置现在可以工作了,我必须从轻度愚蠢的多功能打印机跳到新的网络打印机。
编辑:在18.04上尝试安装插件让我陷入了更多麻烦。看起来HP已经删除了与Ubuntu中匹配版本的插件,而是选择了一个次要版本的提升...没有人再去考虑它。我已经打开了一个错误报告,希望能解决这个问题:https://bugs.launchpad.net/ubuntu/+source/hplip/+bug/1903693