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