如何才能暂时暂停 Nautilus 文件系统自动挂载,而不对系统和用户配置进行永久性更改?

如何才能暂时暂停 Nautilus 文件系统自动挂载,而不对系统和用户配置进行永久性更改?

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

通常 Nautilus 会在插入驱动器时自动挂载驱动器,因此我必须等待此过程完成,然后卸载驱动器,然后才能格式化它。唯一的问题是,如果用户禁用了自动挂载,那么我的程序将永远等待下去。

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

如何才能暂时阻止 Nautilus 仅在我的程序运行时自动安装 USB 驱动器?

答案1

您可以使用PROGRAM它来检查您的程序是否正在运行以激活该 UDEV 规则,否则它将被禁用,因为pgrep返回不成功。

程序

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

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

来源: 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"
    
  2. 重新加载规则

    sudo control --reload-rules
    

顺便说一下,udisk2是负责自动安装的

答案2

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

显然,您已经知道如何关闭相关功能。如果您担心程序崩溃时无法恢复该功能,那么只有两种可能:确保您的程序不会崩溃,或者编写一个程序来监视您的程序并在程序未运行时恢复该功能。

但也许还有其他解决方案。您可以将如下行附加到/etc/fstab

LABEL=somemagic /path ntfs noauto,user 0 0

然后,如果驱动器上的文件系统带有该标签,它将不受自动挂载功能的影响,您可以不受干扰地挂载它。有关详细信息,请参阅man mountman fstab。您也可以使用 UUID 代替 LABEL,但这取决于您的用例和文件系统。

相关内容