根据信息,里面的任何文件
/etc/NetworkManager/dispatcher.d/
Run Code Online (Sandbox Code Playgroud)
假设从以下位置接收 2 个可能的命令
NetworkManager
Run Code Online (Sandbox Code Playgroud)
要找出这些命令可能是什么,我们只需
查看其中一个脚本的源代码
/etc/NetworkManager/dispatcher.d/
Run Code Online (Sandbox Code Playgroud)
所以让我们这样做。
cd /etc/NetworkManager/dispatcher.d/
ls
00-netreport 05-netfs 10-dhclient
vi 00*
Run Code Online (Sandbox Code Playgroud)
这里没有什么。
gedit 05*
Run Code Online (Sandbox Code Playgroud)
优秀。
#!/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
Run Code Online (Sandbox Code Playgroud)
让我们复制它并创建一个名为
test
Run Code Online (Sandbox Code Playgroud)
让我们只使用我们需要的“向上”。
file: test
Run Code Online (Sandbox Code Playgroud)
#!/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
Run Code Online (Sandbox Code Playgroud)
让我们修改它,让它可以执行一些“可视化”的东西,我们可以用它来测试它。
#!/bin/sh
export LC_ALL=C
if [ "$2" = "up" ]; then
gedit test.txt
fi
Run Code Online (Sandbox Code Playgroud)
结果:
Not Working.
Run Code Online (Sandbox Code Playgroud)
让我们以某种方式修改它,以便它可以理解。
#!/bin/sh
export LC_ALL=C
if [ "$2" = "up" ]; then
/sbin/ip -o route show dev "$1" | grep -q '^default' && {
gedit test.txt || :
} || { :; }
fi
Run Code Online (Sandbox Code Playgroud)
重新启动..
结果:
nothing
Run Code Online (Sandbox Code Playgroud)
解决了:
这是所选答案中可能的最小代码:(
我能够创建)
case "$2" in
up)
touch /root/Desktop/ooo
;;
esac
Run Code Online (Sandbox Code Playgroud)
我需要让它更小,因为我经常重新格式化我的机器,然后运行一个脚本来自动设置这些东西。所以将来我只会跑
cat >> /etc/NetworkManager/dispatcher.d/test << EOF
case "\$2" in
up)
touch /root/Desktop/ooo
;;
esac
EOF
chmod +x /etc/NetworkManager/dispatcher.d/test
Run Code Online (Sandbox Code Playgroud)
换句话说, $ 必须用 " cat>>"来转义。
Don*_*rdy 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
Run Code Online (Sandbox Code Playgroud)
将脚本命名为您喜欢的任何名称,使其可执行,然后将其放入/etc/NetworkManager/dispatcher.d/目录中。
您可以通过打开终端并运行来验证这是否有效:
sudo tail -f /var/log/syslog //打印系统日志直到取消
然后打开另一个终端,并运行:
sudo service network-manager restart //重启网络管理器
您应该会在日志中看到“你好,这是您的脚本”字样,以及许多其他信息。并且该文件应该添加到/home目录中。
我不确定为什么您打开 gedit 的具体情况不起作用,但这是在网络管理器启动时运行脚本的方式。我的猜测是,其余的问题与脚本以 root 身份运行但您希望 gedit 在特定用户(您)的桌面环境中打开这一事实有关。祝你好运!