#!/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()