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

出于某种原因,当我插入或拔出电源时,笔记本电脑的屏幕亮度不会更新。 我已经针对这个问题看了很多解决方案,但它们似乎都没有奏效。 所以,我没有绝望和放弃,而是决定尝试将其变成一种学习体验,看看我是否能够编写一个能够帮助我的脚本。

当然,我试着通过互联网帮助解决这个问题,但是我对于编写脚本和Ubuntu一般都是新手,所以我没有走得太远。

我能弄明白的是我能找到电池的状态

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

取决于AC适配器是否插入。我不知道这是否有用,但它有点酷,而且之前我不知道如何使用grep ,所以到底是什么,学习很有趣。

无论如何,有没有一个干净的方式来做到这一点? 通过“干净的方式”,我只是指一种具有有限的bash脚本体验的方式可以理解的方式。

我发现一个类似的问题有一个很好的答案是这个问题 ,其中说明如下:

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

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

打开或关闭电源时,可以使用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 

编辑: [由KasiyA建议]

cron job更适合以固定间隔运行脚本而不是使用无限循环。

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

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

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

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