防止Nautilus显示安装在bash脚本中的分区


8

在我的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上出现)来临时冻结所有内容。

因此,总而言之,我有一个可行的解决方案(感谢所有提供帮助的人),我可能会或可能不会实施(不确定)。但我会继续寻找其他东西。谢谢


对于其他回答,您可以添加您的Ubuntu版本吗?例如9.04、10.10、12.04。从一个到另一个有相当大的演变。
保罗

好点子。我将编辑问题以添加该问题。
bcbc 2012年

如果您挂载-i,它会阻止nautilus弹出吗?对于我来说,它可以阻止gnome-shell弹出,而它的底部是屏幕底部的小对话框。使用gnome-shell在12.04 Ubuntu上对此进行了测试。
加里

这对我来说没有任何区别。
bcbc 2012年

<p> _如果我从终端执行完全相同的命令,Nautilus不会显示_-您如何启动脚本?</ p> <p> 而且我知道脚本中没有显示其他坐骑 -这些坐骑之间有什么区别?</ p>
zuba 2012年

Answers:


3

尝试以下建议:http : //www.worldofnubcraft.com/969/hide-your-disks-or-partitions-from-nautilus/

我相当确定它与udev信号和处理有关。


3
您可以在此处简洁地发布链接的内容吗?在AU社区中,仅带有链接的答案不是很受欢迎。
Mahesh '04

这可行。目前,没有太多细节可以接受答案。我已经手动确认它可以创建文件并调用udevadm trigger。只想确认它在脚本中是否有效。如果您在此处未添加更多内容,我将在问题中发布详细信息。
bcbc 2012年

我不想重新概述链接已经清楚列出的内容。基本上,它需要在/etc/udev/rules.d/中添加一条规则,该规则告诉udev不要处理特定的设备-每个设备将获得自己的行,并指定:KERNEL ==“ sda1”,ENV {UDISKS_PRESENTATION_HIDE} =” 1 ”。这样做不会修改任何系统或内核行为。它只是告诉UDEV隐藏磁盘的显示。Nautilus正是依靠udev规则处理来实现此行为。
papashou 2012年

1

尝试包装脚本:

#!/bin/bash
#

# disable nautilus automount
#
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  false

# put your script here  
#
...

# enable back nautilus automount
# 
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  true

未测试,因为我在10.04

更新:

#!/bin/bash
#

# disable nautilus automount
#
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  false

# put CALLING your script here to survive its crashes
#
/bin/bash -c "/whenever/it/is/placed/script.sh"

# enable back nautilus automount
# 
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  true

感谢您的建议...我不想修改设置,因为我不确定它是否会立即生效,每个发行版都需要使用不同的代码,这是不雅的,并且如果脚本被中止,则会使用户离开处于不希望的状态-我也不认为这是必要的。我所需要的是通知鹦鹉螺装载的机制,以及如何绕过它。例如udev?dbus?诸如此类的事情。
bcbc 2012年

+ 我不想修改设置,因为我不确定它是否会立即生效 -这是要检查的问题(很容易)。+ 每次发布都需要不同的代码 - 可能需要或可能不需要 50 | 50,就好像我在街上遇到测力计))+ 不够优雅 -与其他选择相比?
zuba 2012年

+ 如果脚本被中止,则会使用户处于不希望的状态 -中止时,许多软件包(例如,能力)都会这样做。有避免这种副作用的方法。例如,您可以向cron收费,如果脚本正在运行,则每1分钟检查一次,如果不运行,则将设置改回来。或者,您可以从另一个控制设置的脚本中运行脚本。
zuba 2012年

我的观点是,不需要更改特定于桌面的设置。我还应该补充一点,该脚本可以在ubuntu / xubuntu / kubuntu / lubuntu等上运行,因此它增加了高度的复杂性和风险。
bcbc 2012年

用udisk将分区列入黑名单的另一种方法(请参见纸质链接)需要sudo,并且不能跨机器移植,因此这将更加复杂且具有风险。
Egil 2012年

1

您可以通过添加新的udev规则来防止闪存驱动器自动挂载。在该规则中,您可以按供应商,序列号和其他属性指定闪存驱动器。请参阅以下内容的输出中的ATTRS {}行:

udevadm info -a --name=sdb1

您应该将该脚本放入具有特殊文件名的/etc/udev/rules.d文件夹中,例如 81-usb-wubi-move.rules

该规则可能看起来像

ACTION=="add", KERNEL=="sdb?", SUBSYSTEMS=="usb", ATTRS{serial}=="001CC07CEE5EFB91C91B235C", ENV{UDISKS_PRESENTATION_HIDE}="1", ENV{UDISKS_PRESENTATION_NOPOLICY}="1"

也可以看看:


看来这应该是潜在的解决方法-我需要时间进行审查和实验,直到今天晚些时候才有机会(届时将提供反馈)。理想情况下,答案将解释为什么会发生这种情况(与mount从终端运行相比),但是如果我有一个好的解决方法,我也会接受。
bcbc 2012年

这是一个
RobotHumans 2012年

0

未经测试....只是预感。

将文件系统挂载到Nautilus用户无法访问的树中,例如,在/ root或/ home / someoneelse的子目录中,或在其他人拥有和保护的/ tmp子目录中

请记住,将相同的硬件设备安装在两个安装点并从两个安装点进行修改可能是个坏主意。

在(12.04beta)Ubuntu-> System Settings-> Details-> Removable Media中可以进行一些人为配置。可以将某些选项设置为“不执行任何操作”,这样可以避免弹出窗口。

https://help.ubuntu.com/community/Mount/USB上的文档可能对9.10有用,但不适用于12.04。他们提到的gconf-editor密钥不再使用。


它安装在/ tmp下的目录中(并且无其他地方)。
bcbc 2012年

但是登录的用户仍然可以访问/ tmp。建议使用登录用户无法访问的目录。
保罗

chmod 700在目录上使用了...看起来很有希望,然后弹出了一个消息窗口(没有窗口标题):“无法打开10 GB文件系统的文件夹”,“没有应用程序注册为处理此文件”
bcbc

迷人。它肯定会努力。也许以后我有时间玩这个。
保罗

0

尝试mount使用-n-i标志。


我已经尝试过-几乎可以通过所有安装选项。触发发生在其他地方。
bcbc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.