KDE 分区管理器在打开时要求输入密码,但 GNOME 磁盘则不需要。这是为什么?

KDE 分区管理器在打开时要求输入密码,但 GNOME 磁盘则不需要。这是为什么?

标题基本上说明了一切。

KDE 分区管理器在打开应用程序后要求输入密码,但 GNOME Disks 不会要求输入密码。它(磁盘)基本上可以做所有事情,而无需尝试提升权限。

我在多个发行版中都看到过这种情况:Ubuntu vs KDE neon、Fedora vs Fedora KDE、OpenSUSE Tumbleweed 等。

他们的行为方式是如何以及为何如此?

答案1

区别在于两者如何获取有关系统中设备的信息。您可以作为普通用户从 UDev 数据库和 sysfs 获取有关块设备的一些信息(这就是为什么lsblk可以工作的原因),但特别是对于 LVM 或 MD RAID 等更高级的设置,您需要使用需要 root 权限的工具。但即使为了获取有关分区的更多信息,您也需要 root(这就是为什么fdisk -l给您大量的没有权限如果你不以 root 身份运行它)。

这就是为什么 KDE 分区管理器需要立即进行身份验证,它运行 、 等工具sfdiskcryptsetuplvm获取启动后显示的所有额外信息(它实际上使用了一个新的KPM核心为此,GUI 不会以 root 身份运行,但这并不重要)。

为什么 GNOME Disks 不需要这个?它使用的数据来自U盘。 UDisks 是一个以 root 身份运行的守护进程,因此它已经拥有所有这些信息(它使用与 KDE 分区管理器相同的工具/库)并为每个人提供“读取”访问权限(您可以检查udisksctl dump它所知道的内容)。只有更改某些内容的操作(例如删除分区)才需要使用身份验证波尔基特

您可能会问为什么 KDE 分区管理器不使用 UDisk?我不知道,我只能猜测。 UDisk 很长一段时间都不支持像 LVM 这样的“高级”存储(它的主要关注点更多地是安装设备和类似的“更简单”的东西),所以这就是 KDE 分区管理器的作者可能决定不使用它的原因。

答案2

不是“为什么会这样?”问题的答案,而是我发现的一种如何禁用询问密码的方法。

/etc/polkit-1/rules.d目录中创建一个名为 example 的文件partmanager.rules。然后在那里写入以下内容:

polkit.addRule(function(action, subject) {
    if (action.id == "org.kde.kpmcore.externalcommand.init" &&
        subject.isInGroup("yourusername")) {
        return polkit.Result.YES;
    }
});

替换yourusername为您的用户名。

现在,当您打开 kde 分区管理器时,它不会询问您密码。


关于“为什么它要求密码”的问题 - 可能是因为它目前是这样编程的。我同意,如果可能的话,它应该扫描分区而不首先询问密码,并且仅在要完成更改操作时询问它。但为此,请在以下地址提交正确的错误报告:https://bugs.kde.org

相关内容