插入交流適配器或拔下電池時的系統事件?
Ubuntu 15.04(或者可能只是一般的 Linux)是否有任何類型的可測量事件,當筆記型電腦的交流電源斷開並且設備切換到電池電源時會觸發?
我想編寫一個小程序來等待該事件,然後對螢幕亮度等進行一些調整。我知道有一些解決方案,但我正在嘗試同時自學。我是 Linux 的新手,我的大部分編碼都是
.NET
在 Windows 系統上完成的。我在 中看到了電池狀態資訊
/sys/class/power_supply/
,但我假設必須有更好的方法來確定適配器是否已拔出,而不是僅僅在某種計時器上掃描文件的更改。我試過搜尋Google和這些論壇,但還沒有弄清楚如何正確地表達搜尋。
您正在尋找
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
它為您提供有關 AC 和 BATTERY 系統的資訊。像這樣:
P:/devices/platform/sunxi-i2c.0/i2c-0/0-0034/axp20-supplyer.28/power_supply/battery E:DEVPATH=/devices/platform/sunxi-i2c.0/i2c-0/0-0034/axp20-supplyer.28/power_supply/battery 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:POWER_SUPPLY_TEMP=300 E: POWER_SUPPLY_VOLTAGE_MAX_DESIGN=4200000 E: POWER_SUPPLY_VOLTAGE_MIN_DESIGN=3300 E: POWER_SUPPLY_VOLTAGE_NOW=0 E: SUBSYSTEM=power_supply
這些
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,但我發現這不可靠。看看你的腳本是否在你的 AC 被插入時被觸發。
優化您的 udev 規則及其觸發的腳本。
udev 還有更多內容,請深入了解!