在我的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
我对了解挂载信号通知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
}
这样可以达到预期的效果,但是感觉就像是大锤方法。我相信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
我将继续玩游戏,udev
并且还提交了一个bug,因为这对于未插入的分区在挂载时像插入的USB /介质卡一样没有任何意义。同样,这udevadm trigger
也不是一个便宜的操作(至少在12.04上出现)来临时冻结所有内容。
因此,总而言之,我有一个可行的解决方案(感谢所有提供帮助的人),我可能会或可能不会实施(不确定)。但我会继续寻找其他东西。谢谢