
Я узнал, что можно создавать ингибиторы для сеанса графического интерфейса пользователя с помощью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)'
Для тестирования используются методы IsInhibited
и интерфейса D-Bus, например:GetInhibitors
org.gnome.SessionManager
qdbus org.gnome.SessionManager /org/gnome/SessionManager \
org.gnome.SessionManager.IsInhibited 8
О том, как составить список ингибиторов, см.список_ингибиторов()в моем хозяйстве.