Ubuntu 15.04(或者可能只是一般的 Linux)是否有任何类型的可测量事件,当笔记本电脑的交流电源断开并且设备切换到电池电源时会触发?
我想编写一个小程序来等待该事件,然后对屏幕亮度等进行一些调整。我知道有一些解决方案,但我同时也在尝试自学。我是 Linux 新手,大部分编码都是在.NET
Windows 系统上完成的。
我已经在 中看到了电池状态信息/sys/class/power_supply/
,但我假设必须有更好的方法来确定适配器是否已拔出,而不仅仅是在某种计时器上扫描文件的更改。
我尝试过搜索谷歌和这些论坛,但还没有弄清楚如何正确地表达搜索。
答案1
您正在寻找udev
,它可以检测各种系统状态的变化,包括插入(或拔出)设备。您可以编写 udev 脚本,以便在连接或移除设备时执行某些操作。
坦率地说,Udev 相当复杂,您需要做一些非常基本的测试,以确保您正在检测您正在寻找的内容。
基本步骤如下:
监控您的系统:
sudo udevadm monitor
这告诉你 udev“看到”了什么。
运行此命令后,插上电源,看看 udevadm 会告诉您什么。再次拔掉插头:看看 udevadm 告诉你什么。这可能还没有任何意义,但没关系;您现在知道如何监视 udev,这很有用。
停止该进程,然后执行以下操作:
sudo udevadm info --path=/sys/class/power_supply/ac
或者
sudo udevadm info --path=/sys/class/power_supply/battery
它为您提供有关交流电和电池系统的信息。像这样:
P:/devices/platform/sunxi-i2c.0/i2c-0/0-0034/axp20-supplyer.28/power_supply/电池 E:DEVPATH=/devices/platform/sunxi-i2c.0/i2c-0/0-0034/axp20-supplyer.28/power_supply/电池 E:电源容量=100 E: POWER_SUPPLY_CURRENT_NOW=0 E: POWER_SUPPLY_ENERGY_FULL_DESIGN=3200 E:POWER_SUPPLY_HEALTH=良好 E: POWER_SUPPLY_MODEL_NAME=电池 E:POWER_SUPPLY_NAME=电池 E: POWER_SUPPLY_ONLINE=0 E: POWER_SUPPLY_PRESENT=0 E: POWER_SUPPLY_STATUS=满 E:POWER_SUPPLY_TECHNOLOGY=锂离子电池 E:电源温度=300 E:电源电压_最大设计=4200000 E:电源电压_最小设计=3300 E: POWER_SUPPLY_VOLTAGE_NOW=0 E:子系统=电源
这些E:
行是可用于编写 udev 规则的环境属性。
编写一个基本的 udev 规则(我通常只编写一个规则,以便在事件发生时在我的驱动器上的某个位置创建一个日志条目;这样,我知道我正在触发某些东西。然后我返回并使脚本变得有用。)
例如:
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_STATUS}=="Charging", RUN+="/path/to/some/script.sh"
或者您可能会使用POWER_SUPPLY_PRESENT=1
...您必须根据您在计算机上看到的值进行实验。
将此 udev 脚本放入/etc/udev/rules.d
(类似于常规的名称80.power.rules
)并重新启动计算机。从技术上讲,你可以重新启动 udev,但我发现这不可靠。
查看插入交流电时是否会触发您的脚本。
优化您的 udev 规则及其触发的脚本。
udev 还有更多内容,所以请深入研究!