Gnome 的“彈出 USB 驅動程序”如何工作?
有一段時間我腦子裡有一個問題:
我有一個外部硬碟驅動器,當我想解除安裝它時,我只需在 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 orudisksctl
,如果我沒記錯的話udisksctl
,它帶有使用的作業系統systemd
(但不要在最後一句話中引用我的話,那就是僅供參考)。這利用了UDisks2,它實際上是另一個通過D-Bus介面處理驅動器和卷的 API;它實際上非常好,我已經用於在 Ubuntu 上開發我自己的指標。所以TL;DR :
- Nautilus 使用 Gio API 來處理掛載,但不呼叫任何外部或獨立的命令行實用程序
- 有與 Nautilus 執行類似操作的命令行等價物
udisks
您始終可以使用 Gio API、UDisks API 或呼叫外部或udisksctl
命令編寫自己的。也可以看看: