Gnome

Gnome 的“彈出 USB 驅動程序”如何工作?

  • December 5, 2021

有一段時間我腦子裡有一個問題:

我有一個外部硬碟驅動器,當我想解除安裝它時,我只需在 Nautilus 中輸入“安全刪除單元”的圖示(在Debian 8中使用Gnome 3.14中的****Nautilus),但實際上背後的過程是什麼?這是一種看看到底發生了什麼的方法?某種日誌?

我想第一個過程是umount /wherever/its/mount,但我注意到當我使用umount外部硬碟驅動器的 LED 解除安裝它(當 Windows 作業系統關閉 LED 時),所以:該umount命令應該切斷 USB 埠的電源硬碟連接在哪裡?或者是另一個命令這樣做?

謝謝

umount命令本身不會切斷驅動器的電源,掛載實際上意味著將驅動器上的文件系統與目錄連結,所以解除安裝只是這樣做 - 從特定目錄取消連結掛載;就 Nautilus 文件管理器而言,這並不是它在底層使用的東西,實際上它使用標準 Gio API 中的GMount對象進行所有與 GNOME 相關的開發類型。

在不給你太多困惑的情況下,讓我從原始碼和文件的角度來解釋它。對原始碼的簡要搜尋發現,在nautilus-file-operations.c文件中,nautilus_file_operations_unmount_mount_full函式呼叫do_unmount,它呼叫g_mount_eject_with_operation函式。最後一個屬於API 的 GMount 部分。彈出將涉及同步需要寫入安裝、unmounting卷或驅動器的剩餘數據,然後在 USB 驅動器或光碟的情況下將其關閉。

如果您期望一個shell 命令可以像在 Nautilus 中一樣關閉驅動器udisks,那麼有一個 via or udisksctl,如果我沒記錯的話udisksctl,它帶有使用的作業系統systemd(但不要在最後一句話中引用我的話,那就是僅供參考)。這利用了UDisks2,它實際上是另一個通過D-Bus介面處理驅動器和卷的 API;它實際上非常好,我已經用於在 Ubuntu 上開發我自己的指標

所以TL;DR :

  • Nautilus 使用 Gio API 來處理掛載,但不呼叫任何外部或獨立的命令行實用程序
  • 有與 Nautilus 執行類似操作的命令行等價物
  • udisks您始終可以使用 Gio API、UDisks API 或呼叫外部或udisksctl命令編寫自己的。

也可以看看:

引用自:https://unix.stackexchange.com/questions/421692