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

Jas*_*per 8 command-line bash scripts

出于某种原因,当我插入或拔出电源时,我的笔记本电脑的屏幕亮度没有更新。我已经为这个问题研究了很多解决方案,但似乎没有一个能很好地工作。因此,与其绝望和放弃,我决定尝试将其转变为一种学习体验,看看我是否能写出适合我的脚本。

当然,我尝试在互联网的帮助下自己解决这个问题,但我对 bash 脚本和 Ubuntu 总体而言还是很陌生,所以我没有走多远。

我能弄清楚的是,我能找到电池的状态

$ upower -i /org/freedesktop/UPower/devices/battery_BAT1 | grep -E "state"
state:     charging/discharging
Run Code Online (Sandbox Code Playgroud)

就看有没有插上AC适配器了。不知道有没有用,不过挺爽的,之前不知道怎么用grep,怎么回事,学习挺好玩的。

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

我发现有一个很好的答案的类似问题是this one,它说明了以下内容:

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

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

sou*_* c. 5

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

在终端中尝试以下操作。

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

$ on_ac_power
$ echo $?
1              ## Laptop on battery (not on ac power)
Run Code Online (Sandbox Code Playgroud)

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

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

$ on_ac_power
$ echo $?
1              ## Laptop on battery (not on ac power)
Run Code Online (Sandbox Code Playgroud)

编辑:

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

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

#!/bin/bash
if on_ac_power; then 
    do_something
else
    do_something_else
fi
Run Code Online (Sandbox Code Playgroud)

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

* * * * * /path/to/myscript.sh 
Run Code Online (Sandbox Code Playgroud)

  • 更好的方法是使用 udev 规则,如 https://askubuntu.com/questions/613741/ubuntu-15-04-pm-utils-do-not-look-into-etc-pm-power-d-anymore-什么,而不是。 (2认同)

归档时间:

查看次数:

5249 次

最近记录:

5 年,6 月 前