如果我的筆記型電腦變得太熱,我需要執行特定的命令(例如,向 Firefox 或 Virtualbox 發送停止訊號,以防止我的筆記型電腦劇烈關閉並損壞我的硬碟)。
我可以輕鬆編寫一個無限循環的程序,同時定期檢查溫度。這問題的答案使用了這個方法。
但是,我想避免運行我自己的守護進程,而是將我的程式附加到現有的守護程式。例如,我可以在我的系統日誌中看到:
5 月 5 日 02:52:27 myhostname 核心:[ 9141.022262] intel ips 0000:00:1f.6:超出 MCP 限制:平均溫度 9276,限制 9000
所以我的機器中已經有程式碼檢查溫度,它會根據條件觸發一些操作(例如,當溫度超過 9000 時記錄警告訊息)。另一個例子是風扇在相同溫度的基礎上加速。
如何將我的程式附加到我的機器中的現有代碼?風扇驅動程式速度變化和核心溫度警告訊息是否由相同程式碼觸發?我怎麼才能找到這個?
答案1
您將必須運行某種守護程序來監視此類事情。硬體感測器只是惰性資料來源,通常無法自行執行操作。
如果您只是想出去編寫自訂程式碼,您可以考慮安裝collectd-sensors
包裹(您的發行版可能會稱之為其他名稱)它將保留溫度歷史記錄。配置追蹤溫度數據後,collectd
您應該能夠設定收集通知對於這樣的活動。
答案2
如何將我的程式附加到此程式碼?
該特定輸出來自內核,因此您可能能夠為此編寫一個核心模組,或者如果該資訊不可全域訪問,則可以對現有模組進行修補。
您已經執行的 WRT 守護進程,您可以使用cron
並每隔一分鐘左右檢查一次。
如果你想要比分鐘更細的粒度,你需要編寫自己的循環,或者找到一個已經可以做到這一點的工具——一些 GUI 系統監視器可能允許你配置可以運行任意進程的警報(我gkrellm
注意到不是,而且僅通過谷歌搜索很難判斷conky
)。
答案3
似乎 DBUS 或 ACPI 事件是鎖定這些「事件」並觸發命令來執行您想要的操作的地方。我展示了一種執行此操作的方法dbus-monitor
,可以使用該方法來“捕獲”這些事件,然後運行腳本。
看看我對 U&L 問答的回答,標題為:libnotify 可以用來執行腳本嗎?
答案4
這要求您願意讓 Firefox/Virtualbox 的觸發器與觸發日誌訊息的溫度相同,並且也願意執行 syslog-ng。
syslog-ng 可以設定為執行從特定程式或具有特定內容傳送到日誌的訊息觸發的任意程式碼。
在 syslog-ng.conf 中,您將會新增一個新目標:
destination d_high_temp { program("/path/to/OPs/temperature_script"); };
還有一個新的過濾器
filter f_high_temp { match("MCP limit exceeded" value("MESSAGE")); };
最後
log { source(src); filter(f_high_temp); destination(d_high_temp); };
您將不再運行更多的守護程序,但仍然可以關閉您喜歡的任何程序。