
나는 다음을 통해 GUI 세션에 대한 억제제를 생성하는 것이 가능하다는 것을 배웠습니다.dbus. 그러나 억제제를 추가하려고 하면 즉시 제거됩니다. 여기에 예가 있습니다.
이 명령을 통해 억제제를 추가하기 위해 호출합니다(로그아웃이 발생하지 않도록 해야 함).
qdbus org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.Inhibit "x-terminal-emulator" $(xdotool getactivewindow) "TEST REASON" 1
의 출력에서는 dbus-monitor
추가되었지만 즉시 제거되었음을 나타냅니다.
$ dbus-monitor --profile | grep -i inhibitor
sig 1474613346.596581 156 :1.23 <none> /org/gnome/SessionManager org.gnome.SessionManager InhibitorAdded
sig 1474613346.603137 159 :1.23 <none> /org/gnome/SessionManager org.gnome.SessionManager InhibitorRemoved
이 문제를 어떻게 해결할 수 있나요?
사용 중인 시스템: Ubuntu 16.04, Unity
답변1
억제제는 dbus 클라이언트 연결 해제 시 자동으로 제거되므로 즉시 제거됩니다.
따라서 억제가 활성화되어야 하는 동안 클라이언트를 계속 실행해야 합니다.
예:
python3 -c 'import pydbus; pydbus.SessionBus().get(
"org.gnome.SessionManager").Inhibit("what", 0, "why", 1);
import time; time.sleep(2**32-1)'
테스트와 관련된 것은 D-Bus 인터페이스 의 IsInhibited
및 메소드입니다. 예:GetInhibitors
org.gnome.SessionManager
qdbus org.gnome.SessionManager /org/gnome/SessionManager \
org.gnome.SessionManager.IsInhibited 8
억제제를 나열하는 방법은 다음을 참조하십시오.목록_억제제()내 용도로.