From f31f6e5fca75974adb1ae8300854916512b484bb Mon Sep 17 00:00:00 2001 From: Jonathan Bauer Date: Fri, 4 Jan 2019 11:12:55 +0100 Subject: [kiosk*] rework and introduce kiosk mode modules changed from slxbrowser only support to modular hook structure to support additional browser, i.e. chromium NOTE: kiosk-chromium and kiosk-netpoint only make sense with the new gen --- .../lightdm/netpoint-greeter/ff-google-small.png | Bin 0 -> 23912 bytes .../lightdm/netpoint-greeter/ff-rz-small.png | Bin 0 -> 104803 bytes .../openslx/lightdm/netpoint-greeter/netpoint.css | 17 + .../lightdm/netpoint-greeter/netpoint.glade | 359 +++++++++++++++++++++ .../openslx/lightdm/netpoint-greeter/netpoint.py | 221 +++++++++++++ .../scripts/systemd-setup_kiosk.d/10-netpoint | 10 + .../data/usr/share/xgreeters/netpoint.desktop | 5 + core/modules/kiosk-netpoint/module.build | 12 + core/modules/kiosk-netpoint/module.conf | 5 + core/modules/kiosk-netpoint/module.conf.ubuntu | 10 + 10 files changed, 639 insertions(+) create mode 100644 core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/ff-google-small.png create mode 100644 core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/ff-rz-small.png create mode 100644 core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/netpoint.css create mode 100644 core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/netpoint.glade create mode 100755 core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/netpoint.py create mode 100644 core/modules/kiosk-netpoint/data/opt/openslx/scripts/systemd-setup_kiosk.d/10-netpoint create mode 100644 core/modules/kiosk-netpoint/data/usr/share/xgreeters/netpoint.desktop create mode 100644 core/modules/kiosk-netpoint/module.build create mode 100644 core/modules/kiosk-netpoint/module.conf create mode 100644 core/modules/kiosk-netpoint/module.conf.ubuntu (limited to 'core/modules/kiosk-netpoint') diff --git a/core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/ff-google-small.png b/core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/ff-google-small.png new file mode 100644 index 00000000..d89c5d7c Binary files /dev/null and b/core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/ff-google-small.png differ diff --git a/core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/ff-rz-small.png b/core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/ff-rz-small.png new file mode 100644 index 00000000..a340b9b2 Binary files /dev/null and b/core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/ff-rz-small.png differ diff --git a/core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/netpoint.css b/core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/netpoint.css new file mode 100644 index 00000000..68ebbe46 --- /dev/null +++ b/core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/netpoint.css @@ -0,0 +1,17 @@ +#main { + background-color: white; +} +#sep { + -GtkWidget-wide-separators: 1; + -GtkWidget-separator-width: 5; + border-style: solid; + border-width: 2px; + color: grey; +} +#title { + border-top-style: solid; + border-bottom-style: double; + border-width: 3px; + border-color: grey; + +} diff --git a/core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/netpoint.glade b/core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/netpoint.glade new file mode 100644 index 00000000..396d4a53 --- /dev/null +++ b/core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/netpoint.glade @@ -0,0 +1,359 @@ + + + + + + main + False + True + True + center-always + 800 + 600 + False + center + + + True + False + vertical + + + title + 100 + True + False + Kioskswitcher + + + + + + False + True + 0 + + + + + True + False + False + True + + + sep + 10 + True + False + True + vertical + + + 1 + 0 + + + + + True + False + True + False + True + + + True + False + False + False + vertical + True + + + True + False + vertical + + + 100 + True + False + center + center + False + Gastzugang + center + + + + + + False + True + 0 + + + + + True + False + center + False + False + Hier können Sie sich ohne RZ-Zugang als Gast anmelden. +Es können nur Seiten innerhalb des Universitätsnetzes aufgerufen werden. + +Zum Abmelden bitte den Browser schließen. + center + True + 0 + 0 + + + False + True + 1 + + + + + False + True + 0 + + + + + Als Gast anmelden + False + True + True + True + center + center + + + + False + True + 1 + + + + + 0 + 0 + + + + + guest_image + True + False + True + True + ff-rz-small.png + + + 0 + 1 + + + + + 0 + 0 + + + + + True + False + True + True + True + + + True + False + True + True + vertical + True + + + True + False + vertical + + + 100 + True + False + center + center + False + RZ-Zugang + center + + + + + + False + True + 0 + + + + + True + False + start + False + Melden Sie sich mit Ihrem RZ-Konto an. + center + True + 0 + 30 + + + False + True + 1 + + + + + True + True + 0 + + + + + True + False + center + center + 3 + 3 + + + True + False + True + 0 + + + + 1 + 1 + + + + + True + False + start + Passwort: + + + 0 + 1 + + + + + True + False + start + Username: + + + 0 + 0 + + + + + True + True + + + + 1 + 0 + + + + + Login + True + True + True + + + + 1 + 2 + + + + + True + False + + + 1 + 3 + + + + + + + + False + True + 1 + + + + + 0 + 0 + + + + + login_image + True + False + True + True + ff-google-small.png + + + 0 + 1 + + + + + 2 + 0 + + + + + False + True + 1 + + + + + + diff --git a/core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/netpoint.py b/core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/netpoint.py new file mode 100755 index 00000000..36a0a16b --- /dev/null +++ b/core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/netpoint.py @@ -0,0 +1,221 @@ +#!/usr/bin/env python2 +# +# Author: Matt Fischer +# Copyright (C) 2012 Canonical, Ltd +# +# 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. See http://www.gnu.org/copyleft/gpl.html the full text of the +# license. +# +# This code is based on the LightDM GTK Greeter which was written by: +# Robert Ancell + +# required packages: +# liblightdm-gobject-1-0 +# gir1.2-lightdm-1 +# python-gobject +# gir1.2-glib-2.0 +# gir1.2-gtk-3.0 + +from gi.repository import GObject +from gi.repository import GLib +from gi.repository import Gtk +from gi.repository import Gdk +from gi.repository import GdkPixbuf +from gi.repository.GdkPixbuf import InterpType +from gi.repository import LightDM +import os +import sys +import threading +import subprocess + +greeter = None + +main = None +split = None + +guest_box = None +guest_text = None +guest_button = None +guest_image = None + +login_box = None +login_text = None +user_box = None +user_text = None +user_username = None +pass_box = None +pass_text = None +pass_password = None + +prompt_box = None +prompt_label = None +prompt_entry = None + +# For auto login +auto_login_count = 30 +last_login_text = "" +last_password_text = "" + + + + +# This Gtk signal is called when the user hits enter after entering a +# username/password or clicks the login button. Since we re-purposed +# the text entry box, we have 3 possible cases to handle here. +# 1) the user is already authenticated, if for example, they don't have +# a password set. +# 2) The username has been passed into LightDM and now we need to pass +# the password +# 3) The username has been entered, but not passed in. We pass it in +# and start the authentication process. +def login_cb(widget): + print >> sys.stderr, "login_cb" + if greeter.get_is_authenticated(): + print >> sys.stderr, "user is already authenticated, starting session" + #start_session() + elif greeter.get_in_authentication(): + print >> sys.stderr, "username was passed in already, send password to LightDM" + print >> sys.stderr, greeter.get_authentication_user() + greeter.respond(pass_password.get_text()) + feedback_label.set_text("Authenticating...") + else: + print >> sys.stderr, "Initial entry of username, send it to LightDM" + greeter.authenticate(user_username.get_text()) + feedback_label.set_text("Authenticating...") + +def guest_cb(widget): + print >> sys.stderr, "guest_cb" + if greeter.get_has_guest_account_hint(): + print >> sys.stderr, "Guest accounts supported" + greeter.authenticate_as_guest() + else: + print >> sys.stderr, "Guest accounts not supported" + + +# Gtk Signal Handlers +handlers = { + "login_cb": login_cb, + "guest_cb": guest_cb +} + +# The show_prompt callback is oddly named, but when you get this +# callback you are supposed to send the password to LightDM next. In +# our example, we re-purpose the prompt and ask the user for the +# password which is then sent the next time the user hits the Login +# button or presses enter. +def show_prompt_cb(greeter, text, promptType): + print >> sys.stderr, "prompt type: " + str(promptType) + # if this is a password prompt, we want to hide the characters + if promptType == LightDM.PromptType.SECRET: + pass_password.set_visibility(False) + else: + pass_password.set_visibility(True) + greeter.respond(pass_password.get_text()) + + +# If LightDM sends a message back to the greeter, for example, "Login +# failed" or "invalid password" we display it in our message box. +def show_message_cb(text, message_type): + feedback_label.set_visibility(True) + feedback_label.set_text(text) + +# Callback for after we send LightDM the password, this method +# has to handle a successful login, in which case we start the session +# or a failed login, in which case we tell the user +def authentication_complete_cb(greeter): + if greeter.get_is_authenticated(): + if not greeter.start_session_sync("default"): + print >> sys.stderr, "Failed to start session" + else: + feedback_label.set_text("Login failed!") + pass_password.set_text(""); + print >> sys.stderr, "Login failed" + +if __name__ == '__main__': + print >> sys.stderr, "Starting up..." + main_loop = GObject.MainLoop () + builder = Gtk.Builder() + greeter = LightDM.Greeter() + styler = Gtk.CssProvider() + css = open(os.path.dirname(os.path.abspath(__file__)) + '/netpoint.css', 'r') + + css_data = css.read() + css.close() + styler.load_from_data(css_data) + Gtk.StyleContext.add_provider_for_screen( + Gdk.Screen.get_default(), + styler, + Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION + ) + + # connect signal handlers to LightDM + greeter.connect ("authentication-complete", authentication_complete_cb) + greeter.connect ("show-message", show_message_cb) + greeter.connect ("show-prompt", show_prompt_cb) + + # connect builder and widgets + # you probably really want to put your .UI file somewhere else + builder.add_from_file(os.path.dirname(os.path.abspath(__file__)) + "/netpoint.glade") + + main = builder.get_object("main") + split = builder.get_object("split") + sep = builder.get_object("sep") + guest_box = builder.get_object("guest_box") + guest_outer_box = builder.get_object("guest_outer_box") + guest_internal_box = builder.get_object("guest_internal_box") + guest_text = builder.get_object("guest_text") + guest_button = builder.get_object("guest_button") + guest_image = builder.get_object("guest_image") + login_image = builder.get_object("login_image") + checkbox = builder.get_object("checkbutton1") + pixbuf = guest_image.get_pixbuf() + pixbuf = pixbuf.scale_simple(pixbuf.get_width() * 0.75, pixbuf.get_height() * 0.75, InterpType.HYPER) + guest_image.set_from_pixbuf(pixbuf) + pixbuf = login_image.get_pixbuf() + pixbuf = pixbuf.scale_simple(pixbuf.get_width() * 0.75, pixbuf.get_height() * 0.75, InterpType.BILINEAR) + login_image.set_from_pixbuf(pixbuf) + + login_box = builder.get_object("login_box") + login_text = builder.get_object("login_text") + + user_box = builder.get_object("user_box") + user_text = builder.get_object("user_text") + user_username = builder.get_object("user_username") + + pass_box = builder.get_object("pass_box") + pass_text = builder.get_object("pass_text") + pass_password = builder.get_object("pass_password") + feedback_label = builder.get_object("feedback_label") + + # connect signals to Gtk UI + builder.connect_signals(handlers) + + # connect to greeter + greeter.connect_sync() + + # check for autologin + rc = subprocess.call("/opt/openslx/lightdm/is-autologin-enabled", shell=True) + if rc == 0: + greeter.authenticate_as_guest() + # setup the GUI + main.set_decorated(True) + main.get_root_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.LEFT_PTR)) + main.show() + guest_text.show() + guest_button.show() + login_text.show() + user_text.show() + user_username.grab_focus() + user_username.show() + pass_text.show() + pass_password.set_sensitive(True) + pass_password.set_visibility(False) + pass_password.show() + + # fullscreen it + main.resize(Gdk.Screen.width(), Gdk.Screen.height()) + + main_loop.run () diff --git a/core/modules/kiosk-netpoint/data/opt/openslx/scripts/systemd-setup_kiosk.d/10-netpoint b/core/modules/kiosk-netpoint/data/opt/openslx/scripts/systemd-setup_kiosk.d/10-netpoint new file mode 100644 index 00000000..b172dd7e --- /dev/null +++ b/core/modules/kiosk-netpoint/data/opt/openslx/scripts/systemd-setup_kiosk.d/10-netpoint @@ -0,0 +1,10 @@ +#!/bin/ash + +# cause why not ... +mkdir -p "/etc/lightdm/lightdm.conf.d/" +cat <<-EOF > /etc/lightdm/lightdm.conf.d/20-netpoint-greeter.conf + [SeatDefaults] + greeter-session=netpoint +EOF + +true diff --git a/core/modules/kiosk-netpoint/data/usr/share/xgreeters/netpoint.desktop b/core/modules/kiosk-netpoint/data/usr/share/xgreeters/netpoint.desktop new file mode 100644 index 00000000..e6f340b9 --- /dev/null +++ b/core/modules/kiosk-netpoint/data/usr/share/xgreeters/netpoint.desktop @@ -0,0 +1,5 @@ +[Desktop Entry] +Name=Netpoint Greeter +Comment=Netpoint Greeter +Exec=/opt/openslx/lightdm/netpoint-greeter/netpoint.py +Type=Application diff --git a/core/modules/kiosk-netpoint/module.build b/core/modules/kiosk-netpoint/module.build new file mode 100644 index 00000000..a5cbb6b6 --- /dev/null +++ b/core/modules/kiosk-netpoint/module.build @@ -0,0 +1,12 @@ +#!/bin/bash +fetch_source() { + : +} + +build() { + : +} + +post_copy() { + : +} diff --git a/core/modules/kiosk-netpoint/module.conf b/core/modules/kiosk-netpoint/module.conf new file mode 100644 index 00000000..613d6d21 --- /dev/null +++ b/core/modules/kiosk-netpoint/module.conf @@ -0,0 +1,5 @@ +#!/bin/bash +REQUIRED_MODULES="kiosk-common" +REQUIRED_BINARIES="" +REQUIRED_LIBRARIES="" +REQUIRED_DIRECTORIES="" diff --git a/core/modules/kiosk-netpoint/module.conf.ubuntu b/core/modules/kiosk-netpoint/module.conf.ubuntu new file mode 100644 index 00000000..f69c2445 --- /dev/null +++ b/core/modules/kiosk-netpoint/module.conf.ubuntu @@ -0,0 +1,10 @@ +#!/bin/bash +REQUIRED_CONTENT_PACKAGES=" + gir1.2-lightdm-1 + liblightdm-gobject-1-0 + liblightdm-qt5-3-0 +" +REQUIRED_INSTALLED_PACKAGES="$REQUIRED_CONTENT_PACKAGES" +REQUIRED_BINARIES="" +REQUIRED_LIBRARIES="" +REQUIRED_DIRECTORIES="" -- cgit v1.2.3-55-g7522