为什么在命令行中卸载驱动器需要 root 权限,而在 Nautilus 中却不需要?如何更改?

为什么在命令行中卸载驱动器需要 root 权限,而在 Nautilus 中却不需要?如何更改?

当我插入拇指驱动器、媒体卡或 USB 硬盘驱动器时,要通过命令行卸载它,我需要使用:

sudo umount /media/the_device

但是,我可以通过单击弹出按钮或使用设备上的右键单击上下文菜单在 Nautilus 等文件管理器中卸载该设备。

造成这种差异的原因是什么?如何更改它,以便我可以从命令行卸载而无需 root 权限?更改它是个坏主意吗?

编辑:万一有变化,我正在运行 9.04。我运行过大多数版本 5.10--9.04,据我回忆,一直都是这样。

答案1

Nautilus 不会直接卸载设备;它通过 DBus 与系统守护进程 (udisks-daemon) 通信并要求其卸载。

守护进程通过联系另一个系统守护进程 PolicyKit 来检查您是否被允许这样做。

PolicyKit 使用 中定义的配置/usr/share/polkit-1/actions/org.freedesktop.udisks.policy(除非本地系统管理员在 中覆盖它/etc/polkit-1)。该文件告诉 PolicyKit,具有活动控制台会话的用户可以分离驱动器,因此 PolicyKit 与第三个守护进程 ConsoleKit 通信,以查看您是否具有活动的控制台会话。通过 gdm 登录算作控制台会话;通过 ssh 登录不算。

有一个命令行工具udisks可让您使用相同的机制而无需使用 sudo 卸载设备:

udisks --unmount /dev/sdb1

卸载文件系统;我也可以用

udisks --detach /dev/sdb

这使得我的 USB 密钥上的 LED 变暗。

答案2

情况可能已经改变——在当前的 Ubuntu 10.04 中,umount 无需 sudo 即可用于 USB 驱动器。一般来说,我认为该命令

gvfs-mount -u /media/the_device

(gvfs-mount 位于 gvfs-bin 包中)应该始终有效。

答案3

目前的答案已被弃用。尝试GIO 命令行工具

gio mount --unmount *mounted location*

获取当前已安装的分区,例如:

lsblk | grep media

参考

吉奥GTK库为通用 I/O、网络、IPC、设置和其他高级应用程序功能提供有用的类。

GIO 提供了可移植、现代且易于使用的文件系统抽象 API,用于访问本地和远程文件;一组基于 DBus IPC 规范的低级和高级抽象;应用程序设置 API;可移植的网络抽象;以及用于编写异步操作而不会阻塞应用程序用户界面的附加实用程序。

gio mount

提供对 GIO 安装功能各个方面的命令行访问。

挂载是指将多个文件系统和设备排列在以 / 为根的单个树中的传统概念。传统的挂载发生在内核中,并由 mount 实用程序控制。GIO 通过引入挂载守护进程扩展了这一概念,这些守护进程可以使文件系统可供 GIO 应用程序使用,而无需内核参与。

相关内容