-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
sessiond-inhibit
executable file
·88 lines (77 loc) · 2.78 KB
/
sessiond-inhibit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/usr/bin/python3
# sessiond - standalone X session manager
# Copyright (C) 2020 James Reed
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation, either version 3 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# this program. If not, see <https://www.gnu.org/licenses/>.
import sys
from argparse import ArgumentParser
from subprocess import run
from dbus.exceptions import DBusException
from sessiond import Session
def get_inhibitors(session):
# Sort by timestamp.
inh = sorted(session.list_inhibitors().items(), key=lambda x: x[1][0], reverse=True)
if len(inh) == 0:
sys.stderr.write("No inhibitors\n")
sys.exit(1)
return inh
if __name__ == "__main__":
p = ArgumentParser(description="With no command, list running inhibitors.")
p.add_argument("command", nargs="?", help="Command to run")
p.add_argument("-w", "--who", default="", help="Set who is inhibiting")
p.add_argument("-y", "--why", default="", help="Set why this inhibitor is running")
p.add_argument("-s", "--stop", action="store_true", help="Stop running inhibitors")
p.add_argument(
"-i", "--inhibit", action="store_true", help="Inhibit without a command"
)
p.add_argument(
"-u",
"--uninhibit",
nargs="?",
const=True,
metavar="ID",
help="Uninhibit last inhibitor or by ID",
)
args = p.parse_args()
s = Session()
if args.stop:
n = s.stop_inhibitors()
if n == 0:
sys.exit(1)
elif args.inhibit:
print(s.inhibit(args.who, args.why))
elif args.uninhibit:
if args.uninhibit is True:
# Uninhibit by first ID.
args.uninhibit = get_inhibitors(s)[0][0]
s.uninhibit(args.uninhibit)
print(args.uninhibit)
elif args.command:
i = s.inhibit(args.who or args.command, args.why)
def try_uninhibit():
try:
s.uninhibit(i)
except DBusException:
pass
try:
run(args.command, shell=True)
except KeyboardInterrupt:
try_uninhibit()
sys.exit(130)
try_uninhibit()
else:
for (k, t) in get_inhibitors(s):
out = "id='{}' time='{}' who='{}'".format(k, t[0], t[1])
if t[2]:
out += " why='{}'".format(t[2])
print(out)