-2

根据信息,内部的任何文件

/etc/NetworkManager/dispatcher.d/

假设从

NetworkManager

要找出这些命令可能是什么,我们只需
查看其中一个脚本的源代码

/etc/NetworkManager/dispatcher.d/

所以让我们这样做。

cd     /etc/NetworkManager/dispatcher.d/
ls
00-netreport  05-netfs  10-dhclient
vi 00*

这里没有什么。

gedit 05*

出色的。

#!/bin/sh

export LC_ALL=C

if [ "$2" = "down" ]; then
    /sbin/ip route ls | grep -q ^default || {
        [ -f /var/lock/subsys/netfs ] && /etc/rc.d/init.d/netfs stop || :
    } && { :; }
fi

if [ "$2" = "up" ]; then
    /sbin/ip -o route show dev "$1" | grep -q '^default' && {
        /sbin/chkconfig netfs && /etc/rc.d/init.d/netfs start || :
    } || { :; }
fi

让我们复制它并创建一个名为

 test

让我们只使用我们需要的“up”。

file: test


#!/bin/sh

export LC_ALL=C

if [ "$2" = "up" ]; then
    /sbin/ip -o route show dev "$1" | grep -q '^default' && {
        /sbin/chkconfig netfs && /etc/rc.d/init.d/netfs start || :
    } || { :; }
fi

让我们对其进行修改,以便它可以“可视化”执行一些我们可以对其进行测试的东西。

#!/bin/sh

export LC_ALL=C

if [ "$2" = "up" ]; then
    gedit test.txt
fi

结果:

Not Working.

让我们以某种方式对其进行修改,以便它可以理解。

#!/bin/sh

export LC_ALL=C

if [ "$2" = "up" ]; then
    /sbin/ip -o route show dev "$1" | grep -q '^default' && {
        gedit test.txt || :
    } || { :; }
fi

重启..

结果:

nothing

解决了:

这是所选答案中可能的最小代码:(
我能够创建)

case "$2" in
    up)
touch /root/Desktop/ooo
    ;;
esac

我需要让它更小,因为我经常重新格式化我的机器,然后运行一个脚本来自动设置这些东西。所以将来我只会跑

cat >> /etc/NetworkManager/dispatcher.d/test << EOF
case "\$2" in
    up)
touch /root/Desktop/ooo
    ;;
esac
EOF
chmod +x /etc/NetworkManager/dispatcher.d/test

换句话说, $ 必须用 " cat>>" 东西转义。

4

1 回答 1

11

这是一个在 NetworkManager 连接时运行的脚本的工作示例:

#!/bin/sh -e
# Script to dispatch NetworkManager events
#
# Runs ifupdown scripts when NetworkManager fiddles with interfaces.
# See NetworkManager(8) for further documentation of the dispatcher events.

if [ -z "$1" ]; then
    echo "$0: called with no interface" 1>&2
    exit 1;
fi

# Run the right scripts
case "$2" in
    up|vpn-up)
    logger -s "HELLO THIS IS YOUR SCRIPT"
    cd /home && touch "HELLOFILE.txt"
    ;;
    down|vpn-down)
    ;;
    hostname|dhcp4-change|dhcp6-change)
    # Do nothing
    ;;
    *)
    echo "$0: called with unknown action \`$2'" 1>&2
    exit 1
    ;;
esac

将脚本命名为您喜欢的任何名称,使其可执行,然后将其放入/etc/NetworkManager/dispatcher.d/目录中。

您可以通过打开终端并运行来验证这是否有效:

sudo tail -f /var/log/syslog//打印系统日志直到取消

然后打开另一个终端,运行:

sudo service network-manager restart//重启网络管理器

您应该会在日志中看到“HELLO THIS IS YOUR SCRIPT”字样以及许多其他信息。并且文件应该被添加到/home目录中。

我不确定为什么您打开 gedit 的具体情况不起作用,但这是在网络管理器启动时运行脚本的方式。我的猜测是,问题的其余部分与脚本以 root 身份运行但您希望 gedit 在特定用户(您)的桌面环境中打开的事实有关。祝你好运!

于 2013-05-31T02:27:35.587 回答