我将 Manjaro 与 Cinnamon 结合使用,每当我进入“打印设置”(关于system-config-printer
)时,我都无法执行任何操作,直到我单击角落中的“解锁”,这需要我输入密码。
这很烦人,而且授权几分钟后就过期了,我必须反复解锁。
如何允许无密码访问 的所有功能system-config-printer
?我已经将我的用户添加到组中cups
;printer
我的系统上没有组。
这台机器在我家里,仅供我使用,它已经是安全的,我不担心未经授权访问打印机设置。
答案1
好吧,你的问题仍然分为两部分,所以我将把它分解并分别回答每个问题:
1. CUPS 政策和访问
CUPS 是 Linux 中事实上的打印服务器,允许所有类型的打印:直接 USB 电缆连接、本地 LAN 打印以及 WAN 访问。因此,它具有多种配置设置,其中许多特定于安全和系统策略管理。此时深入研究这些复杂的细节会适得其反,因为您现在的主要目标基本上是允许在您自己拥有并有权访问的本地(直接连接或 LAN 上)打印机上进行打印,而无需输入密码。
如果你已经cups
安装了(现在大多数 Linux 发行版都包含了它),并且你已经启动了该服务(如果你可以看到任何机器,system-print-settings
那么说明它已经在运行了):
sudo systemctl start cups
那么如果你去http://本地主机:631/您将看到 CUPS 服务器管理页面,它本质上是一个用于 CUPS 配置的可通过 Web 访问的 GUI,默认情况下/etc/cups/cupsd.conf
对其访问没有任何限制。
[...]
Browsing On
BrowseLocalProtocols dnssd
DefaultAuthType Basic
WebInterface Yes
<Location />
# Restrict access to the server...
Order allow,deny
</Location>
[...]
如果您进一步查看同一个文件,cupsd.conf
您会发现其他位置会受到限制,例如:
<Location /admin/conf>
AuthType Default
Require user @SYSTEM
</Location>
如果您输入密码,http://localhost:631/admin/conf
系统会提示您输入密码。
现在,这是最重要的部分:CUPS 不考虑 root
或sudo
**以任何方式变得特殊,事实上,他们属于那些赋予他们访问服务器配置权限的组的事实**
@SYSTEM
中的指定是/etc/cups/cupsd.conf
对 中存在的值的引用/etc/cups/cups-files.conf
。通常(除非由管理员直接更改),它会显示:
sudo grep -i System /etc/cups/cups-files.conf
# Administrator user group, used to match @SYSTEM in cupsd.conf policy rules...
SystemGroup lpadmin
系统上存在的该lpadmin
组允许用户(包括root
)配置 CUPS。如果您groups
以 root 身份运行,您将看到该lpadmin
组与 一起包含在那里root
。
因此,为了让任何系统用户能够访问 CUPS 配置页面,您需要确保它们是您在 中lpadmin
找到的对应组名称的一部分或任何其他组名称的一部分。@SYSTEM
cups-files.conf
显然,将用户添加到该组后,您可能需要重新启动服务cups
以及可能重新启动用户会话,因此您最好重新启动。
现在,这将允许非 sudo 用户设置打印机选项、打印以及向您拥有的任何打印机发送/取消作业。中的其他默认设置cupsd.conf
默认情况下应该足够安全,或者至少是我最后一次听到的。
2Print Settings
和system-config-printer
虽然上述内容允许您以http://localhost:631/*
非 root 用户身份访问打印机配置选项,但只要该用户位于该lpadmin
组中,它仍然可能会要求您输入密码,更重要的是,对于您的特定问题,它会不影响任何与system-config-printer
对话框相关的内容。
现在我承认这部分要棘手得多,当使用sudoers
非 sudo 用户的组权限允许我进行各种形式的访问时,我打开的每个后续对话框都会产生密码提示,例如,如果我单击设置时,我会看到密码提示,如果我将其留在后台,设置对话框最终会打开,并且事实证明更改大多数配置选项要么是不可能的,要么是非常不实用的。
然后我研究了如何管理该对话框的策略设置,最终找到了相应的文件。
所需要的只是下面这行代码gawk
(运行时 确保已安装以进行就地替换)运行时永远不会看到该unlock
按钮或密码提示system-config-printer
:
sudo gawk -i inplace '{gsub((/auth_admin|auth_admin_keep/),"yes"); print }' /usr/share/polkit-1/actions/org.opensuse.cupspkhelper.mechanism.policy
它的作用是替换该对话框的策略文件中要求auth_admin
或auth_admin_keep
to 的所有值yes
,因此您最终将在策略文件中得到以下设置及其更改的访问级别:
$ sudo grep -e "action id" -e "description xml:lang=\"en\"" -e "yes" /usr/share/polkit-1/actions/org.opensuse.cupspkhelper.mechanism.policy
<action id="org.opensuse.cupspkhelper.mechanism.server-settings">
<description xml:lang="en">Get/Set server settings</description>
<allow_any>yes</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
<action id="org.opensuse.cupspkhelper.mechanism.devices-get">
<description xml:lang="en">Get list of available devices</description>
<allow_any>yes</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
<action id="org.opensuse.cupspkhelper.mechanism.printer-set-default">
<description xml:lang="en">Set a printer as default printer</description>
<allow_any>yes</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
<action id="org.opensuse.cupspkhelper.mechanism.printer-enable">
<description xml:lang="en">Enable/Disable a printer</description>
<allow_any>yes</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
<action id="org.opensuse.cupspkhelper.mechanism.printer-local-edit">
<description xml:lang="en">Add/Remove/Edit a local printer</description>
<allow_any>yes</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
<action id="org.opensuse.cupspkhelper.mechanism.printer-remote-edit">
<description xml:lang="en">Add/Remove/Edit a remote printer</description>
<allow_any>yes</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
<action id="org.opensuse.cupspkhelper.mechanism.class-edit">
<description xml:lang="en">Add/Remove/Edit a class</description>
<allow_any>yes</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
<action id="org.opensuse.cupspkhelper.mechanism.job-edit">
<description xml:lang="en">Restart/Cancel/Edit a job</description>
<allow_any>yes</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
<action id="org.opensuse.cupspkhelper.mechanism.job-not-owned-edit">
<description xml:lang="en">Restart/Cancel/Edit a job owned by another user</description>
<allow_any>yes</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
<action id="org.opensuse.cupspkhelper.mechanism.all-edit">
<description xml:lang="en">Change printer settings</description>
<allow_any>yes</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
<action id="org.opensuse.cupspkhelper.mechanism.printeraddremove">
<description xml:lang="en">Add/Remove/Edit a printer</description>
<allow_any>yes</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
现在,您需要认识到,如果不允许通过我在第 1 部分中编写的内容进行访问,则更改第 2 部分的策略设置不会对 CUPS 产生任何影响。事实上,如果cups
未运行或其访问受到限制(甚至通过将其踢出 root 来限制) )lpadmin
,访问该对话框将不允许您进行打印。