断开WiFi连接后,如何运行简单的Zenity脚本?

我正在运行Kubuntu 12.10 64bit。 我正在尝试在我断开网络连接时执行bash脚本。 我在/etc/network/if-down.d/文件夹中创建了一个名为test的文件,它有一行:

zenity --info --text="network down!"

我可以毫无问题地执行这个脚本; 在我的终端输入/etc/network/if-down.d/test会弹出一个消息框,说“网络连接!”。 当我通过网络管理器断开我的wifi网络时,没有任何反应。 拔掉我的wifi usb加密狗不会导致消息框出现。 我唯一的猜测是因为/etc/network/if-down.d/中的脚本没有被执行。 添加#!/bin/bash作为第一行也不起作用。


编辑:2013-01-02

我有一些问题使用gertvdijk的答案(旧的编辑和评论混淆)现在整理出来。 用suDISPLAY=:0运行zenity解决了我的问题。

如果您使用的是网络管理器(与命令行/etc/network/interfaces文件相对),则应使用网络管理器调度程序脚本。

只需将脚本放在/etc/NetworkManager/dispatcher.d/目录中,类似于if-down.d方法。 使用Network Manager调度程序脚本编写脚本非常简单,我建议阅读基于Arch Wiki上发布的这个(基本)示例:

 #!/bin/sh INTERFACE=$1 # The interface which is brought up or down STATUS=$2 # The new state of the interface USERNAME=gert # ENTER YOUR USERNAME HERE case "$STATUS" in 'up') # $INTERFACE is up # you could do something here... ;; 'down') # $INTERFACE is down # Check for other active interfaces and only act on all down if [ ! `nm-tool|grep State|cut -f2 -d' '` = "connected" ]; then /bin/su -l ${USERNAME} -c 'DISPLAY=:0 /usr/bin/zenity --info --text="all network interfaces down"' fi ;; esac 

要在特定网络上执行操作,请参阅此答案 。

并确保重新启动网络管理器以获取此新脚本。

 sudo service network-manager restart 

我尝试了这个(在10.04),并有同样的问题。 看起来脚本不知道显示对话框的显示。

尝试更换你的行:

 DISPLAY=0:0 zenity --info --text="network down!" 

(如果你有几个显示器,你可能需要更精细的东西。)

其他答案很棒 – 可能甚至比这个更好,但是,像往常一样,还有另一种方法 – 这次不需要系统实用程序或提升权限(sudo)。

我的系统运行kubuntu 12.04,因此该代码可能适用于您的系统。 它也应该适用于gnome 2.x,除了autostart脚本在不同的地方。

我有一个类似的问题,我想知道我的电脑什么时候离线(因为我的笔记本似乎偶尔通过禁用wifi来做这件事,我经常没有注意到任务栏中的小红色。)

我做的是在〜/ .kde / Autostart目录中添加一个小的(可执行的)脚本,每次KDE启动时运行我的主脚本(这需要使用显示器和键盘):

 #!/bin/bash if [ -x "$HOME/bin/offline_alert" ] ; then offline_alert & fi 

主要脚本offline_alert测试我是否离线使用ping并进行一些重试以避免误报,然后使用yad生成弹出窗口(与zenity相同,只是增强了!)并播放声音。 在测试在线状态变化之间,它会hibernate,因此不会使用太多资源。

如果从命令行等手动运行它,它会检查它是否已在运行,并为您提供结束它的选项。

测试离线的代码在“离线”function中,因此可以轻松修改它而不会影响脚本的其余部分。

它使用的图像,图标和声音都是硬编码的,因此您必须替换自己的图像,图标和声音。 我在网上找到了一个很酷的wifi离线图标。

它会创建一个您可能想要也可能不想要的日志文件。

该脚本设置为使用通知,但代码已注释掉,因为通知消失得太快,似乎比帮助更令人讨厌。

这只是另一种方法,也许有人会发现代码有用。