如何在插入或拔出电源时运行脚本?

如何在插入或拔出电源时运行脚本?

由于某种原因,当我插入或拔出电源时,我的笔记本电脑的屏幕亮度不会更新。我研究了不少解决这个问题的方法,但似乎都不太管用。所以,我没有绝望和放弃,而是决定尝试把这变成一次学习经历,看看我能否编写一个脚本来帮我解决这个问题。

我尝试自己解决这个问题,当然也借助了互联网的一些帮助,但是我对 bash 脚本和 Ubuntu 还很陌生,所以并没有取得很大进展。

我能想到的是,我可以查找电池状态

$ upower -i /org/freedesktop/UPower/devices/battery_BAT1 | grep -E "state"
state:     charging/discharging

取决于交流适配器是否插入。我不知道这是否有用,但它很酷,我grep以前不知道如何使用,所以管他呢,学习很有趣。

无论如何,有没有一种比较干净的方法来做到这一点?我说的“干净的方法”只是指那些具有有限 bash 脚本经验的人可以理解的方法。

我发现一个类似的问题,有一个好的答案是这个,内容如下:

当您插入/拔出交流适配器时,脚本将/etc/pm/power.d被调用并带有一个参数:“true”(如果您使用电池运行)或“false”(如果您使用电源适配器运行)。

问题是我不知道如何在脚本中访问该参数。所以,我想这可以归结为一个非常简单的问题,但无论如何我还是想发布这个问题,以防人们有更好的解决方案。

答案1

您可以使用on_ac_power在电源打开或关闭时运行脚本。

在终端中尝试以下操作。

$ on_ac_power
$ echo $?
0              ## Laptop on ac power

$ on_ac_power
$ echo $?
1              ## Laptop on battery (not on ac power)

基于此,你可以将脚本制作为,

#!/bin/bash
while true
do
    if on_ac_power; then 
        do_something               ## Laptop on power
    else
        do_something_else          ## Laptop on battery
    fi
    sleep 10                       ## wait 10 sec before repeating
done

编辑:

cron job定期运行脚本而不是使用无限循环会更好。

将脚本另存为myscript.sh并将以下内容放入其中,

#!/bin/bash
if on_ac_power; then 
    do_something
else
    do_something_else
fi

使脚本可从终端执行chmod +x /path/to/myscript.sh。打开您的个人crontab目录EDITOR=gedit crontab -e并在其中添加以下行以每分钟运行一次脚本。

* * * * * /path/to/myscript.sh 

相关内容