如何在不永久更改系统和用户配置的情况下暂时暂停 Nautilus 文件系统自动挂载?

Ali*_*ton 6 nautilus usb-drive udisks udev usb-storage

我编写了一个工具,可以在插入文件时自动格式化并将文件复制到 USB 闪存驱动器。它需要卸载驱动器才能对其进行格式化。

通常 Nautilus 会在插入时自动挂载驱动器,所以我必须等待这种情况发生,然后在格式化之前卸载驱动器。唯一的问题是,如果用户禁用了自动挂载,那么我的程序将永远等待。

我可以在程序启动时更改 dconf 自动挂载设置,然后在退出时将其更改回来,但这不是一个好的解决方案,因为如果我的程序崩溃,设置将无法恢复。

如何暂时阻止 Nautilus 仅在我的程序运行期间自动挂载 USB 驱动器?

use*_*.dz 1

您可以使用PROGRAM检查您的程序是否正在运行来激活该 UDEV 规则,否则它会因pgrep返回失败而被禁用。

程序

执行程序判断是否有匹配;如果程序成功返回,则该键为 true。设备属性可供环境中执行的程序使用。该程序的标准输出可在 RESULT 键中找到。

这只能用于运行时间非常短的前台任务。详细信息请参见运行。

来源: man udev

  1. 添加新规则文件

    /etc/udev/rules.d/90-prevent-auto-mount.rules

    ACTION=="add", KERNEL="sd[a-z][0-9]*", DRIVERS=="usb-storage", PROGRAM="/usr/bin/pgrep yourprogramname", ENV{UDISKS_IGNORE}="1"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 重新加载规则

    sudo control --reload-rules
    
    Run Code Online (Sandbox Code Playgroud)

BTW,udisk2是负责自动安装的人


Joh*_*nen 0

更新:我忽略了最重要的规范:“不对系统进行永久性更改”。我想说,仍然可以解决,但如果没有对桌面会话生命周期或桌面事件处理进行深入的研究工作,就无法解决。那不是我的专业知识。;)

显然您已经知道如何关闭相关功能。如果您担心程序崩溃时它不会切换回来,那么只有两种可能性:注意您的程序不会崩溃或编写一个程序来监视您的程序并在程序未运行时将功能切换回来。

但也许有不同的解决方案。您可以将这样的行附加到/etc/fstab

LABEL=somemagic /path ntfs noauto,user 0 0
Run Code Online (Sandbox Code Playgroud)

然后,如果驱动器上的文件系统带有该标签,则它不会受到自动挂载功能的影响,并且您可以不受干扰地(u)挂载它。详情请参阅man mount和。man fstab您还可以使用 UUID 而不是 LABEL,但这取决于您的用例和文件系统。