0

当网络环境发生变化时,我希望很棒的 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

我认为失败的人也尝试重新启动真棒,但有些东西覆盖或阻止它....

4

1 回答 1

0

当我以 root 运行它时,这个变体对我来说很好用 3.5.5

#!/bin/bash
# Restart awesome through awesome-client

USER=my_username_here

awesome_restart(){
    /bin/su $USER -c "echo 'awesome.restart()' | awesome-client"
}

awesome_restart
于 2014-05-19T00:42:37.003 回答