根据信息,
中的任何文件/etc/NetworkManager/dispatcher.d/
假设从
接收2个可能的命令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>>
”事件进行转义。
答案 0 :(得分:3)
以下是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
//重新启动NetworkManager
你应该会在日志中看到“你好这是你的脚本”这个词,还有很多其他信息。该文件应添加到/home
目录。
我不确定为什么打开gedit的具体情况不起作用,但这是在网络管理器启动时运行脚本的方法。我的猜测是,问题的其余部分与脚本以root身份运行但您希望gedit在特定用户(您)的桌面环境中打开这一事实有关。祝你好运!