Shell-Script

插入交流適配器或拔下電池時的系統事件?

  • February 17, 2019

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 還有更多內容,請深入了解!

引用自:https://unix.stackexchange.com/questions/227918