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
89
90
91
92
93
94
95
96
97
|
#!/usr/bin/env python3
import signal
import sys
import os
import pwd
import locale
import argparse
from gi.repository import Gtk, Gdk, Gio
from DBus import DBus
from Locker import Locker
from LockWindow import LockWindow
import pam
_ = locale.gettext
def get_username():
return pwd.getpwuid(os.getuid())[0]
theme = 'UzL-login'
parser = argparse.ArgumentParser(prog='pylock', description=_('GTK-based screen locker.'))
parser.add_argument('-t', '--timeout', type=int, default=0, help=_('Start in daemon mode that will automatically activate after a given time of inactivity.'))
parser.add_argument('-l', '--logout', type=int, default=0, help=_('Allow to logout the current user after a given time.'))
parser.add_argument('-c', '--logout-command', help=_('Specifies the command to be called to log out a user.'))
parser.add_argument('-u', '--username', default=get_username(), help=_('Set the name of the user that is able to unlock the screen.'))
args = parser.parse_args()
def handler(signum, frame):
Gtk.main_quit()
signal.signal(signal.SIGINT, handler)
signal.signal(signal.SIGTERM, handler)
signal.signal(signal.SIGQUIT, handler)
locale.setlocale(locale.LC_ALL, '')
locale.textdomain('pylock')
Gtk.Settings.get_default().set_property('gtk-theme-name', theme)
window = LockWindow()
def lock(timeLeft):
window.updateLockMessage(args.username, timeLeft)
window.lock()
def logout():
try:
os.system(args.logout_command)
except:
pass
window.reset()
def updateTimeout(timeLeft):
window.updateLockMessage(args.username, timeLeft)
if args.logout_command is None:
locker = Locker(args.timeout, lock, window.unlock)
else:
locker = Locker(args.timeout, lock, window.unlock, args.logout, logout, updateTimeout)
if args.timeout != 0:
dbus = DBus(locker)
pamAuth = pam.pam()
def tryUnlock(w, password):
if pamAuth.authenticate(args.username, password):
locker.unlock()
if args.timeout == 0:
Gtk.main_quit()
else:
window.reset()
window.setAuthMessage(pamAuth.reason)
return True
window.connect('logout', lambda w: locker.logout())
window.connect('tryUnlock', tryUnlock)
Gtk.main()
|