标题基本上说明了一切。
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 分区管理器需要立即进行身份验证,它运行 、 等工具sfdisk
,cryptsetup
并lvm
获取启动后显示的所有额外信息(它实际上使用了一个新的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。