#!/usr/bin/env python3 # Copyright (c) 2012 Linaro Limited # # 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 . # # Authors: # Alexandros Frantzis # Includes in Slint package accountsservice # Didier Spaier didieratslintdotfr # See: # https://afrantzis.wordpress.com/2012/06/11/changing-gdmlightdm-user-login-settings-programmatically/ # Downloaded from: # http://bazaar.launchpad.net/~linaro-graphics-wg/linaro-graphics-tests/trunk/view/head:/scripts/user_xsession.py # And slightly modified for Python3 by Didier import os import argparse import dbus bus = dbus.SystemBus() def get_user_account_path(user): account_path = "" accounts = bus.get_object('org.freedesktop.Accounts', '/org/freedesktop/Accounts') accounts_iface = dbus.Interface(accounts, dbus_interface='org.freedesktop.Accounts') if type(user) == str: account_path = accounts_iface.FindUserByName(user) elif type(user) == int: account_path = accounts_iface.FindUserById(dbus.Int64(user)) return account_path def get_user_xsession(account_path): user = bus.get_object('org.freedesktop.Accounts', account_path) return user.Get('org.freedesktop.Accounts.User', 'XSession', dbus_interface='org.freedesktop.DBus.Properties') def set_user_xsession(account_path, session): user = bus.get_object('org.freedesktop.Accounts', account_path) user.SetXSession(session, dbus_interface='org.freedesktop.Accounts.User') def handle_get(args): if args.user_name: user = args.user_name else: user = args.user_id account_path = get_user_account_path(user) print(get_user_xsession(account_path)) def handle_set(args): if args.user_name: user = args.user_name else: user = args.user_id account_path = get_user_account_path(user) set_user_xsession(account_path, args.session) if __name__ == "__main__": parser = argparse.ArgumentParser(description='Change the .') parser.add_argument('--user-id', type=int, default=os.getuid(), help='the user id') parser.add_argument('--user-name', type=str, help='the user name') subparsers = parser.add_subparsers(help='sub-command help') parser_get = subparsers.add_parser('get') parser_get.set_defaults(func=handle_get) parser_set = subparsers.add_parser('set') parser_set.add_argument('session', type=str, help='the session') parser_set.set_defaults(func=handle_set) args = parser.parse_args() try: func = args.func except AttributeError: parser.error("too few arguments") func(args)