summaryrefslogtreecommitdiffstats
path: root/core/modules/kiosk-netpoint
diff options
context:
space:
mode:
authorJonathan Bauer2019-01-04 11:12:55 +0100
committerJonathan Bauer2019-01-04 11:12:55 +0100
commitf31f6e5fca75974adb1ae8300854916512b484bb (patch)
treec11c197a7fce4dcd41d30572cdd996d47509f746 /core/modules/kiosk-netpoint
parent[beamergui] Close stdout/err when respawning beamergui (diff)
downloadmltk-f31f6e5fca75974adb1ae8300854916512b484bb.tar.gz
mltk-f31f6e5fca75974adb1ae8300854916512b484bb.tar.xz
mltk-f31f6e5fca75974adb1ae8300854916512b484bb.zip
[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
Diffstat (limited to 'core/modules/kiosk-netpoint')
-rw-r--r--core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/ff-google-small.pngbin0 -> 23912 bytes
-rw-r--r--core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/ff-rz-small.pngbin0 -> 104803 bytes
-rw-r--r--core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/netpoint.css17
-rw-r--r--core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/netpoint.glade359
-rwxr-xr-xcore/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/netpoint.py221
-rw-r--r--core/modules/kiosk-netpoint/data/opt/openslx/scripts/systemd-setup_kiosk.d/10-netpoint10
-rw-r--r--core/modules/kiosk-netpoint/data/usr/share/xgreeters/netpoint.desktop5
-rw-r--r--core/modules/kiosk-netpoint/module.build12
-rw-r--r--core/modules/kiosk-netpoint/module.conf5
-rw-r--r--core/modules/kiosk-netpoint/module.conf.ubuntu10
10 files changed, 639 insertions, 0 deletions
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
--- /dev/null
+++ b/core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/ff-google-small.png
Binary files 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
--- /dev/null
+++ b/core/modules/kiosk-netpoint/data/opt/openslx/lightdm/netpoint-greeter/ff-rz-small.png
Binary files 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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.3 -->
+<interface>
+ <requires lib="gtk+" version="3.10"/>
+ <object class="GtkWindow" id="main">
+ <property name="name">main</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="window_position">center-always</property>
+ <property name="default_width">800</property>
+ <property name="default_height">600</property>
+ <property name="decorated">False</property>
+ <property name="gravity">center</property>
+ <child>
+ <object class="GtkBox" id="box2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="name">title</property>
+ <property name="height_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Kioskswitcher</property>
+ <attributes>
+ <attribute name="font-desc" value="Sans Bold 18"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">False</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkSeparator" id="separator1">
+ <property name="name">sep</property>
+ <property name="width_request">10</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="vexpand">True</property>
+ <property name="orientation">vertical</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">False</property>
+ <property name="row_homogeneous">True</property>
+ <child>
+ <object class="GtkBox" id="box1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">False</property>
+ <property name="vexpand">False</property>
+ <property name="orientation">vertical</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkBox" id="box4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="guest_text">
+ <property name="height_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="vexpand">False</property>
+ <property name="label" translatable="yes">Gastzugang</property>
+ <property name="justify">center</property>
+ <attributes>
+ <attribute name="font-desc" value="Sans Bold 14"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">center</property>
+ <property name="hexpand">False</property>
+ <property name="vexpand">False</property>
+ <property name="label" translatable="yes">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.</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ <property name="width_chars">0</property>
+ <property name="max_width_chars">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="guest_button">
+ <property name="label" translatable="yes">Als Gast anmelden</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <signal name="clicked" handler="guest_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkImage" id="guest_image">
+ <property name="name">guest_image</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="pixbuf">ff-rz-small.png</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="row_homogeneous">True</property>
+ <child>
+ <object class="GtkBox" id="box3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="orientation">vertical</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkBox" id="box5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="login_text">
+ <property name="height_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="vexpand">False</property>
+ <property name="label" translatable="yes">RZ-Zugang</property>
+ <property name="justify">center</property>
+ <attributes>
+ <attribute name="font-desc" value="Sans Bold 14"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="login_info">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">start</property>
+ <property name="vexpand">False</property>
+ <property name="label" translatable="yes">Melden Sie sich mit Ihrem RZ-Konto an.</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ <property name="width_chars">0</property>
+ <property name="max_width_chars">30</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="row_spacing">3</property>
+ <property name="column_spacing">3</property>
+ <child>
+ <object class="GtkEntry" id="pass_password">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="progress_pulse_step">0</property>
+ <signal name="activate" handler="login_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="pass_text">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Passwort:</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="user_text">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Username:</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="user_username">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <signal name="activate" handler="login_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="login_button">
+ <property name="label" translatable="yes">Login</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <signal name="clicked" handler="login_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="feedback_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkImage" id="login_image">
+ <property name="name">login_image</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="pixbuf">ff-google-small.png</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
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 <matthew.fischer@canonical.com>
+# 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 <robert.ancell@canonical.com>
+
+# 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=""