在我的 bash 脚本中,我挂载分区,检查它们,将文件复制到它们,然后卸载。当脚本挂载分区时,Nautilus 会弹出一个窗口,显示分区并窃取焦点。这是我想要避免的。
注意:我知道我可以在系统设置、详细信息、可移动媒体Never prompt or start programs on media insertion
中更改此行为,但我不想更改行为,例如,如果插入了 USB 记忆棒,我只想在我的 bash 脚本中阻止它. 由于此脚本在其他用户的计算机上运行,我无法修改这些设置(在脚本中),因为如果它异常终止,它将保留修改后的设置(我也不认为应该这样做)。
实际上这个自动显示似乎并不一致。如果我从终端执行完全相同的命令,Nautilus 不会显示,而且我知道我的脚本中还有其他未显示的安装。那么是什么原因造成的呢?这是代码的示例(两者都会导致弹出单独的 nautilus 窗口):
mount $dev $target
mkdir -p $target/home
mount $homedev $target/home
Run Code Online (Sandbox Code Playgroud)
我有兴趣了解挂载向 Nautilus 发出信号的过程以及发生这种情况的原因(如果我从终端挂载分区则不会发生)。防止这种情况发生的最佳方法是什么。
我注意到这种行为从 11.10 版开始(如果我没记错的话)。我目前运行的是 12.04,但该脚本必须适用于所有受支持的版本。我不认为该解决方案应该涉及修改系统设置(这可能因版本而异)。例如,如果您查看挂载分区的其他内容(如 os-prober),则在挂载不同分区时不会弹出 nautilus 窗口。
该脚本可以在这里找到。而这里的部分地方鹦鹉螺持久性有机污染物。我认为它也会出现在这里,但我一直将测试重点放在第一个链接上。这是它不会弹出的地方,在其他挂载之前调用 - 请注意,我已将第一个挂载重写为 --read-only 并在 if 语句中,这没有区别。
理想情况下,答案将解释为什么会发生这种情况以及如何防止它发生,换句话说,解释为什么脚本mount
内的处理方式与终端发出的脚本不同。如果它是一个完整的解决方案并且可以支持所有桌面环境(ubuntu、kubuntu、xubuntu、lubuntu 等),那么一个好的解决方法也将被接受——我也想避免测试的指数增长来验证它。
提前致谢
============
根据papashou的链接解决方案:
add_udev_rules ()
{
for i in "$dev" "$homedev" "$bootdev" "$usrdev"; do
if [ -n "$i" ]; then
block=${i#/dev/}
echo "KERNEL==\"""$block""\",ENV{UDISKS_PRESENTATION_HIDE}=\"1\"" >> "$wubi_move_dir"/wubi_move.rules
fi
done
cp "$wubi_move_dir"/wubi_move.rules /etc/udev/rules.d/wubi_move.rules
udevadm trigger > /dev/null 2>&1
}
remove_udev_rules ()
{
rm /etc/udev/rules.d/wubi_move.rules
rm "$wubi_move_dir"/wubi_move.rules
udevadm trigger > /dev/null 2>&1
}
Run Code Online (Sandbox Code Playgroud)
这达到了预期的结果,但感觉像是一种大锤方法。我相信 udev 中可能有一个微调,这将允许分区仍然显示在 Nautilus(和其他文件浏览器)中,而不会在安装时弹出。顺便说一句,如果有人想尝试这个,下面的脚本将显示 nautilus 的弹出效果:
mkdir -p /tmp/testmount
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1
rmdir /tmp/testmount
Run Code Online (Sandbox Code Playgroud)
我将继续玩,udev
我还提交了一个错误,因为这对于未插入的分区没有任何意义,就像安装时插入的 USB/媒体卡一样。这udevadm trigger
也不是一个廉价的操作(至少在 12.04 上)暂时冻结所有内容。
所以,总而言之,我有一个可行的解决方案(感谢所有提供帮助的人),我可能会或可能不会实施(尚不确定);但我会继续寻找其他东西。谢谢
尝试这个建议:http://www.worldofnubcraft.com/969/hide-your-disks-or-partitions-from-nautilus/
我相当确定它与 udev 信号和处理有关。