当网络环境发生变化时,我希望很棒的 wm 以不同的配置运行。所以我在network manager dispatcher里写了一个脚本,这样当网络环境发生变化时,脚本就会被执行;
#!/bin/bash
# Restart awesome through awesome-client
USER=dreamingo
awesome_restart(){
/bin/su $USER -c "echo 'local awful = require (\"awful\"); return awful.util.restart()' | awesome-client"
}
#To check the cable insert or not
wire_insert_state=$(cat /sys/class/net/eth0/carrier)
#Check which config the current awesome taking(wired or wireless)
current_config=$(cat ~/.config/awesome/flag)
# if [[ $wire_insert_state = 1 ]] && [[ $current_config == "wireless" ]];then
if [[ $wire_insert_state = 1 ]];then
cp /home/dreamingo/.config/awesome/rc.lua.wire /home/dreamingo/.config/awesome/rc.lua
echo wired > ~/.config/awesome/flag
awesome_restart
# elif [[ $wire_insert_state = 0 ]] && [[ $current_config == "wired" ]];then
elif [[ $wire_insert_state = 0 ]];then
cp /home/dreamingo/.config/awesome/rc.lua.wireless /home/dreamingo/.config/awesome/rc.lua
echo wireless > ~/.config/awesome/flag
awesome_restart
fi
但是,当环境发生变化时,这个脚本会运行,但是很棒的 wm 不会重新启动。
我认为这是脚本由 root 执行的原因,因此我使用以下命令:
/bin/su $USER -c "echo 'local awful = require (\"awful\"); return awful.util.restart()' | awesome-client"
当我 su 到 root 时,此命令将起作用(重新启动很棒的 wm);但是,当我使用:
sudo ./02check_wireless #02check_wireless was the name of the script
运行脚本,脚本重启wm失败;但是当我以当前用户(dreamingo)的身份运行它时,它可以工作;
此外,无论上述结果(成功与否),脚本都会输出:
Error org.freedesktop.DBus.Error.ServiceUnknown: The name org.naquadah.awesome.awful was not provided by any .service files
我认为失败的人也尝试重新启动真棒,但有些东西覆盖或阻止它....