Dustin Falgout
8 years ago
6 changed files with 340 additions and 0 deletions
@ -0,0 +1,159 @@ |
|||||||
|
#!/usr/bin/env python |
||||||
|
# -*- coding: utf-8 -*- |
||||||
|
# |
||||||
|
# LightDMGreeter.py |
||||||
|
# |
||||||
|
# Copyright © 2017 Antergos |
||||||
|
# |
||||||
|
# This file is part of Web Greeter. |
||||||
|
# |
||||||
|
# Web Greeter 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. |
||||||
|
# |
||||||
|
# Web Greeter 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. |
||||||
|
# |
||||||
|
# The following additional terms are in effect as per Section 7 of the license: |
||||||
|
# |
||||||
|
# The preservation of all legal notices and author attributions in |
||||||
|
# the material or in the Appropriate Legal Notices displayed |
||||||
|
# by works containing it is required. |
||||||
|
# |
||||||
|
# You should have received a copy of the GNU General Public License |
||||||
|
# along with Web Greeter; If not, see <http://www.gnu.org/licenses/>. |
||||||
|
|
||||||
|
# Standard Lib |
||||||
|
|
||||||
|
# 3rd-Party Libs |
||||||
|
import gi |
||||||
|
gi.require_version('LightDM', '1') |
||||||
|
from gi.repository import LightDM |
||||||
|
from PyQt5.QtCore import QVariant |
||||||
|
from whither.bridge import BridgeObject, prop |
||||||
|
|
||||||
|
# This Application |
||||||
|
from . import ( |
||||||
|
language_to_dict, |
||||||
|
layout_to_dict, |
||||||
|
session_to_dict, |
||||||
|
user_to_dict, |
||||||
|
) |
||||||
|
|
||||||
|
|
||||||
|
LightDMGreeter = LightDM.Greeter() |
||||||
|
LightDMUserList = LightDM.UserList() |
||||||
|
|
||||||
|
|
||||||
|
class Greeter(BridgeObject): |
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs): |
||||||
|
super().__init__(name='LightDMGreeter', *args, **kwargs) |
||||||
|
|
||||||
|
@prop(str) |
||||||
|
def authentication_user(self): |
||||||
|
return LightDMGreeter.get_authentication_user() or '' |
||||||
|
|
||||||
|
@prop(bool) |
||||||
|
def autologin_guest(self): |
||||||
|
return LightDMGreeter.get_autologin_guest_hint() |
||||||
|
|
||||||
|
@prop(int) |
||||||
|
def autologin_timeout(self): |
||||||
|
return LightDMGreeter.get_autologin_timeout_hint() |
||||||
|
|
||||||
|
@prop(str) |
||||||
|
def autologin_user(self): |
||||||
|
return LightDMGreeter.get_autologin_user_hint() |
||||||
|
|
||||||
|
@prop(bool) |
||||||
|
def can_hibernate(self): |
||||||
|
return LightDM.get_can_hibernate() |
||||||
|
|
||||||
|
@prop(bool) |
||||||
|
def can_restart(self): |
||||||
|
return LightDM.get_can_restart() |
||||||
|
|
||||||
|
@prop(bool) |
||||||
|
def can_shutdown(self): |
||||||
|
return LightDM.get_can_shutdown() |
||||||
|
|
||||||
|
@prop(bool) |
||||||
|
def can_suspend(self): |
||||||
|
return LightDM.get_can_suspend() |
||||||
|
|
||||||
|
@prop(str) |
||||||
|
def default_session(self): |
||||||
|
return LightDMGreeter.get_default_session_hint() |
||||||
|
|
||||||
|
@prop(bool) |
||||||
|
def has_guest_account(self): |
||||||
|
return LightDMGreeter.get_has_guest_account_hint() |
||||||
|
|
||||||
|
@prop(bool) |
||||||
|
def hide_users(self): |
||||||
|
return LightDMGreeter.get_hide_users_hint() |
||||||
|
|
||||||
|
@prop(str) |
||||||
|
def hostname(self): |
||||||
|
return LightDM.get_hostname() |
||||||
|
|
||||||
|
@prop(bool) |
||||||
|
def in_authentication(self): |
||||||
|
return LightDMGreeter.get_in_authentication() |
||||||
|
|
||||||
|
@prop(bool) |
||||||
|
def is_authenticated(self): |
||||||
|
return LightDMGreeter.get_is_authenticated() |
||||||
|
|
||||||
|
@prop(QVariant) |
||||||
|
def language(self): |
||||||
|
return language_to_dict(LightDM.get_language()) |
||||||
|
|
||||||
|
@prop(list) |
||||||
|
def languages(self): |
||||||
|
return [language_to_dict(lang) for lang in LightDM.get_languages()] |
||||||
|
|
||||||
|
@prop(QVariant) |
||||||
|
def layout(self): |
||||||
|
return layout_to_dict(LightDM.get_layout()) |
||||||
|
|
||||||
|
@prop(list) |
||||||
|
def layouts(self): |
||||||
|
return [layout_to_dict(layout) for layout in LightDM.get_layouts()] |
||||||
|
|
||||||
|
@prop(bool) |
||||||
|
def lock_hint(self): |
||||||
|
return LightDMGreeter.get_lock_hint() |
||||||
|
|
||||||
|
@prop(list) |
||||||
|
def remote_sessions(self): |
||||||
|
return [session_to_dict(session) for session in LightDM.get_remote_sessions()] |
||||||
|
|
||||||
|
@prop(bool) |
||||||
|
def select_guest_hint(self): |
||||||
|
return LightDMGreeter.get_select_guest_hint() |
||||||
|
|
||||||
|
@prop(str) |
||||||
|
def select_user_hint(self): |
||||||
|
return LightDMGreeter.get_select_user_hint() or '' |
||||||
|
|
||||||
|
@prop(list) |
||||||
|
def sessions(self): |
||||||
|
return [session_to_dict(session) for session in LightDM.get_sessions()] |
||||||
|
|
||||||
|
@prop(bool) |
||||||
|
def show_manual_login_hint(self): |
||||||
|
return LightDMGreeter.get_show_manual_login_hint() |
||||||
|
|
||||||
|
@prop(bool) |
||||||
|
def show_remote_login_hint(self): |
||||||
|
return LightDMGreeter.get_show_remote_login_hint() |
||||||
|
|
||||||
|
@prop(list) |
||||||
|
def users(self): |
||||||
|
return [user_to_dict(user) for user in LightDMUserList.get_users()] |
||||||
|
|
@ -0,0 +1,65 @@ |
|||||||
|
#!/usr/bin/env python |
||||||
|
# -*- coding: utf-8 -*- |
||||||
|
# |
||||||
|
# __init__.py |
||||||
|
# |
||||||
|
# Copyright © 2017 Antergos |
||||||
|
# |
||||||
|
# This file is part of Web Greeter. |
||||||
|
# |
||||||
|
# Web Greeter 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. |
||||||
|
# |
||||||
|
# Web Greeter 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. |
||||||
|
# |
||||||
|
# The following additional terms are in effect as per Section 7 of the license: |
||||||
|
# |
||||||
|
# The preservation of all legal notices and author attributions in |
||||||
|
# the material or in the Appropriate Legal Notices displayed |
||||||
|
# by works containing it is required. |
||||||
|
# |
||||||
|
# You should have received a copy of the GNU General Public License |
||||||
|
# along with Web Greeter; If not, see <http://www.gnu.org/licenses/>. |
||||||
|
|
||||||
|
|
||||||
|
def language_to_dict(lang): |
||||||
|
return dict(code=lang.get_code(), name=lang.get_name(), territory=lang.get_territory()) |
||||||
|
|
||||||
|
|
||||||
|
def layout_to_dict(layout): |
||||||
|
return dict( |
||||||
|
description=layout.get_description(), |
||||||
|
name=layout.get_name(), |
||||||
|
short_description=layout.get_short_description() |
||||||
|
) |
||||||
|
|
||||||
|
|
||||||
|
def session_to_dict(session): |
||||||
|
return dict( |
||||||
|
comment=session.get_comment(), |
||||||
|
key=session.get_key(), |
||||||
|
name=session.get_name(), |
||||||
|
type=session.get_session_type(), |
||||||
|
) |
||||||
|
|
||||||
|
|
||||||
|
def user_to_dict(user): |
||||||
|
return dict( |
||||||
|
display_name=user.get_display_name(), |
||||||
|
home_directory=user.get_home_directory(), |
||||||
|
image=user.get_image(), |
||||||
|
language=user.get_language(), |
||||||
|
layout=user.get_layout(), |
||||||
|
logged_in=user.get_logged_in(), |
||||||
|
session=user.get_session(), |
||||||
|
username=user.get_name(), |
||||||
|
# ---->>> BEGIN DEPRECATED! <<<---- |
||||||
|
name=user.get_name(), |
||||||
|
real_name=user.get_real_name(), |
||||||
|
# ---->>> END DEPRECATED! <<<---- |
||||||
|
) |
@ -0,0 +1,82 @@ |
|||||||
|
#!/usr/bin/env python |
||||||
|
# -*- coding: utf-8 -*- |
||||||
|
# |
||||||
|
# greeter.py |
||||||
|
# |
||||||
|
# Copyright © 2017 Antergos |
||||||
|
# |
||||||
|
# This file is part of Web Greeter. |
||||||
|
# |
||||||
|
# Web Greeter 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. |
||||||
|
# |
||||||
|
# Web Greeter 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. |
||||||
|
# |
||||||
|
# The following additional terms are in effect as per Section 7 of the license: |
||||||
|
# |
||||||
|
# The preservation of all legal notices and author attributions in |
||||||
|
# the material or in the Appropriate Legal Notices displayed |
||||||
|
# by works containing it is required. |
||||||
|
# |
||||||
|
# You should have received a copy of the GNU General Public License |
||||||
|
# along with Web Greeter; If not, see <http://www.gnu.org/licenses/>. |
||||||
|
|
||||||
|
# Standard Lib |
||||||
|
import configparser |
||||||
|
import os |
||||||
|
|
||||||
|
# 3rd-Party Libs |
||||||
|
from whither.app import App |
||||||
|
from whither.base.data import AttributeDict |
||||||
|
|
||||||
|
# This Application |
||||||
|
from bridge.Greeter import Greeter |
||||||
|
|
||||||
|
|
||||||
|
BASE_DIR = os.path.dirname(os.path.realpath(__file__)) |
||||||
|
CONFIG_FILE = os.path.join(BASE_DIR, 'whither.yml') |
||||||
|
|
||||||
|
|
||||||
|
class WebGreeter(App): |
||||||
|
_user_config = AttributeDict({}) |
||||||
|
_greeter = None |
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs): |
||||||
|
super().__init__('WebGreeter', config_file=CONFIG_FILE, debug=True, *args, **kwargs) |
||||||
|
self.get_and_save_user_config() |
||||||
|
|
||||||
|
self._greeter = Greeter() |
||||||
|
self._web_container.bridge_objects = (self._greeter,) |
||||||
|
|
||||||
|
self._web_container.initialize_bridge_objects() |
||||||
|
self.load_theme() |
||||||
|
|
||||||
|
def get_and_save_user_config(self): |
||||||
|
config = configparser.ConfigParser() |
||||||
|
|
||||||
|
config.read('/etc/lightdm/web-greeter.conf') |
||||||
|
|
||||||
|
for section in config.sections(): |
||||||
|
self._user_config[section] = {} |
||||||
|
|
||||||
|
for key in config[section]: |
||||||
|
self._user_config[section][key] = config[section][key] |
||||||
|
|
||||||
|
def load_theme(self): |
||||||
|
theme_url = 'file://{0}/{1}/index.html'.format( |
||||||
|
self.config.themes_dir, |
||||||
|
self._user_config.greeter.webkit_theme |
||||||
|
) |
||||||
|
|
||||||
|
self._web_container.load(theme_url) |
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
greeter = WebGreeter() |
||||||
|
|
||||||
|
greeter.run() |
@ -0,0 +1,31 @@ |
|||||||
|
# Whither (Universal Linux Apps) Configuration |
||||||
|
# The top-level keys in this file should be application names. This makes it possible to |
||||||
|
# install multiple Whither-based apps on a single system, each with their own configuration. |
||||||
|
|
||||||
|
# App Name |
||||||
|
WebGreeter: |
||||||
|
# Whither's Config |
||||||
|
whither: |
||||||
|
# Unique identifier string (dbus-style) |
||||||
|
app_id: com.antergos.web-greeter |
||||||
|
toolkit: auto # auto|qt|gtk |
||||||
|
# A valid URI for an HTML page that will be loaded when the app starts. |
||||||
|
entry_point: |
||||||
|
autoload: False |
||||||
|
url: '' |
||||||
|
window: |
||||||
|
width: 1120 |
||||||
|
height: 720 |
||||||
|
initial_state: maximized # normal|maximized|minimized|fullscreen |
||||||
|
# Whether or not the window should show standard titlebar and action buttons. |
||||||
|
decorated: False |
||||||
|
# Whether or not the window should stay on top of all other windows. |
||||||
|
stays_on_top: False |
||||||
|
title: Web Greeter for LightDM |
||||||
|
icon: /usr/share/cnchi/data/icons/48x48/cnchi.png |
||||||
|
toolbar: |
||||||
|
enabled: False |
||||||
|
|
||||||
|
# App's Config |
||||||
|
app: |
||||||
|
themes_dir: /usr/share/lightdm-webkit/themes |
Loading…
Reference in new issue