Gnome 中的“弹出 USB 驱动程序”如何工作?

Gnome 中的“弹出 USB 驱动程序”如何工作?

我脑子里一直有一个问题:

我有一个外部硬盘驱动器,当我想卸下它时,我只需在 Nautilus 中给出一个图标,上面写着:“安全地移除设备”(使用鹦鹉螺侏儒 3.14德班8),但实际上背后的流程是怎样的呢?这是一种了解到底发生了什么的方法吗?某种日志?

我想象第一个过程是umount /wherever/its/mount,但我注意到当我使用umount外部硬盘驱动器的 LED卸载它时(当Windows操作系统关闭LED时),所以:命令umount应该切断连接硬盘的USB端口的电源?或者是另一个命令执行此操作?

谢谢

答案1

umount命令本身不会切断驱动器的电源,安装实际上意味着将驱动器上的文件系统与目录链接起来,因此卸载只是这样做 - 取消与特定目录的安装链接;就 Nautilus 文件管理器而言,这并不是它在幕后使用的,事实上它使用G卡口来自标准 Gio API 的对象,用于所有 GNOME 相关类型的开发。

为了避免让您感到太困惑,让我用源代码和文档来解释它。对源代码的简要搜索表明,nautilus-文件操作.c文件中,nautilus_file_operations_unmount_mount_full函数调用do_unmount,函数调用g_mount_eject_with_operation函数。最后一张属于API 的 GMount 部分。弹出将涉及同步需要写入安装、unmounting卷或驱动器的剩余数据,然后关闭其电源(如果是 USB 驱动器或光盘)。

如果您期待可以关闭驱动器电源的 shell 命令就像 Nautilus 一样,有一个 viaudisksudisksctl,如果我没记错的话,udisksctl操作系统会使用它systemd(但不要在最后一个声明中引用我,这只是一个意见)。这利用了U盘2,这实际上是另一个用于通过以下方式处理驱动器和卷的 APID总线界面;它实际上非常好,我已经用于开发我自己在 Ubuntu 上的指标

所以长话短说:

  • Nautilus 使用 Gio API 来处理挂载,但不调用任何外部或独立的命令行实用程序
  • 有一个等效的命令行可以执行与 Nautilus 类似的操作
  • 您始终可以使用 Gio API、UDisks API 编写自己的 API,或者调用外部udisksudisksctl命令。

也可以看看:

答案2

在 gnome 中,在 nautilus 中模拟 MYUSB 驱动器弹出的最佳方法是

$ gio mount -e /media/dzmanto/MYUSB

它不需要 root 权限。

相关内容