![在禁用 root 用户的系统上无法安装 Hplip(密码不正确,无法安装依赖项)](https://linux22.com/image/185900/%E5%9C%A8%E7%A6%81%E7%94%A8%20root%20%E7%94%A8%E6%88%B7%E7%9A%84%E7%B3%BB%E7%BB%9F%E4%B8%8A%E6%97%A0%E6%B3%95%E5%AE%89%E8%A3%85%20Hplip%EF%BC%88%E5%AF%86%E7%A0%81%E4%B8%8D%E6%AD%A3%E7%A1%AE%EF%BC%8C%E6%97%A0%E6%B3%95%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96%E9%A1%B9%EF%BC%89.png)
该线程源自一个askubuntu线程
那里的线程开启者尝试安装 hplip-libraries,但失败了,因为 hplip 将他的系统视为纯 Debian 系统,而不是 Ubuntu 系统。
一个非常相关的问题会影响 Ubuntu 以外的发行版的用户——因为 Ask Ubuntu 仅适用于 Ubuntu,所以我在这里打开这个线程,希望能帮助其他发行版的一些人。
问题的症状是:在执行过程中hplip-*.run
,系统会要求您输入root密码,但是,输入正确的密码后,安装程序会告诉您密码错误。这只会影响禁用 root 帐户的人(使用 sudo 的人)。
如何解决此问题并在禁用超级用户的计算机上安装 hplip?
答案1
我不怀疑 Leon 的解决方案会起作用,但从阅读安装程序代码来看,不需要编辑安装程序内容就可以在没有 root 密码的平台hplip-install
上运行。su
安装程序的密码代码将不同的发行版映射到其 root 访问方法(su
或sudo
),但它也支持覆盖。从base/password.py
源头看:
def __readAuthType(self):
# TBD: Getting distro name should get distro class
# added replace() to remove the spaces in distro_name
distro_name = get_distro_name().lower().replace(" ","")
self.__authType = user_conf.get('authentication', 'su_sudo', '')
该user_conf
文件位于~/.hplip/hplip.conf
.因此,如果您创建或修改该文件以包含以下配置:
[authentication]
su_sudo=sudo
当安装程序在您的用户帐户下运行时,它会覆盖发行版映射并强制使用sudo
来获得 root 访问权限,即使在发行版上也是如此。su
答案2
修复密码问题
问题是 hplip-Installer 错误地假定现有的 su 用户,即使它已被删除以支持使用 sudo。可以通过以下方式缓解这种情况:
下载hplip-*-.run-来自 hp 网站的发行版文件这里。
使文件可执行,然后运行它。现在,如果您遇到该线程所涉及的问题,请中止安装。
此时,在运行的目录中已经创建了一个文件夹。跑步-文件。该文件夹内有一个子文件夹,名为根据。在该子文件夹中,有一个文件名为密码.py
在此文件中,您将看到一个名为 的列表AUTH_TYPES
,它包含键值对,其中键是发行版,值是身份验证类型。找到您的发行版,如果您遇到指定的问题,该发行版可能会有 a'su'
作为值。只需将此值更改为'sudo'
并保存文件即可。
现在重新启动安装(hplip-install
在创建的目录中运行),输入密码现在应该可以按预期工作。
无法安装依赖项
但这可能不是唯一的问题 - 安装程序也可能无法在您的系统上安装依赖项。对此有两种可能的解决方案:
要么: 手动安装依赖项(安装程序会打印出依赖项列表,只需手动安装即可)
或者:也更改安装程序中依赖安装的代码:
- 打开文件安装程序/发行版.dat
- 在该文件中找到您的发行版。
- 将形式的命令替换
su -c "<command>
为sudo <command>
,并确保删除右引号。是的,很费力,但是有了一个拥有良好替换工具的编辑器,还不错。
使用上述解决方案之一后,继续并重新运行安装程序。现在,它要么会看到您手动安装的软件包,要么能够根据您对上述文件所做的更改来安装依赖项本身。
仍然有未解决的依赖关系
就我而言,安装人员仍然声称pyqt5和pyqt5-dbus即使我使用 pip 安装了它们,也不会安装它们。也许安装程序需要 apt-packages,我不太确定。
无论如何,如果您也遇到这个问题,您可以通过更改另一个文件来修复它,即安装程序/text_install.py。
在此文件中,搜索类似 的条件if num_req_missing
,然后注释掉相关代码分支,以阻止安装程序在发现丢失的软件包时退出。仅当您确定所有依赖项均已安装时才执行此操作!
再次启动安装程序,当它询问您是否要安装缺少的依赖项时,输入n
,现在它应该完成。
配置问题
安装后或运行时hp-setup
,您需要设置打印机。这里再次出现密码问题,因为输入正确的凭据后,程序会告诉我它们是错误的。简单修复:sudo hp-setup
从您的终端运行,您将能够配置您的打印机。
评论
该程序已成功用于hplip-3.20.11在一个Debian 10.7-系统。我认为它应该适用于许多其他发行版,但还没有尝试过。当然,其他版本的 hplip 的工作方式可能有点不同,我希望不会有太大的不同,以致使这个答案毫无帮助。
答案3
这对我有帮助。
TL;DR
授予您已经安装的权限hplip
- 打开终端
- 输入
sudo su
(并输入您的密码) - 在同一航站楼键入
hp-plugin
并继续安装。 - 选修的。关闭这出于安全原因,安装完成后立即打开终端。
现在这应该 100% 消除ROOT权限问题是因为正如 @FeRD 提到的,它是关于尝试使用的错误 python 函数su
(而不是sudo
它应该使用的),因为您使用了 Ubuntu 以外的发行版(并且安装程序无法检测到正确的 AUTH_TYPE 例如 warning: pop distro is not found in AUTH_TYPES
。在我的情况下,我使用波普)。然后它会询问您su
未配置的密码。
hp-plugin
首先以 root 身份运行安装程序 ( ) 从一开始就消除了该问题。
这是关于我们主题的另一个好问题,它帮助我更好地了解情况https://forums.linuxmint.com/viewtopic.php?t=320268