Systemd
系統掛起 - 看不到 dbus upower 信號
當系統從掛起狀態恢復時,我想通過 dbus 獲得通知。在這些現有問題之後:
但是,當我暫停或恢復時,以上鍊接中的範例都沒有觸發。 dbus-monitor也看不到任何東西:
dbus-monitor --system "type='signal',interface='org.freedesktop.UPower'"
我還嘗試使用此程式碼手動觸發信號(更容易):
#taken from /usr/lib/systemd/system/upower.service dbus-send --system --type=signal --dest=org.freedesktop.UPower \ /org/freedesktop/UPower org.freedesktop.UPower.Resuming
結果相同。我一定錯過了一些非常明顯的東西。Fedora 20 x86_64。(dbus 已安裝、執行和工作正常 AFAICT)Fedora 20 使用logind,但我在那裡看不到任何“恢復”信號。掛起和恢復很難用 VirtualBox 測試,所以我無法與其他作業系統進行比較。
有趣的是,qdbus 看到了很多服務(org.gnome.SessionManager 等),但與電源無關,但話又說回來,它也沒有看到 login1..
qdbus | grep -i power | wc -l 0
根據upower 使用的devkit郵件列表上對同一問題的回答,較新的版本不再發出該信號,因為這是由 systemd 處理的。
systemd-land 中的替換是logind,它有一個名為PrepareForSleep的信號: “PrepareForShutdown() 和 PrepareForSleep() 信號在系統停機之前(參數為 True)和之後(參數為 False)發送重新啟動/關機,分別暫停/休眠。”
這是一個簡單的 python 腳本,用於觀察掛起/恢復事件:
#!/usr/bin/env python from datetime import datetime import dbus import gobject from dbus.mainloop.glib import DBusGMainLoop def handle_sleep(*args): print "%s PrepareForSleep%s" % (datetime.now().ctime(), args) DBusGMainLoop(set_as_default=True) # integrate into gobject main loop bus = dbus.SystemBus() # connect to system wide dbus bus.add_signal_receiver( # define the signal to listen to handle_sleep, # callback function 'PrepareForSleep', # signal name 'org.freedesktop.login1.Manager', # interface 'org.freedesktop.login1' # bus name ) loop = gobject.MainLoop() loop.run()