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

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

我正在运行 Kubuntu 12.10 64 位。我试图在断开网络连接时执行一个 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 的答案时遇到了一些问题(旧的编辑和评论混在一起了),现在这些问题已经解决了。运行zenitysu解决DISPLAY=:0了我的问题。

答案1

如果您正在使用网络管理器(而不是命令行/etc/network/interfaces文件),那么您应该使用网络管理器调度程序脚本。

只需将脚本放入/etc/NetworkManager/dispatcher.d/目录中,方法与此类似if-down.d。使用网络管理器调度程序脚本编写脚本相当容易,我建议阅读此(基本)示例,该示例发布在建筑维基

#!/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

答案2

我尝试了一下(在 10.04 上),但遇到了同样的问题。看来脚本不知道在哪个显示器上显示对话框。

尝试用以下方法替换您的线路:

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

(如果您有多个显示器,则可能需要更精巧的东西。)

答案3

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

我的系统运行的是 kubuntu 12.04,所以这段代码可能在你的系统上也能用。它也应该能在 gnome 2.x 上用,只是自动启动脚本的位置不同。

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

我所做的是将一个小的(可执行)脚本添加到 ~/.kde/Autostart 目录,该脚本在每次 KDE 启动时运行我的主脚本(这负责使用显示器和键盘):

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

主要脚本,离线警报,使用 ping 测试我是否处于离线状态,并重试几次以避免误报,然后使用 yad(与 zenity 相同,但功能更强大!)生成弹出窗口并播放声音。在测试在线状态变化期间,它会休眠,这样就不会占用太多资源。

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

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

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

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

该脚本设置为使用通知,但代码被注释掉了,因为通知消失得太快,似乎带来的麻烦多于帮助。

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

相关内容