diff options
-rw-r--r-- | Locker.py | 7 | ||||
-rw-r--r-- | pylock.py | 43 |
2 files changed, 36 insertions, 14 deletions
@@ -4,7 +4,7 @@ import Idle class Locker(object): - def __init__(self, lockTimeout, doLock, doUnlock, logoutTimeout = 0, doLogout = None, updateLogoutTimeout = None): + def __init__(self, lockTimeout, doLock, doUnlock, logoutTimeout = None, doLogout = None, updateLogoutTimeout = None): self.locked = False self.lockTimeout = lockTimeout self.logoutTimeout = logoutTimeout @@ -13,7 +13,10 @@ class Locker(object): self.doLogout = doLogout self.updateLogoutTimeout = updateLogoutTimeout - GLib.timeout_add_seconds(1, self._checkLock) + if self.lockTimeout > 0: + GLib.timeout_add_seconds(1, self._checkLock) + else: + GLib.idle_add(self.lock) def _checkLock(self): if self.locked: @@ -5,6 +5,7 @@ import sys import os import pwd import locale +import argparse from gi.repository import Gtk, Gdk, Gio @@ -14,14 +15,23 @@ from LockWindow import LockWindow import pam +_ = locale.gettext + + def get_username(): return pwd.getpwuid(os.getuid())[0] theme = 'UzL-login' -timeout = 500 -logoutTimeout = 15 -username = get_username() + + +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): @@ -34,38 +44,47 @@ signal.signal(signal.SIGQUIT, handler) locale.setlocale(locale.LC_ALL, '') -locale.bindtextdomain('pylock', '/home/neoraider/Devel/Python/pylock/locale') locale.textdomain('pylock') Gtk.Settings.get_default().set_property('gtk-theme-name', theme) - - window = LockWindow() def lock(timeLeft): - window.updateLockMessage(username, timeLeft) + window.updateLockMessage(args.username, timeLeft) window.lock() def logout(): - exit() + try: + os.system(args.logout_command) + except: + pass + + window.reset() def updateTimeout(timeLeft): - window.updateLockMessage(username, 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) -locker = Locker(timeout, lock, window.unlock, logoutTimeout, logout, updateTimeout) -dbus = DBus(locker) +if args.timeout != 0: + dbus = DBus(locker) pamAuth = pam.pam() def tryUnlock(w, password): - if pamAuth.authenticate(username, password): + if pamAuth.authenticate(args.username, password): locker.unlock() + + if args.timeout == 0: + Gtk.main_quit() else: window.reset() window.setAuthMessage(pamAuth.reason) |