11 {'start': ['xss-lock','-l','--','/home/don/bin/locker'],
12 'stop': ['pkill','-TERM','xss-lock'],
13 'test': lambda : cmd_exists('xss-lock') and cmd_exists('/home/don//bin/locker'),
14 'running': 'xss-lock',
17 {'start': ['xautolock','-locker','slock'],
18 'stop': ['xautolock','-exit'],
19 'test': lambda : cmd_exists('xautolock') and cmd_exists('slock'),
20 'running': 'xautolock',
23 {'start' : ['XENVIRONMENT=~/.xscreensaver','/usr/bin/xscreensaver'],
24 'stop' : ['xscreensaver-command','-exit'],
25 'test' : lambda : cmd_exists('xscreensaver'),
26 'running' : 'xscreensaver',
29 {'start': ('xautolock','-notifier','true','-bell','0'),
30 'stop': ('xautolock','-exit'),
31 'test': lambda : cmd_exists('xautolock'),
32 'running' : 'xautolock',
36 #' Determine if named command exists on the path and is executable
40 def cmd_running (cmd):
42 for proc in psutil.process_iter():
43 if proc.name() == cmd and proc.is_running() and proc.uids()[0] == user:
47 def parse_arguments():
48 """Parses the arguments for the screensaver command
50 parser = argparse.ArgumentParser(
51 description="A command to turn on/off screesavers"
53 parser.add_argument('command',choices=('sleep','off','stop','on','start'))
54 return parser.parse_args()
60 # parent process so return
63 print >>sys.stderr, "fork failed: %d (%s)" % (e.errno, e.strerror)
70 # parent process so return
73 print >>sys.stderr, "fork failed: %d (%s)" % (e.errno, e.strerror)
78 def fork_sleep_and_forget(delay,cmd):
83 def should_stop(args):
84 if args.command == 'stop' or args.command == 'off':
88 def should_start(args):
89 if args.command == 'start' or args.command == 'on':
93 def should_sleep(args):
94 if args.command == 'sleep' or args.command == 'pause':
98 args = parse_arguments()
100 for screensaver in screensavers:
101 if screensaver['test']():
102 if should_stop(args):
103 if cmd_running(screensaver['running']):
104 fork(screensaver['stop'])
105 elif should_start(args):
106 if not cmd_running(screensaver['running']):
107 fork(screensaver['start'])
108 elif should_sleep(args):
109 if cmd_running(screensaver['running']):
110 fork(screensaver['stop'])
111 fork_sleep_and_forget(args.sleep,screensaver['start'])
113 print >>sys.stderr,"Unknown command"
116 print >> sys.stderr,"No screensaver"