summaryrefslogtreecommitdiffstats
path: root/remote/modules
diff options
context:
space:
mode:
Diffstat (limited to 'remote/modules')
-rw-r--r--remote/modules/alsa/module.conf.opensuse5
-rw-r--r--remote/modules/beamergui/module.build7
-rw-r--r--remote/modules/beamergui/module.conf.opensuse8
-rw-r--r--remote/modules/cups/module.conf.opensuse.13.212
-rwxr-xr-xremote/modules/idleaction/data/opt/openslx/scripts/idleaction-cron_script4
-rw-r--r--remote/modules/ncp/module.build26
-rw-r--r--remote/modules/ncp/module.conf8
-rw-r--r--remote/modules/ncp/module.conf.debian26
-rw-r--r--remote/modules/ncp/module.conf.ubuntu17
-rw-r--r--remote/modules/ncp/module.conf.ubuntu.1424
-rw-r--r--remote/modules/netpoint-lightdm/data/etc/lightdm/lightdm.conf164
-rw-r--r--remote/modules/netpoint-lightdm/data/etc/sysconfig/displaymanager113
-rw-r--r--remote/modules/netpoint-lightdm/data/etc/sysconfig/windowmanager51
-rw-r--r--remote/modules/netpoint-lightdm/data/usr/local/bin/guest-account3
-rwxr-xr-xremote/modules/netpoint-lightdm/data/usr/local/bin/guest-cleanup8
-rwxr-xr-xremote/modules/netpoint-lightdm/data/usr/local/bin/guest-session4
-rwxr-xr-xremote/modules/netpoint-lightdm/data/usr/local/bin/guest-setup25
-rwxr-xr-xremote/modules/netpoint-lightdm/data/usr/local/bin/netpoint.py215
-rw-r--r--remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/ff-google-smaller.pngbin0 -> 16703 bytes
-rw-r--r--remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/ff-rz-smaller.pngbin0 -> 72522 bytes
-rw-r--r--remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/netpoint.css16
-rw-r--r--remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/netpoint.glade365
-rw-r--r--remote/modules/netpoint-lightdm/data/usr/local/share/xgreeters/netpoint.desktop5
-rw-r--r--remote/modules/netpoint-lightdm/module.build15
-rw-r--r--remote/modules/netpoint-lightdm/module.conf3
-rw-r--r--remote/modules/netpoint-lightdm/module.conf.opensuse.13.236
-rw-r--r--remote/modules/nscd/data/etc/nscd.conf6
-rw-r--r--remote/modules/nslcd/module.build42
-rw-r--r--remote/modules/nslcd/module.conf6
-rw-r--r--remote/modules/nslcd/module.conf.debian6
-rw-r--r--remote/modules/nslcd/module.conf.ubuntu6
-rw-r--r--remote/modules/nslcd/templates/nslcd-systemd.service (renamed from remote/modules/pam/templates/nslcd-systemd.service)0
-rw-r--r--remote/modules/pam-common-share/data/opt/openslx/scripts/pam_script_mount_common_share178
-rw-r--r--remote/modules/pam/data/etc/pam.d/common-session-noninteractive1
-rwxr-xr-xremote/modules/pam/data/opt/openslx/scripts/pam_script_auth2
-rwxr-xr-xremote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close4
-rw-r--r--remote/modules/pam/module.build18
-rw-r--r--remote/modules/pam/module.conf4
-rw-r--r--remote/modules/pam/module.conf.debian2
-rw-r--r--remote/modules/pam/module.conf.opensuse.13.248
-rw-r--r--remote/modules/pam/module.conf.ubuntu2
-rw-r--r--remote/modules/pam/module.conf.ubuntu.1416
-rw-r--r--remote/modules/pvs2/module.conf.opensuse14
-rw-r--r--remote/modules/rsyslogd/module.conf.opensuse.13.29
l---------remote/modules/ssh-auth-keys/data/etc/systemd/system/basic.target.wants/ssh-auth-keys.service1
-rw-r--r--remote/modules/ssh-auth-keys/data/etc/systemd/system/ssh-auth-keys.service7
-rwxr-xr-xremote/modules/ssh-auth-keys/data/opt/openslx/scripts/systemd-ssh_auth_keys18
-rw-r--r--remote/modules/ssh-auth-keys/module.build11
-rw-r--r--remote/modules/ssh-auth-keys/module.conf3
-rw-r--r--remote/modules/sssd/module.build33
-rw-r--r--remote/modules/sssd/module.conf18
-rw-r--r--remote/modules/sssd/module.conf.opensuse.13.223
-rw-r--r--remote/modules/sssd/module.conf.ubuntu14
-rw-r--r--remote/modules/sssd/templates/sssd-systemd.service15
-rw-r--r--remote/modules/systemd/data/usr/lib/systemd/system/getty@.service3
-rw-r--r--remote/modules/systemd/module.build4
-rwxr-xr-xremote/modules/vmchooser/data/opt/openslx/scripts/vmchooser-run_virt10
-rwxr-xr-xremote/modules/vmchooser2/data/opt/openslx/scripts/vmchooser-run_virt10
-rw-r--r--remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include16
-rw-r--r--remote/modules/x11vnc/module.conf.opensuse6
-rw-r--r--remote/modules/xorg/module.conf.opensuse.13.292
61 files changed, 1675 insertions, 133 deletions
diff --git a/remote/modules/alsa/module.conf.opensuse b/remote/modules/alsa/module.conf.opensuse
index 17651c29..a9ba1d50 100644
--- a/remote/modules/alsa/module.conf.opensuse
+++ b/remote/modules/alsa/module.conf.opensuse
@@ -3,3 +3,8 @@ REQUIRED_CONTENT_PACKAGES="
alsa
libasound2
"
+REQUIRED_INSTALLED_PACKAGES="
+ alsa-utils
+ alsa
+ libasound2
+"
diff --git a/remote/modules/beamergui/module.build b/remote/modules/beamergui/module.build
index 2ff35bfc..1afde34e 100644
--- a/remote/modules/beamergui/module.build
+++ b/remote/modules/beamergui/module.build
@@ -6,6 +6,11 @@ fetch_source() {
build() {
local SRCDIR="${MODULE_DIR}/src/"
+ if [[ "$SYS_DISTRIBUTION" == "opensuse" && "$SYS_VERSION" == "13.2" ]]; then
+ QMAKE="/usr/$LIB64/qt4/bin/qmake"
+ else
+ QMAKE="$(which qmake-qt4)"
+ fi
# first activate qt 4
activate_qt 4
@@ -13,7 +18,7 @@ build() {
mkdir -p "$MODULE_BUILD_DIR/opt/openslx/bin"
cd "${MODULE_BUILD_DIR}/opt/openslx/bin" || perror "Could not cd!"
pinfo "Running qmake"
- qmake-qt4 "$SRCDIR/src/beamergui.pro" -r -spec linux-g++ || perror "'qmake-qt4' failed (e.g. not installed)."
+ "$QMAKE" "$SRCDIR/src/beamergui.pro" -r -spec linux-g++ || perror "'qmake-qt4' failed (e.g. not installed)."
pinfo "Running make"
make || perror "'make' failed."
}
diff --git a/remote/modules/beamergui/module.conf.opensuse b/remote/modules/beamergui/module.conf.opensuse
new file mode 100644
index 00000000..01586fe3
--- /dev/null
+++ b/remote/modules/beamergui/module.conf.opensuse
@@ -0,0 +1,8 @@
+REQUIRED_INSTALLED_PACKAGES="
+libqt4-devel
+libxrandr-devel
+"
+REQUIRED_CONTENT_PACKAGES="
+libqt4-devel
+libXrandr-devel
+"
diff --git a/remote/modules/cups/module.conf.opensuse.13.2 b/remote/modules/cups/module.conf.opensuse.13.2
new file mode 100644
index 00000000..ebe832dd
--- /dev/null
+++ b/remote/modules/cups/module.conf.opensuse.13.2
@@ -0,0 +1,12 @@
+REQUIRED_INSTALLED_PACKAGES="
+ cups
+ cups-libs
+ cups-filters-foomatic-rip
+ ghostscript
+"
+REQUIRED_CONTENT_PACKAGES="
+ cups
+ cups-libs
+ cups-filters-foomatic-rip
+ ghostscript
+"
diff --git a/remote/modules/idleaction/data/opt/openslx/scripts/idleaction-cron_script b/remote/modules/idleaction/data/opt/openslx/scripts/idleaction-cron_script
index f034553c..ad74def0 100755
--- a/remote/modules/idleaction/data/opt/openslx/scripts/idleaction-cron_script
+++ b/remote/modules/idleaction/data/opt/openslx/scripts/idleaction-cron_script
@@ -11,7 +11,7 @@ NOW=$(date +%s)
#
# 1) Check for idle timeout
#
-if [ -n "${SLX_LOGOUT_TIMEOUT}" ]; then
+if [ -n "${SLX_LOGOUT_TIMEOUT}" ] && [ "${SLX_LOGOUT_TIMEOUT}" -gt 0 ]; then
# Logout timeout is set, see which users we should kick
IS_IDLE=yes
# get all sessions
@@ -84,7 +84,7 @@ fi
#
# 2) Check for no-session-shutdown timeout
#
-if [ -n "$SLX_SHUTDOWN_TIMEOUT" ] && [ -e "$IDLEHINT" ]; then
+if [ -n "${SLX_SHUTDOWN_TIMEOUT}" ] && [ "${SLX_SHUTDOWN_TIMEOUT}" -gt 0 ] && [ -e "$IDLEHINT" ]; then
IDLE=$(cat "$IDLEHINT")
[ "$IDLE" -gt "$NOW" ] && IDLE="$NOW"
IDLE=$(( $NOW - $IDLE ))
diff --git a/remote/modules/ncp/module.build b/remote/modules/ncp/module.build
new file mode 100644
index 00000000..d8250512
--- /dev/null
+++ b/remote/modules/ncp/module.build
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+fetch_source() {
+
+ # Distribution switch: Ubuntu 14.04 dropped packages ncpfs and libncp:
+ if [[ "$SYS_DISTRIBUTION" == "ubuntu" && "$SYS_VERSION" == "14.04" ]]; then
+ for file in $REQUIRED_DOWNLOAD_URLS; do
+ local package="$(basename $file)"
+ pinfo "Downloading and installing package $package ..."
+ download_if_empty "$file" "src/$package"
+ dpkg -i "src/$package" || perror "Could not install package $package."
+ done
+ fi
+}
+
+build() {
+ local COPYLIST="$MODULE_BUILD_DIR/list_packet_files"
+ # TODO: Hack for SUSE: Ignore file (/var/lib/nfs/state) that does not exist :(
+ list_packet_files | grep -v '/var/lib/nfs/state' | sort -u > "$COPYLIST"
+ tarcopy "$(cat "$COPYLIST")" "${MODULE_BUILD_DIR}"
+
+}
+
+post_copy() {
+ :
+}
diff --git a/remote/modules/ncp/module.conf b/remote/modules/ncp/module.conf
new file mode 100644
index 00000000..4ed03cdc
--- /dev/null
+++ b/remote/modules/ncp/module.conf
@@ -0,0 +1,8 @@
+REQUIRED_BINARIES="
+"
+REQUIRED_LIBRARIES="
+"
+REQUIRED_DIRECTORIES="
+"
+REQUIRED_SYSTEM_FILES="
+"
diff --git a/remote/modules/ncp/module.conf.debian b/remote/modules/ncp/module.conf.debian
new file mode 100644
index 00000000..fad69af5
--- /dev/null
+++ b/remote/modules/ncp/module.conf.debian
@@ -0,0 +1,26 @@
+REQUIRED_INSTALLED_PACKAGES="
+ ncpfs
+ libncp
+"
+REQUIRED_CONTENT_PACKAGES="
+ ncpfs
+ libncp
+"
+REQUIRED_BINARIES+="
+ nwmsg
+ ncpmount
+ ncpumount
+ mount.ncp
+ mount.ncpfs
+"
+REQUIRED_DIRECTORIES+="
+ /usr
+"
+
+# For Debian 8: Both packages were dropped from official repos. Do not change the
+# order, as these packages will be installed via dpkg and depend on each other.
+REQUIRED_DOWNLOAD_URLS="
+ ftp.acc.umu.se/mirror/cdimage/snapshot/Debian/pool/main/n/ncpfs/libpam-ncp_2.2.6-9_amd64.deb
+ ftp.acc.umu.se/mirror/cdimage/snapshot/Debian/pool/main/n/ncpfs/libncp_2.2.6-9_amd64.deb
+ ftp.acc.umu.se/mirror/cdimage/snapshot/Debian/pool/main/n/ncpfs/ncpfs_2.2.6-9_amd64.deb
+"
diff --git a/remote/modules/ncp/module.conf.ubuntu b/remote/modules/ncp/module.conf.ubuntu
new file mode 100644
index 00000000..c1914103
--- /dev/null
+++ b/remote/modules/ncp/module.conf.ubuntu
@@ -0,0 +1,17 @@
+REQUIRED_INSTALLED_PACKAGES="
+ ncpfs
+"
+REQUIRED_CONTENT_PACKAGES="
+ libncp
+ ncpfs
+"
+REQUIRED_BINARIES+="
+ nwmsg
+ ncpmount
+ ncpumount
+ mount.ncp
+ mount.ncpfs
+"
+REQUIRED_DIRECTORIES+="
+ /usr
+"
diff --git a/remote/modules/ncp/module.conf.ubuntu.14 b/remote/modules/ncp/module.conf.ubuntu.14
new file mode 100644
index 00000000..acb2f629
--- /dev/null
+++ b/remote/modules/ncp/module.conf.ubuntu.14
@@ -0,0 +1,24 @@
+REQUIRED_INSTALLED_PACKAGES="
+"
+REQUIRED_CONTENT_PACKAGES="
+ libncp
+ ncpfs
+"
+REQUIRED_BINARIES+="
+ nwmsg
+ ncpmount
+ ncpumount
+ mount.ncp
+ mount.ncpfs
+"
+REQUIRED_DIRECTORIES+="
+ /usr
+"
+
+# For Ubuntu 14.04: Both packages were dropped from official repos. Do not change the
+# order, as these packages will be installed via dpkg and depend on each other.
+REQUIRED_DOWNLOAD_URLS="
+ de.archive.ubuntu.com/ubuntu/pool/universe/n/ncpfs/libncp_2.2.6-9ubuntu1_amd64.deb
+ de.archive.ubuntu.com/ubuntu/pool/universe/n/ncpfs/libpam-ncp_2.2.6-9ubuntu1_amd64.deb
+ de.archive.ubuntu.com/ubuntu/pool/universe/n/ncpfs/ncpfs_2.2.6-9ubuntu1_amd64.deb
+"
diff --git a/remote/modules/netpoint-lightdm/data/etc/lightdm/lightdm.conf b/remote/modules/netpoint-lightdm/data/etc/lightdm/lightdm.conf
new file mode 100644
index 00000000..3e78eb50
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/etc/lightdm/lightdm.conf
@@ -0,0 +1,164 @@
+#
+# General configuration
+#
+# start-default-seat = True to always start one seat if none are defined in the configuration
+# greeter-user = User to run greeter as
+# minimum-display-number = Minimum display number to use for X servers
+# minimum-vt = First VT to run displays on
+# lock-memory = True to prevent memory from being paged to disk
+# user-authority-in-system-dir = True if session authority should be in the system location
+# guest-account-script = Script to be run to setup guest account
+# logind-check-graphical = True to on start seats that are marked as graphical by logind
+# log-directory = Directory to log information to
+# run-directory = Directory to put running state in
+# cache-directory = Directory to cache to
+# sessions-directory = Directory to find sessions
+# remote-sessions-directory = Directory to find remote sessions
+# greeters-directory = Directory to find greeters
+#
+[LightDM]
+#start-default-seat=true
+#greeter-user=lightdm
+#minimum-display-number=0
+minimum-vt=1
+#lock-memory=true
+#user-authority-in-system-dir=false
+guest-account-script=/usr/local/bin/guest-account
+#logind-check-graphical=false
+#log-directory=/var/log/lightdm
+run-directory=/run/lightdm
+#cache-directory=/var/cache/lightdm
+#sessions-directory=/usr/share/lightdm/sessions:/usr/share/xsessions
+#remote-sessions-directory=/usr/share/lightdm/remote-sessions
+
+greeters-directory=/usr/local/share/xgreeters:/usr/share/lightdm/greeters:/usr/share/xgreeters
+
+#
+# Seat defaults
+#
+# type = Seat type (xlocal, xremote)
+# pam-service = PAM service to use for login
+# pam-autologin-service = PAM service to use for autologin
+# pam-greeter-service = PAM service to use for greeters
+# xserver-command = X server command to run (can also contain arguments e.g. X -special-option)
+# xserver-layout = Layout to pass to X server
+# xserver-config = Config file to pass to X server
+# xserver-allow-tcp = True if TCP/IP connections are allowed to this X server
+# xserver-share = True if the X server is shared for both greeter and session
+# xserver-hostname = Hostname of X server (only for type=xremote)
+# xserver-display-number = Display number of X server (only for type=xremote)
+# xdmcp-manager = XDMCP manager to connect to (implies xserver-allow-tcp=true)
+# xdmcp-port = XDMCP UDP/IP port to communicate on
+# xdmcp-key = Authentication key to use for XDM-AUTHENTICATION-1 (stored in keys.conf)
+# unity-compositor-command = Unity compositor command to run (can also contain arguments e.g. unity-system-compositor -special-option)
+# unity-compositor-timeout = Number of seconds to wait for compositor to start
+# greeter-session = example-greeter
+# greeter-hide-users = True to hide the user list
+# greeter-allow-guest = True if the greeter should show a guest login option
+# greeter-show-manual-login = True if the greeter should offer a manual login option
+# greeter-show-remote-login = True if the greeter should offer a remote login option
+# user-session = Session to load for users
+# allow-user-switching = True if allowed to switch users
+# allow-guest = True if guest login is allowed
+# guest-session = Session to load for guests (overrides user-session)
+# session-wrapper = Wrapper script to run session with
+# greeter-wrapper = Wrapper script to run greeter with
+# guest-wrapper = Wrapper script to run guest sessions with
+# display-setup-script = Script to run when starting a greeter session (runs as root)
+# display-stopped-script = Script to run after stopping the display server (runs as root)
+# greeter-setup-script = Script to run when starting a greeter (runs as root)
+# session-setup-script = Script to run when starting a user session (runs as root)
+# session-cleanup-script = Script to run when quitting a user session (runs as root)
+# autologin-guest = True to log in as guest by default
+# autologin-user = User to log in with by default (overrides autologin-guest)
+# autologin-user-timeout = Number of seconds to wait before loading default user
+# autologin-session = Session to load for automatic login (overrides user-session)
+# autologin-in-background = True if autologin session should not be immediately activated
+# exit-on-failure = True if the daemon should exit if this seat fails
+#
+[SeatDefaults]
+#type=xlocal
+#pam-service=lightdm
+#pam-autologin-service=lightdm-autologin
+#pam-greeter-service=lightdm-greeter
+#xserver-command=X
+#xserver-layout=
+#xserver-config=
+#xserver-allow-tcp=false
+#xserver-share=true
+#xserver-hostname=
+#xserver-display-number=
+#xdmcp-manager=
+#xdmcp-port=177
+#xdmcp-key=
+#unity-compositor-command=unity-system-compositor
+#unity-compositor-timeout=60
+
+greeter-session=netpoint
+
+greeter-hide-users=false
+greeter-allow-guest=true
+#greeter-show-manual-login=false
+#greeter-show-remote-login=true
+#user-session=default
+#allow-user-switching=true
+allow-guest=true
+
+guest-session=/usr/bin/icewm
+
+# Keine Ahnung session-wrapper=/etc/lightdm/Xsession
+
+#greeter-wrapper=
+guest-wrapper=/usr/local/bin/guest-session
+#display-setup-script=
+#display-stopped-script=
+#greeter-setup-script=
+session-setup-script=/usr/local/bin/guest-setup
+session-cleanup-script=/usr/local/bin/guest-cleanup
+#autologin-guest=true
+#autologin-user=
+#autologin-user-timeout=0
+#autologin-in-background=false
+#autologin-session=UNIMPLEMENTED
+#exit-on-failure=false
+
+#
+# Seat configuration
+#
+# Each seat must start with "Seat:".
+# Uses settings from [SeatDefaults], any of these can be overriden by setting them in this section.
+#
+#[Seat:0]
+
+#
+# XDMCP Server configuration
+#
+# enabled = True if XDMCP connections should be allowed
+# port = UDP/IP port to listen for connections on
+# key = Authentication key to use for XDM-AUTHENTICATION-1 or blank to not use authentication (stored in keys.conf)
+#
+# The authentication key is a 56 bit DES key specified in hex as 0xnnnnnnnnnnnnnn. Alternatively
+# it can be a word and the first 7 characters are used as the key.
+#
+[XDMCPServer]
+#enabled=false
+#port=177
+#key=
+
+#
+# VNC Server configuration
+#
+# enabled = True if VNC connections should be allowed
+# command = Command to run Xvnc server with
+# port = TCP/IP port to listen for connections on
+# width = Width of display to use
+# height = Height of display to use
+# depth = Color depth of display to use
+#
+[VNCServer]
+#enabled=false
+#command=Xvnc
+#port=5900
+#width=1024
+#height=768
+#depth=8
diff --git a/remote/modules/netpoint-lightdm/data/etc/sysconfig/displaymanager b/remote/modules/netpoint-lightdm/data/etc/sysconfig/displaymanager
new file mode 100644
index 00000000..9a64a124
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/etc/sysconfig/displaymanager
@@ -0,0 +1,113 @@
+## Path: Desktop/Display manager
+## Type: string(Xorg)
+## Default: "Xorg"
+#
+DISPLAYMANAGER_XSERVER="Xorg"
+## Path: Desktop/Display manager
+## Description: settings to generate a proper displaymanager config
+
+## Type: string(kdm,xdm,gdm,wdm,entrance,console,lightdm,sddm)
+## Default: ""
+#
+# Here you can set the default Display manager (kdm/xdm/gdm/wdm/entrance/console).
+# all changes in this file require a restart of the displaymanager
+#
+# DISPLAYMANAGER="kdm"
+DISPLAYMANAGER="lightdm"
+
+## Type: yesno
+## Default: no
+#
+# Allow remote access (XDMCP) to your display manager (xdm/kdm/gdm). Please note
+# that a modified kdm or xdm configuration, e.g. by KDE control center
+# will not be changed. For gdm, values will be updated after change.
+# XDMCP service should run only on trusted networks and you have to disable
+# firewall for interfaces, where you want to provide this service.
+#
+DISPLAYMANAGER_REMOTE_ACCESS="no"
+
+## Type: yesno
+## Default: no
+#
+# Allow remote access of the user root to your display manager. Note
+# that root can never login if DISPLAYMANAGER_SHUTDOWN is "auto" and
+# System/Security/Permissions/PERMISSION_SECURITY is "paranoid"
+#
+DISPLAYMANAGER_ROOT_LOGIN_REMOTE="no"
+
+## Type: yesno
+## Default: yes
+#
+# Let the displaymanager start a local Xserver.
+# Set to "no" for remote-access only.
+# Set to "no" on architectures without any Xserver (e.g. s390/s390x).
+#
+DISPLAYMANAGER_STARTS_XSERVER="yes"
+
+## Type: yesno
+## Default: no
+#
+# TCP port 6000 of Xserver. When set to "no" (default) Xserver is
+# started with "-nolisten tcp". Only set this to "yes" if you really
+# need to. Remote X service should run only on trusted networks and
+# you have to disable firewall for interfaces, where you want to
+# provide this service. Use ssh X11 port forwarding whenever possible.
+#
+DISPLAYMANAGER_XSERVER_TCP_PORT_6000_OPEN="no"
+
+## Type: string
+## Default:
+#
+# Define the user whom should get logged in without request. If string
+# is empty, display standard login dialog.
+#
+DISPLAYMANAGER_AUTOLOGIN=""
+
+## Type: yesno
+## Default: no
+#
+# Allow all users to login without password, but ask for the user, if
+# DISPLAYMANAGER_AUTOLOGIN is empty.
+#
+DISPLAYMANAGER_PASSWORD_LESS_LOGIN="no"
+
+## Type: yesno
+## Default: no
+#
+# Display a combobox for Active Directory domains.
+#
+DISPLAYMANAGER_AD_INTEGRATION="no"
+
+## Type: list(root,all,none,auto)
+## Default: auto
+#
+# Determine who will be able to shutdown or reboot the system in kdm. Valid
+# values are: "root" (only root can shutdown), "all" (everybody can shutdown),
+# "none" (nobody can shutdown from displaymanager), "auto" (follow
+# System/Security/Permissions/PERMISSION_SECURITY to decide: "easy local" is
+# equal to "all", everything else is equal to "root"). gdm respects the
+# PolicyKit settings for ConsoleKit. Shutdown configuration can be done via
+# the polkit-default-privs mechanism.
+#
+DISPLAYMANAGER_SHUTDOWN="auto"
+## Path: Desktop/Display manager
+## Description: settings to generate a proper displaymanager config
+## Config: kdm
+
+## Type: string
+## Default:
+#
+# Defines extra Server Arguments given to the kdm display manager when
+# starting a local display. Useful to override e.g. the -dpi setting.
+#
+DISPLAYMANAGER_KDM_LOCALARGS=""
+
+## Type: yesno
+## Default: yes
+#
+# Allow local access of the user root to your display manager. Note
+# that root can never login if DISPLAYMANAGER_SHUTDOWN is "auto" and
+# System/Security/Permissions/PERMISSION_SECURITY is "paranoid".
+# This settings currently works only with KDM.
+#
+DISPLAYMANAGER_ROOT_LOGIN_LOCAL="yes"
diff --git a/remote/modules/netpoint-lightdm/data/etc/sysconfig/windowmanager b/remote/modules/netpoint-lightdm/data/etc/sysconfig/windowmanager
new file mode 100644
index 00000000..12120320
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/etc/sysconfig/windowmanager
@@ -0,0 +1,51 @@
+## Type: string
+## Default:
+## Path: Desktop
+## Description: default mouse cursor theme
+#
+# Name of mouse cursor theme for X11. Possible themes can be found
+# in /usr/share/icons/
+#
+X_MOUSE_CURSOR="DMZ"
+## Path: Desktop/Window manager
+## Description:
+## Type: string(gnome,kde4,kde,lxde,xfce,twm,icewm)
+## Default: kde4
+## Config: profiles,kde,susewm
+#
+# Here you can set the default window manager (kde, fvwm, ...)
+# changes here require at least a re-login
+# DEFAULT_WM="kde-plasma"
+DEFAULT_WM="xfce"
+
+## Type: yesno
+## Default: yes
+#
+# install the SuSE extension for new users
+# (theme and additional functions)
+#
+INSTALL_DESKTOP_EXTENSIONS="yes"
+## Path: Desktop
+## Description: prepare global sycoca database for faster first startup
+## Type: list(yes,initial,no)
+## Default: initial
+#
+# building a global sycoca database, which can be used at first user
+# login in KDE
+#
+KDE_BUILD_GLOBAL_SYCOCA="initial"
+
+## Type: yesno
+## Default: yes
+#
+# To disable IPv6 support within KDE. It might solve large timeouts due to
+# broken servers which claim to have IPv6 support, but do not respond.
+#
+KDE_USE_IPV6="yes"
+
+## Type: yesno
+## Default: yes
+#
+# IDN support can get disabled to avoid DNS phishing for example.
+#
+KDE_USE_IDN="yes"
diff --git a/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-account b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-account
new file mode 100644
index 00000000..3eed0efc
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-account
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+echo "demo"
diff --git a/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-cleanup b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-cleanup
new file mode 100755
index 00000000..32179cec
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-cleanup
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+IPTABLES=$(/usr/bin/which iptables)
+
+"$IPTABLES" -F
+"$IPTABLES" -P INPUT ACCEPT
+"$IPTABLES" -P FORWARD ACCEPT
+"$IPTABLES" -P OUTPUT ACCEPT
diff --git a/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-session b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-session
new file mode 100755
index 00000000..2c22a68c
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-session
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+exec /usr/bin/icewm &
+# exec /usr/bin/firefox
diff --git a/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-setup b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-setup
new file mode 100755
index 00000000..cb6791fc
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/usr/local/bin/guest-setup
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+IPTABLES=$(/usr/bin/which iptables)
+
+# reset
+"$IPTABLES" -F INPUT
+"$IPTABLES" -F FORWARD
+"$IPTABLES" -F OUTPUT
+
+if [ "x${USER}" = "xdemo" ]; then
+ # filter out the internetz
+ "$IPTABLES" -P INPUT DROP
+ "$IPTABLES" -P FORWARD DROP
+ "$IPTABLES" -P OUTPUT DROP
+
+ # block internetz
+ "$IPTABLES" -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
+ "$IPTABLES" -A OUTPUT -d 132.230.0.0/16 -j ACCEPT
+ "$IPTABLES" -A OUTPUT -d 10.0.0.0/8 -j ACCEPT
+else
+ "$IPTABLES" -P INPUT ACCEPT
+ "$IPTABLES" -P FORWARD ACCEPT
+ "$IPTABLES" -P OUTPUT ACCEPT
+
+fi
diff --git a/remote/modules/netpoint-lightdm/data/usr/local/bin/netpoint.py b/remote/modules/netpoint-lightdm/data/usr/local/bin/netpoint.py
new file mode 100755
index 00000000..635fb03f
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/usr/local/bin/netpoint.py
@@ -0,0 +1,215 @@
+#!/usr/bin/python
+#
+# 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 sys
+
+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
+message_label = None
+
+# 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())
+ else:
+ print >> sys.stderr, "Initial entry of username, send it to LightDM"
+ greeter.authenticate(user_username.get_text())
+
+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)
+ print >> sys.stderr, "Text: " + str(text)
+ # 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):
+ print >> sys.stderr, "In show_message"
+ print >> sys.stderr, text
+ message_label.set_text(text)
+ message_label.show()
+
+# 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():
+ # For our simple example we always start Unity-2d. The LightDM
+ # API has ways to query available sessions, please see the docs.
+ if not greeter.start_session_sync("xfce"):
+ print >> sys.stderr, "Failed to start session"
+ else:
+ print >> sys.stderr, "Login failed"
+ message_label.set_text("LOGIN FAILED")
+ message_label.show()
+
+if __name__ == '__main__':
+ print >> sys.stderr, "Starting up..."
+ main_loop = GObject.MainLoop ()
+ builder = Gtk.Builder()
+ greeter = LightDM.Greeter()
+ styler = Gtk.CssProvider()
+ css = open('/usr/local/share/lightdm/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("/usr/local/share/lightdm/netpoint.glade")
+
+ main = builder.get_object("main")
+ split = builder.get_object("split")
+ sep = builder.get_object("sep")
+ message_label = builder.get_object("message_label")
+ print >> sys.stderr, message_label
+ 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")
+ #pixbuf = guest_image.get_pixbuf()
+ #pixbuf = pixbuf.scale_simple(pixbuf.get_width() * 0.7, pixbuf.get_height() * 0.7, InterpType.HYPER)
+ #guest_image.set_from_pixbuf(pixbuf)
+ #pixbuf = login_image.get_pixbuf()
+ #pixbuf = pixbuf.scale_simple(pixbuf.get_width() * 0.7, pixbuf.get_height() * 0.7, InterpType.HYPER)
+ #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")
+
+ # connect signals to Gtk UI
+ builder.connect_signals(handlers)
+
+ # connect to greeter
+ greeter.connect_sync()
+
+ message_label.hide()
+
+ # setup the GUI
+ main.set_decorated(True)
+ main.get_root_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.ARROW))
+ 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())
+
+ #print >> sys.stderr, guest_box.get_height()
+ #print >> sys.stderr, guest_box.get_width()
+ main_loop.run ()
diff --git a/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/ff-google-smaller.png b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/ff-google-smaller.png
new file mode 100644
index 00000000..f3b81c32
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/ff-google-smaller.png
Binary files differ
diff --git a/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/ff-rz-smaller.png b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/ff-rz-smaller.png
new file mode 100644
index 00000000..f6e4703d
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/ff-rz-smaller.png
Binary files differ
diff --git a/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/netpoint.css b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/netpoint.css
new file mode 100644
index 00000000..7f1f80af
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/netpoint.css
@@ -0,0 +1,16 @@
+#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/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/netpoint.glade b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/netpoint.glade
new file mode 100644
index 00000000..e2e47416
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/usr/local/share/lightdm/netpoint.glade
@@ -0,0 +1,365 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.3 -->
+<interface>
+ <requires lib="gtk+" version="3.12"/>
+ <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">Netpoint 0.1</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="guest_box">
+ <property name="name">guestbox</property>
+ <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">Uni-interner Browser</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">Im Gastmodus können Sie nur auf universitätsinterne Webseiten zugreifen.</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">Surfen als Gast</property>
+ <property name="use_action_appearance">False</property>
+ <property name="related_action"/>
+ <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="margin_left">10</property>
+ <property name="margin_right">10</property>
+ <property name="margin_top">10</property>
+ <property name="margin_bottom">10</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="pixbuf">ff-rz-smaller.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">Internet Browser</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, um auch im Internet zu surfen.</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="GtkBox" id="box1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">center</property>
+ <property name="orientation">vertical</property>
+ <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>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="message_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" comments="This is a placeholder string and will be replaced with a message from PAM">[message]</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">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="margin_left">10</property>
+ <property name="margin_right">10</property>
+ <property name="margin_top">10</property>
+ <property name="margin_bottom">10</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="pixbuf">ff-google-smaller.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/remote/modules/netpoint-lightdm/data/usr/local/share/xgreeters/netpoint.desktop b/remote/modules/netpoint-lightdm/data/usr/local/share/xgreeters/netpoint.desktop
new file mode 100644
index 00000000..f03cf498
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/data/usr/local/share/xgreeters/netpoint.desktop
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Name=Netpoint Grita
+Comment=Netpoint Grita
+Exec=/usr/local/bin/netpoint.py
+Type=Application
diff --git a/remote/modules/netpoint-lightdm/module.build b/remote/modules/netpoint-lightdm/module.build
new file mode 100644
index 00000000..0c891489
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/module.build
@@ -0,0 +1,15 @@
+fetch_source() {
+ :
+}
+
+build() {
+ COPYLIST="list_dpkg_output"
+ [ -e "$COPYLIST" ] && rm "$COPYLIST"
+
+ list_packet_files >> "$COPYLIST"
+ tarcopy "$(cat "$COPYLIST" | sort -u)" "${MODULE_BUILD_DIR}"
+}
+
+post_copy() {
+ :
+}
diff --git a/remote/modules/netpoint-lightdm/module.conf b/remote/modules/netpoint-lightdm/module.conf
new file mode 100644
index 00000000..0cd03752
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/module.conf
@@ -0,0 +1,3 @@
+REQUIRED_BINARIES=""
+REQUIRED_LIBRARIES=""
+REQUIRED_DIRECTORIES=""
diff --git a/remote/modules/netpoint-lightdm/module.conf.opensuse.13.2 b/remote/modules/netpoint-lightdm/module.conf.opensuse.13.2
new file mode 100644
index 00000000..d62f9063
--- /dev/null
+++ b/remote/modules/netpoint-lightdm/module.conf.opensuse.13.2
@@ -0,0 +1,36 @@
+REQUIRED_INSTALLED_PACKAGES="
+ lightdm
+ lightdm-gtk-greeter
+ lightdm-gobject-devel
+ typelib-1_0-LightDM-1
+ liblightdm-gobject-1-0
+ python-gobject
+ icewm-lite
+ icewm-default
+ python-base
+ python-gobject2
+"
+
+REQUIRED_CONTENT_PACKAGES="
+ lightdm
+ lightdm-gtk-greeter
+ lightdm-gobject-devel
+ typelib-1_0-LightDM-1
+ liblightdm-gobject-1-0
+ python-gobject
+ icewm-lite
+ icewm-default
+ python-base
+ python-gobject2
+"
+
+REQUIRED_BINARIES+="
+ icewm
+ lightdm
+ python
+ lightdm-gtk-greeter
+"
+
+REQUIRED_DIRECTORIES+="
+ /usr/lib64/python2.7
+"
diff --git a/remote/modules/nscd/data/etc/nscd.conf b/remote/modules/nscd/data/etc/nscd.conf
index c4e23686..8eac1354 100644
--- a/remote/modules/nscd/data/etc/nscd.conf
+++ b/remote/modules/nscd/data/etc/nscd.conf
@@ -40,7 +40,7 @@
paranoia no
# restart-interval 3600
- enable-cache passwd yes
+ enable-cache passwd no
positive-time-to-live passwd 600
negative-time-to-live passwd 20
suggested-size passwd 211
@@ -50,7 +50,7 @@
max-db-size passwd 33554432
auto-propagate passwd yes
- enable-cache group yes
+ enable-cache group no
positive-time-to-live group 3600
negative-time-to-live group 60
suggested-size group 211
@@ -69,7 +69,7 @@
shared hosts yes
max-db-size hosts 33554432
- enable-cache services yes
+ enable-cache services no
positive-time-to-live services 28800
negative-time-to-live services 20
suggested-size services 211
diff --git a/remote/modules/nslcd/module.build b/remote/modules/nslcd/module.build
new file mode 100644
index 00000000..aa1b3915
--- /dev/null
+++ b/remote/modules/nslcd/module.build
@@ -0,0 +1,42 @@
+#!/bin/bash
+
+fetch_source() {
+ if [ -n "$REQUIRED_NSS_LDAPD_URL" ]; then
+ pinfo "Downloading $REQUIRED_NSS_LDAPD_URL ..."
+ download_untar "$REQUIRED_NSS_LDAPD_URL" "src/"
+ fi
+}
+
+build() {
+
+ COPYLIST="list_dpkg_output"
+ [ -e "$COPYLIST" ] && rm "$COPYLIST"
+
+ list_packet_files >> "$COPYLIST"
+ tarcopy "$(cat "$COPYLIST" | sort -u)" "${MODULE_BUILD_DIR}"
+
+ # OpenSuSE 13.1 has no 'nss-pam-ldapd'. Let's compile
+ if [ -n "$REQUIRED_NSS_LDAPD_URL" ]; then
+ cd "${MODULE_DIR}/src/$REQUIRED_NSS_LDAPD_VERSION"
+ pinfo "compiling pam-nss-ldapd for openSuse 13.1 ..."
+ ./configure || perror "openSuse 13.1 - pam-nss-ldapd: ./configure failed."
+ make DESTDIR="${MODULE_BUILD_DIR}" install || perror "openSuse 13.1 - pam-nss-ldapd: make install to ${MODULE_BUILD_DIR} failed."
+ cd "$MODULE_BUILD_DIR"
+ local NSLCD_PATH=$(find . -executable -name "nslcd") # Not in path, so we 'find' below MODULE_BUILD_DIR
+ else
+ cd "$MODULE_BUILD_DIR"
+ local NSLCD_PATH=$(which nslcd)
+ fi
+ [[ $REQUIRED_BINARIES = *nslcd* ]] && [ -z "$NSLCD_PATH" ] && perror "Could not 'which nslcd'"
+
+
+ # Build nslcd service file
+ mkdir -p "${MODULE_BUILD_DIR}/etc/systemd/system"
+ sed "s,%PATH%,${NSLCD_PATH},g" "${MODULE_DIR}/templates/nslcd-systemd.service" > "${MODULE_BUILD_DIR}/etc/systemd/system/nslcd.service" || perror "Could not fill nslcd.service template"
+
+ return 0
+}
+
+post_copy() {
+ :
+}
diff --git a/remote/modules/nslcd/module.conf b/remote/modules/nslcd/module.conf
new file mode 100644
index 00000000..7dae2ba1
--- /dev/null
+++ b/remote/modules/nslcd/module.conf
@@ -0,0 +1,6 @@
+REQUIRED_BINARIES="
+ nslcd
+"
+REQUIRED_FILES="
+ /etc/systemd/system/nslcd.service
+"
diff --git a/remote/modules/nslcd/module.conf.debian b/remote/modules/nslcd/module.conf.debian
new file mode 100644
index 00000000..3d83fc81
--- /dev/null
+++ b/remote/modules/nslcd/module.conf.debian
@@ -0,0 +1,6 @@
+REQUIRED_INSTALLED_PACKAGES="
+ nslcd
+"
+REQUIRED_CONTENT_PACKAGES="
+ nslcd
+"
diff --git a/remote/modules/nslcd/module.conf.ubuntu b/remote/modules/nslcd/module.conf.ubuntu
new file mode 100644
index 00000000..3d83fc81
--- /dev/null
+++ b/remote/modules/nslcd/module.conf.ubuntu
@@ -0,0 +1,6 @@
+REQUIRED_INSTALLED_PACKAGES="
+ nslcd
+"
+REQUIRED_CONTENT_PACKAGES="
+ nslcd
+"
diff --git a/remote/modules/pam/templates/nslcd-systemd.service b/remote/modules/nslcd/templates/nslcd-systemd.service
index 540e67cd..540e67cd 100644
--- a/remote/modules/pam/templates/nslcd-systemd.service
+++ b/remote/modules/nslcd/templates/nslcd-systemd.service
diff --git a/remote/modules/pam-common-share/data/opt/openslx/scripts/pam_script_mount_common_share b/remote/modules/pam-common-share/data/opt/openslx/scripts/pam_script_mount_common_share
index 85a3fcc0..670943f4 100644
--- a/remote/modules/pam-common-share/data/opt/openslx/scripts/pam_script_mount_common_share
+++ b/remote/modules/pam-common-share/data/opt/openslx/scripts/pam_script_mount_common_share
@@ -1,36 +1,41 @@
###################################################################
#
-# This script is a part of the pam_script_auth script
-# and is not stand-alone!
+# This script is a part of the pam_script_auth script
+# and is not stand-alone!
#
-# It will try to mount the common shares specified in the
-# variables of the global slx config '/opt/openslx/config'.
-# A primary and a secondary share may be given. Every share
-# require following bundle of variables:
+# It will try to mount the common shares specified in the
+# variables of the global slx config '/opt/openslx/config'.
+# An arbitrary number of shares may be given. Every share
+# requires following bundle of variables:
#
#
-# SLX_SHARE_[0-9]_AUTH_TYPE [guest|user|pam]
-# SLX_SHARE_[0-9]_AUTH_USER <username>
-# SLX_SHARE_[0-9]_AUTH_PASS <password>
-# SLX_SHARE_[0-9]_PERM [ro|rw]
-# SLX_SHARE_[0-9]_PATH <path_to_share>
+# SLX_SHARE_<id>_AUTH_TYPE [guest|user|pam]
+# SLX_SHARE_<id>_AUTH_USER <username>
+# SLX_SHARE_<id>_AUTH_PASS <password>
+# SLX_SHARE_<id>_PERM [ro|rw]
+# SLX_SHARE_<id>_PATH <path_to_share>
#
-# Example:
-# SLX_SHARE_0_PATH='//windows.server/sharename'
-# SLX_SHARE_0_AUTH_TYPE='user'
-# SLX_SHARE_0_AUTH_USER='shareuser'
-# SLX_SHARE_0_AUTH_PASS='sharepass'
-# SLX_SHARE_0_PERM='rw'
+# Note: <id> is the identifier of the share.
#
-# Note: When AUTH_TYPE is set to 'pam' or 'guest',
-# no need to specify AUTH_USER or AUTH_PASS.
+# Example:
+# SLX_SHARE_0_PATH='//windows.server/sharename'
+# SLX_SHARE_0_AUTH_TYPE='user'
+# SLX_SHARE_0_AUTH_USER='shareuser'
+# SLX_SHARE_0_AUTH_PASS='sharepass'
+# SLX_SHARE_0_PERM='rw'
#
+# Note: If AUTH_TYPE is set to 'pam' or 'guest', then
+# there is no need to specify AUTH_USER or AUTH_PASS
+# as it is obviously not needed.
#
-# usage: mount_share <auth_type> <auth_user> <auth_password> <permissions> <path> <share>
+###################################################################
+#
+# Internal helper function to mount a share
+# usage: mount_share <auth_type> <auth_user> <auth_password> <permissions> <path> <share_number>
mount_share() {
- # only want two arguments
+ # since we are (hopefully) the only one using this function, we know we need excatly 6 args
[ $# -ne 6 ] && { slxlog "pam-share-args" "Wrong number of arguments given! Need 6, $# given."; return; }
-
+
# lets check if we have our variables
local SHARE_AUTH_TYPE="$1"
local SHARE_AUTH_USER="$2"
@@ -43,17 +48,12 @@ mount_share() {
[ "x${SHARE_PERM}" != "xrw" ] && SHARE_PERM='ro'
# all good: now we can mount depending on the type
- # supports: cifs?/nfs?
+ # supports: cifs?/nfs?
if [ "${SHARE_PATH:0:2}" = "//" ]; then
# '//' prefixed, assume windows share
# prepare common mount options for either authentication type
MOUNT_OPTS="-t cifs -o nounix,uid=${USER_UID},gid=${USER_GID},forceuid,forcegid,nobrl,noacl,$SHARE_PERM"
- # flag for failure
- SIGNAL=$(mktemp)
- rm -f -- "${SIGNAL}"
- # output of command
- MOUNT_OUTPUT=$(mktemp)
# now construct the mount options depending on the type of the share.
if [ "${SHARE_AUTH_TYPE}" = "guest" ]; then
MOUNT_OPTS="${MOUNT_OPTS},guest,file_mode=0777,dir_mode=0777"
@@ -73,40 +73,68 @@ mount_share() {
slxlog "pam-share-auth" "Share${SHARE_NUM}: Auth type '${SHARE_AUTH_TYPE}' not supported."
return;
fi
+ else
+ # for now assume NFS-Share, start build options string with default options for all shares
+ MOUNT_OPTS="-t nfs -o async,nolock"
+
+ # TODO: here we will have to evaluate options of NFS-shares
- # we just mount it to the directory with the same name as the
- # last directory in the path name of the share
- # e.g. //windows.net/lehrpool -> ${COMMON_SHARE_MOUNT_POINT}/lehrpool
- local TARGET_DIR="${COMMON_SHARE_MOUNT_POINT}/$(basename ${SHARE_PATH})"
- # it exists, so let's create ${COMMON_SHARE_MOUNT_POINT}/lehrpool_${SHARE_NUM}
- [ -d "${TARGET_DIR}" ] && TARGET_DIR="${TARGET_DIR}_${SHARE_NUM}"
+ # unless specified otherwise, mount the share read-only
+ [ "x${SHARE_PERM}" != "xrw" ] && SHARE_PERM='ro'
+ MOUNT_OPTS="${MOUNT_OPTS},${SHARE_PERM}"
+ fi
- # at this point is TARGET_DIR pointing to the right directory.
- mkdir -p "${TARGET_DIR}" || \
- { slxlog "pam-share-mkdirfail" "Share${SHARE_NUM}: Could not create directory '${TARGET_DIR}'. Skipping share."; return; }
- # now try to mount it
- ( mount ${MOUNT_OPTS} "${SHARE_PATH}" "${TARGET_DIR}" > "${MOUNT_OUTPUT}" 2>&1 || touch "${SIGNAL}" ) &
- MOUNT_PID=$!
- for COUNTER in 1 1 2 4; do
- kill -0 "${MOUNT_PID}" 2>/dev/null || break
- sleep "${COUNTER}"
- done
+ ############################################################################
+ #
+ # Following code is independent of the type of share.
+ # The variable MOUNT_OPTS should have been set correctly
+ # up to this point.
+ #
+ ############################################################################
- # check for failures
- if [ -e "${SIGNAL}" ]; then
- slxlog "pam-share-mount" "Mount of '${SHARE_PATH}' to '${TARGET_DIR}' failed. (Args: ${MOUNT_OPTS}" "${MOUNT_OUTPUT}"
- rm -f -- "${SIGNAL}"
- elif kill -9 "${MOUNT_PID}" 2>/dev/null; then
- slxlog "pam-share-mount" "Mount of '${SHARE_PATH}' to '${TARGET_DIR}' timed out. (Args: ${MOUNT_OPTS}" "${MOUNT_OUTPUT}"
- fi
- ( sleep 2; rm -f -- "${MOUNT_OUTPUT}" ) &
+ # we just mount it to the directory with the same name as the
+ # last directory in the path name of the share
+ # e.g. //windows.net/lehrpool -> ${COMMON_SHARE_MOUNT_POINT}/lehrpool
+ local TARGET_DIR="${COMMON_SHARE_MOUNT_POINT}/$(basename ${SHARE_PATH})"
+ # it exists, so let's create ${COMMON_SHARE_MOUNT_POINT}/lehrpool_${SHARE_NUM}
+ [ -d "${TARGET_DIR}" ] && TARGET_DIR="${TARGET_DIR}_${SHARE_NUM}"
+
+ # at this point is TARGET_DIR pointing to the right directory.
+ mkdir -p "${TARGET_DIR}" || \
+ { slxlog "pam-share-mkdirfail" "Share${SHARE_NUM}: Could not create directory '${TARGET_DIR}'. Skipping share."; return; }
- # always unset credentials
- unset USER
- unset PASSWD
+ # flag for failure
+ SIGNAL=$(mktemp)
+ rm -f -- "${SIGNAL}"
+ # output of command
+ MOUNT_OUTPUT=$(mktemp)
+ # now try to mount it
+ ( mount ${MOUNT_OPTS} "${SHARE_PATH}" "${TARGET_DIR}" > "${MOUNT_OUTPUT}" 2>&1 || touch "${SIGNAL}" ) &
+ MOUNT_PID=$!
+ for COUNTER in 1 1 2 4; do
+ kill -0 "${MOUNT_PID}" 2>/dev/null || break
+ sleep "${COUNTER}"
+ done
+
+ # check for failures
+ if [ -e "${SIGNAL}" ]; then
+ slxlog "pam-share-mount" "Mount of '${SHARE_PATH}' to '${TARGET_DIR}' failed. (Args: ${MOUNT_OPTS}" "${MOUNT_OUTPUT}"
+ rm -f -- "${SIGNAL}"
+ elif kill -9 "${MOUNT_PID}" 2>/dev/null; then
+ slxlog "pam-share-mount" "Mount of '${SHARE_PATH}' to '${TARGET_DIR}' timed out. (Args: ${MOUNT_OPTS}" "${MOUNT_OUTPUT}"
fi
+ ( sleep 2; rm -f -- "${MOUNT_OUTPUT}" ) &
+
+ # always unset credentials
+ unset USER
+ unset PASSWD
}
+############################################################################
+#
+# MAIN LOGIC OVER ALL SHARES
+#
+############################################################################
# at this point we need the slx config to do anything
[ -e "/opt/openslx/config" ] || \
{ slxlog "pam-share-noconfig" "File '/opt/openslx/config' not found."; return; }
@@ -115,28 +143,40 @@ mount_share() {
. /opt/openslx/config || \
{ slxlog "pam-share-sourceconfig" "Could not source '/opt/openslx/config'."; return; }
+#
+#
+#
# Since many shares can be specified, we need to identify how many we have first.
-# We just go over all SLX_SHARE_* variables and check for those ending in _PATH
+# We just go over all SLX_SHARE_* variables and check for those ending in _PATH.
+# So e.g. for SLX_SHARE_0_PATH=<path> the SHARE variable would be equal to 'SLX_SHARE_0_PATH'
# For each of those, a share was specified and we will try to mount it.
-for SHARE in ${!SLX_SHARE_*}; do
- # skip if the variable doesn't end in _PATH
- [[ "$SHARE" =~ .*_PATH$ ]] || continue
- # first let's check if we have already mounted it, since we don't have to
- # do anything is it already is.
- if mount | grep -q "${SHARE}"; then
- # already mounted, just skip.
+for SHARE in $(grep -E '^SLX_SHARE_[0-9]+_PATH=.*$' /opt/openslx/config); do
+ # first let's check if we have already mounted it and skip if it is
+ # TODO: this should be good enough? stronger checks?
+ if mount | grep -q "$(echo ${SHARE} | awk -F '=' '{print $2}' | tr -d \'\")"; then
+ # already mounted, just skip
+ # this should not happen anyway, since the pam_script_auth script also exits
+ # if the temporary home user directory is already mounted...
continue
fi
- # ok so we have a path in $SHARE, let's extract the number of the share
+ # ok so we have the full declaration command in $SHARE,
+ # let's extract the number of the share.
# i.e. SLX_SHARE_0_PATH -> share number 0
- # first strip the leading SLX_SHARE_
- SHARE=${SHARE#SLX_SHARE_}
+ # first just cut everything after '='
+ SHARE_ID="$(echo $SHARE | awk -F '=' '{print $1}')"
+ # now strip the leading SLX_SHARE_
+ SHARE_ID=${SHARE_ID#SLX_SHARE_}
# now remove the trailing _PATH
- SHARE=${SHARE%_PATH}
+ SHARE_ID=${SHARE_ID%_PATH}
# now it should be a number, TODO accept more than numbers? Doesn't really matter...
# this check is mostly to be sure that the variable splitting worked as it should
- [[ "$SHARE" =~ ^[0-9]+$ ]] || continue
- eval mount_share \""\$SLX_SHARE_${SHARE}_AUTH_TYPE"\" \""\$SLX_SHARE_${SHARE}_AUTH_USER"\" \""\$SLX_SHARE_${SHARE}_AUTH_PASS"\" \""\$SLX_SHARE_${SHARE}_PERM"\" \""\$SLX_SHARE_${SHARE}_PATH"\" \""$SHARE"\"
+ # ugly cause we need to be ash compatible ...
+ if ! echo "${SHARE_ID}" | grep -q -E '^[0-9]+$'; then
+ continue
+ fi
+
+ # now do try to mount the share using the helper function defined on the top of this script
+ eval mount_share \""\$SLX_SHARE_${SHARE_ID}_AUTH_TYPE"\" \""\$SLX_SHARE_${SHARE_ID}_AUTH_USER"\" \""\$SLX_SHARE_${SHARE_ID}_AUTH_PASS"\" \""\$SLX_SHARE_${SHARE_ID}_PERM"\" \""\$SLX_SHARE_${SHARE_ID}_PATH"\" \""$SHARE_ID"\"
## unset USER and PASSWD just in case mount_share returned due to an error.
unset USER
unset PASSWD
diff --git a/remote/modules/pam/data/etc/pam.d/common-session-noninteractive b/remote/modules/pam/data/etc/pam.d/common-session-noninteractive
index d9bf071c..5e0fe3f8 100644
--- a/remote/modules/pam/data/etc/pam.d/common-session-noninteractive
+++ b/remote/modules/pam/data/etc/pam.d/common-session-noninteractive
@@ -26,5 +26,6 @@ session required pam_permit.so
# See "man pam_umask".
session optional pam_umask.so
# and here are more per-package modules (the "Additional" block)
+session [success=1 default=ignore] pam_succeed_if.so service in sudo quiet use_uid
session required pam_unix.so
# end of pam-auth-update config
diff --git a/remote/modules/pam/data/opt/openslx/scripts/pam_script_auth b/remote/modules/pam/data/opt/openslx/scripts/pam_script_auth
index 3b8bf676..f9636ced 100755
--- a/remote/modules/pam/data/opt/openslx/scripts/pam_script_auth
+++ b/remote/modules/pam/data/opt/openslx/scripts/pam_script_auth
@@ -105,7 +105,7 @@ chown "${PAM_USER}:${USER_GID}" "${COMMON_SHARE_MOUNT_POINT}" || \
[ ! -e "${COMMON_SHARE_MOUNT_SCRIPT}" ] && exit 0
# we do!
-COMMON_SHARE_MOUNT_POINT="${COMMON_SHARE_MOUNT_POINT}" PAM_USER="${PAM_USER}" PAM_AUTHTOK="${PAM_AUTHTOK}" USER_UID="${USER_UID}" USER_GID="${USER_GID}" /bin/bash "${COMMON_SHARE_MOUNT_SCRIPT}" || \
+COMMON_SHARE_MOUNT_POINT="${COMMON_SHARE_MOUNT_POINT}" PAM_USER="${PAM_USER}" PAM_AUTHTOK="${PAM_AUTHTOK}" USER_UID="${USER_UID}" USER_GID="${USER_GID}" /bin/ash "${COMMON_SHARE_MOUNT_SCRIPT}" || \
{ slxlog "pam-global-sourceshare" "Could not source '${COMMON_SHARE_MOUNT_SCRIPT}'."; exit 1; }
# Just try to delete the common share dir. If the mount was successful, it will not work
diff --git a/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close b/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close
index 4fc2ce6a..9332e0a6 100755
--- a/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close
+++ b/remote/modules/pam/data/opt/openslx/scripts/pam_script_ses_close
@@ -26,7 +26,7 @@ if [ -d "/opt/openslx/scripts/pam_script_ses_close.d" ]; then
done
fi
-OPENSESSION=$(loginctl show-user "$PAM_USER" | grep "Sessions=" | cut -c 10-)
+OPENSESSION=$(loginctl show-user "$PAM_USER" 2>/dev/null| grep "Sessions=" | cut -c 10-)
SESSIONCOUNT=$(echo "$OPENSESSION" | wc -w)
# When using su/sudo there is no session created, so count up by one
if [ "x$PAM_SERVICE" = "xsu" -o "x$PAM_SERVICE" = "xsudo" ]; then
@@ -55,7 +55,7 @@ if [ "$SESSIONCOUNT" -le "1" ]; then
done
# just to be sure we check if there's no other open session in the meantime
- OPEN2=$(loginctl show-user "$PAM_USER" | grep "Sessions=" | cut -c 10-)
+ OPEN2=$(loginctl show-user "$PAM_USER" 2>/dev/null | grep "Sessions=" | cut -c 10-)
if [ -z "$OPEN2" -o "x$OPENSESSION" = "x$OPEN2" ]; then
diff --git a/remote/modules/pam/module.build b/remote/modules/pam/module.build
index b678fdd6..5c3dc8db 100644
--- a/remote/modules/pam/module.build
+++ b/remote/modules/pam/module.build
@@ -33,24 +33,6 @@ build() {
cd "${MODULE_DIR}/src/pam-script-${REQUIRED_PAM_SCRIPT_VERSION}" || perror "Could not cd to ${MODULE_DIR}/src/pam-script-${REQUIRED_PAM_SCRIPT_VERSION}."
./configure --prefix=/ --sysconfdir=/etc/pam-script --libdir="$SYS_PAM_MODULES_PATH" || perror "pam-script: ./configure failed."
make DESTDIR="${MODULE_BUILD_DIR}" install || perror "pam-script: make install to ${MODULE_BUILD_DIR} failed."
-
-
- # openSuse 13.1 has no package nss-pam-ldapd. So, we compile it.
- if [ -n "$REQUIRED_NSS_LDAPD_URL" ]; then
- cd "${MODULE_DIR}/src/$REQUIRED_NSS_LDAPD_VERSION"
- pinfo "compiling pam-nss-ldapd for openSuse 13.1 ..."
- ./configure || perror "openSuse 13.1 - pam-nss-ldapd: ./configure failed."
- make DESTDIR="${MODULE_BUILD_DIR}" install || perror "openSuse 13.1 - pam-nss-ldapd: make install to ${MODULE_BUILD_DIR} failed."
- cd "$MODULE_BUILD_DIR"
- local NSLCD_PATH=$(find . -executable -name "nslcd") # Not in path, so we 'find' below MODULE_BUILD_DIR
- else
- cd "$MODULE_BUILD_DIR"
- local NSLCD_PATH=$(which nslcd)
- fi
- [[ $REQUIRED_BINARIES = *nslcd* ]] && [ -z "$NSLCD_PATH" ] && perror "Could not 'which nslcd'"
- # Build nslcd service file
- mkdir -p "etc/systemd/system"
- sed "s,%PATH%,$NSLCD_PATH,g" "$MODULE_DIR/templates/nslcd-systemd.service" > "etc/systemd/system/nslcd.service" || perror "Could not fill nslcd.service template"
}
post_copy() {
diff --git a/remote/modules/pam/module.conf b/remote/modules/pam/module.conf
index c0a21a79..4e2e01a1 100644
--- a/remote/modules/pam/module.conf
+++ b/remote/modules/pam/module.conf
@@ -1,6 +1,5 @@
REQUIRED_BINARIES="
ldapsearch
- nslcd
rpc.gssd
rpc.idmapd
sslconnect
@@ -15,9 +14,6 @@ REQUIRED_LIBRARIES="
REQUIRED_DIRECTORIES="
/etc/security
"
-REQUIRED_FILES="
- /etc/systemd/system/nslcd.service
-"
REQUIRED_SYSTEM_FILES="
/etc/login.defs
/etc/securetty
diff --git a/remote/modules/pam/module.conf.debian b/remote/modules/pam/module.conf.debian
index be237be2..e6661476 100644
--- a/remote/modules/pam/module.conf.debian
+++ b/remote/modules/pam/module.conf.debian
@@ -1,7 +1,6 @@
REQUIRED_INSTALLED_PACKAGES="
libpam-ldap
libnss-ldapd
- nslcd
libpam-ck-connector
libpam-cap
krb5-user
@@ -22,7 +21,6 @@ REQUIRED_CONTENT_PACKAGES="
libldap-2.4-2
libpam-ldapd
libnss-ldapd
- nslcd
krb5-user
krb5-config
libpam-krb5
diff --git a/remote/modules/pam/module.conf.opensuse.13.2 b/remote/modules/pam/module.conf.opensuse.13.2
new file mode 100644
index 00000000..d4435999
--- /dev/null
+++ b/remote/modules/pam/module.conf.opensuse.13.2
@@ -0,0 +1,48 @@
+REQUIRED_NSS_LDAPD_VERSION="nss-pam-ldapd-0.8.13"
+REQUIRED_NSS_LDAPD_URL="http://arthurdejong.org/nss-pam-ldapd/$REQUIRED_NSS_LDAPD_VERSION.tar.gz"
+
+REQUIRED_BINARIES+="
+ mkhomedir_helper
+"
+
+REQUIRED_INSTALLED_PACKAGES="
+ pam
+ pam_krb5
+ pam-devel
+ pam-modules
+ nss-mdns
+ libopenssl-devel
+ openldap2-client
+ nfsidmap
+ nfs-client
+ glibc
+ pam-devel
+ openldap2-devel
+ krb5-devel
+"
+REQUIRED_CONTENT_PACKAGES="
+ pam
+ pam_krb5
+ pam-devel
+ pam-modules
+ nss-mdns
+ openldap2-client
+ nfsidmap
+ nfs-client
+ glibc
+"
+REQUIRED_LIBRARIES+="
+ libnss_compat
+ libnss_db
+ libnss_dns
+ libnss_files
+ libnss_nis
+"
+REQUIRED_DIRECTORIES+="
+ /$LIB64
+ /usr/$LIB64
+"
+REQUIRED_SYSTEM_FILES+="
+ /$LIB64/security
+"
+
diff --git a/remote/modules/pam/module.conf.ubuntu b/remote/modules/pam/module.conf.ubuntu
index 4a3635fc..d675116c 100644
--- a/remote/modules/pam/module.conf.ubuntu
+++ b/remote/modules/pam/module.conf.ubuntu
@@ -1,7 +1,6 @@
REQUIRED_INSTALLED_PACKAGES="
libpam-ldap
libnss-ldapd
- nslcd
krb5-user
krb5-config
libpam-krb5
@@ -20,7 +19,6 @@ REQUIRED_CONTENT_PACKAGES="
libldap-2.4-2
libpam-ldap
libnss-ldapd
- nslcd
krb5-user
krb5-config
libpam-krb5
diff --git a/remote/modules/pam/module.conf.ubuntu.14 b/remote/modules/pam/module.conf.ubuntu.14
index 26307d84..64ead96a 100644
--- a/remote/modules/pam/module.conf.ubuntu.14
+++ b/remote/modules/pam/module.conf.ubuntu.14
@@ -2,7 +2,6 @@
REQUIRED_INSTALLED_PACKAGES="
libpam-ldap
libnss-ldapd
- nslcd
krb5-user
krb5-config
libpam-krb5
@@ -20,7 +19,6 @@ REQUIRED_CONTENT_PACKAGES="
libldap-2.4-2
libpam-ldap
libnss-ldapd
- nslcd
krb5-user
krb5-config
libpam-krb5
@@ -28,14 +26,8 @@ REQUIRED_CONTENT_PACKAGES="
libnfsidmap2
nfs-common
cifs-utils
- ncpfs
"
REQUIRED_BINARIES+="
- nwmsg
- ncpmount
- ncpumount
- mount.ncp
- mount.ncpfs
mount.cifs
"
REQUIRED_DIRECTORIES+="
@@ -47,11 +39,3 @@ REQUIRED_SYSTEM_FILES+="
/etc/pam.conf
/etc/default/locale
"
-
-# For Ubuntu 14.04: Both packages were dropped from official repos. Do not change the
-# order, as these packages will be installed via dpkg and depend on each other.
-REQUIRED_DOWNLOAD_URLS="
- de.archive.ubuntu.com/ubuntu/pool/universe/n/ncpfs/libncp_2.2.6-9ubuntu1_amd64.deb
- de.archive.ubuntu.com/ubuntu/pool/universe/n/ncpfs/libpam-ncp_2.2.6-9ubuntu1_amd64.deb
- de.archive.ubuntu.com/ubuntu/pool/universe/n/ncpfs/ncpfs_2.2.6-9ubuntu1_amd64.deb
-"
diff --git a/remote/modules/pvs2/module.conf.opensuse b/remote/modules/pvs2/module.conf.opensuse
new file mode 100644
index 00000000..aedc0d96
--- /dev/null
+++ b/remote/modules/pvs2/module.conf.opensuse
@@ -0,0 +1,14 @@
+REQUIRED_INSTALLED_PACKAGES="
+ libqt4-devel
+ LibVNCServer-devel
+"
+
+REQUIRED_CONTENT_PACKAGES="
+ libqt4
+"
+
+REQUIRED_DIRECTORIES="
+ /usr/$LIB64/
+"
+
+# libqt4-svg
diff --git a/remote/modules/rsyslogd/module.conf.opensuse.13.2 b/remote/modules/rsyslogd/module.conf.opensuse.13.2
new file mode 100644
index 00000000..b1d7fd03
--- /dev/null
+++ b/remote/modules/rsyslogd/module.conf.opensuse.13.2
@@ -0,0 +1,9 @@
+REQUIRED_CONTENT_PACKAGES="
+ rsyslog
+"
+REQUIRED_INSTALLED_PACKAGES="
+ rsyslog
+"
+REQUIRED_BINARIES+="
+ rsyslog-service-prepare
+"
diff --git a/remote/modules/ssh-auth-keys/data/etc/systemd/system/basic.target.wants/ssh-auth-keys.service b/remote/modules/ssh-auth-keys/data/etc/systemd/system/basic.target.wants/ssh-auth-keys.service
new file mode 120000
index 00000000..2bddb0ca
--- /dev/null
+++ b/remote/modules/ssh-auth-keys/data/etc/systemd/system/basic.target.wants/ssh-auth-keys.service
@@ -0,0 +1 @@
+../ssh-auth-keys.service \ No newline at end of file
diff --git a/remote/modules/ssh-auth-keys/data/etc/systemd/system/ssh-auth-keys.service b/remote/modules/ssh-auth-keys/data/etc/systemd/system/ssh-auth-keys.service
new file mode 100644
index 00000000..20a7b8f9
--- /dev/null
+++ b/remote/modules/ssh-auth-keys/data/etc/systemd/system/ssh-auth-keys.service
@@ -0,0 +1,7 @@
+[Unit]
+Description=Enable SSH keys in authorized_keys.d/ folder
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/opt/openslx/scripts/systemd-ssh_auth_keys
diff --git a/remote/modules/ssh-auth-keys/data/opt/openslx/scripts/systemd-ssh_auth_keys b/remote/modules/ssh-auth-keys/data/opt/openslx/scripts/systemd-ssh_auth_keys
new file mode 100755
index 00000000..08ad7d2c
--- /dev/null
+++ b/remote/modules/ssh-auth-keys/data/opt/openslx/scripts/systemd-ssh_auth_keys
@@ -0,0 +1,18 @@
+#!/bin/ash
+
+AUTH_KEYS_DIR="/root/.ssh/authorized_keys.d/"
+AUTH_KEYS_FILE="/root/.ssh/authorized_keys"
+
+# do we even have the directory?
+[ ! -d "$AUTH_KEYS_DIR" ] && echo "No such directory: $AUTH_KEYS_DIR" && exit 1
+
+# ok, lets cat them in the real file
+for KEY in "$AUTH_KEYS_DIR"/* ; do
+ if ! cat $KEY >> "$AUTH_KEYS_FILE" ; then
+ echo "Could not add '$KEY' to '$AUTH_KEYS_FILE'"
+ exit 1
+ fi
+done
+
+# all done, all good
+exit 0
diff --git a/remote/modules/ssh-auth-keys/module.build b/remote/modules/ssh-auth-keys/module.build
new file mode 100644
index 00000000..97e93235
--- /dev/null
+++ b/remote/modules/ssh-auth-keys/module.build
@@ -0,0 +1,11 @@
+fetch_source() {
+ :
+}
+
+build() {
+ :
+}
+
+post_copy() {
+ :
+}
diff --git a/remote/modules/ssh-auth-keys/module.conf b/remote/modules/ssh-auth-keys/module.conf
new file mode 100644
index 00000000..0cd03752
--- /dev/null
+++ b/remote/modules/ssh-auth-keys/module.conf
@@ -0,0 +1,3 @@
+REQUIRED_BINARIES=""
+REQUIRED_LIBRARIES=""
+REQUIRED_DIRECTORIES=""
diff --git a/remote/modules/sssd/module.build b/remote/modules/sssd/module.build
new file mode 100644
index 00000000..041fd5bd
--- /dev/null
+++ b/remote/modules/sssd/module.build
@@ -0,0 +1,33 @@
+fetch_source() {
+ :
+}
+
+build() {
+ COPYLIST="list_dpkg_output"
+ [ -e "$COPYLIST" ] && rm "$COPYLIST"
+
+ list_packet_files >> "$COPYLIST"
+ tarcopy "$(cat "$COPYLIST" | sort -u)" "${MODULE_BUILD_DIR}"
+
+ local SSSD_PATH="$(which sssd)"
+ [ -z "$SSSD_PATH" ] && perror "'sssd' not found on this system. Should have been installed! Something is wrong..."
+
+ # Build nslcd service file
+ mkdir -p "${MODULE_BUILD_DIR}/etc/systemd/system"
+ sed "s,%PATH%,${SSSD_PATH},g" "${MODULE_DIR}/templates/sssd-systemd.service" > "${MODULE_BUILD_DIR}/etc/systemd/system/sssd.service" || perror "Could not fill sssd.service template"
+
+ # openSuse sssd does not start when /etc/sssd/sssd.conf is not root:root 600!
+ if [ "$SYS_DISTRIBUTION" == "opensuse" -a "$SYS_VERSION" == "13.2" ]; then
+ sed -i 's#ExecStart#ExecStartPre=/opt/openslx/bin/chmod 600 /etc/sssd/sssd.conf\nExecStart#g' \
+ "${MODULE_BUILD_DIR}/etc/systemd/system/sssd.service"
+ fi
+
+ return 0
+}
+
+post_copy() {
+ mkdir -p "${TARGET_BUILD_DIR}/var/log/sssd"
+ for DIR in mc pubconf/krb5.include.d db pipes/private; do
+ mkdir -p "${TARGET_BUILD_DIR}/var/lib/sss/$DIR"
+ done
+}
diff --git a/remote/modules/sssd/module.conf b/remote/modules/sssd/module.conf
new file mode 100644
index 00000000..6e4df94e
--- /dev/null
+++ b/remote/modules/sssd/module.conf
@@ -0,0 +1,18 @@
+REQUIRED_BINARIES="
+ sssd
+"
+REQUIRED_FILES="
+ /etc/default/sssd
+ /etc/systemd/system/sssd.service
+"
+# lib/ is needed to fetch lib/x86..../security/pam_sss.so module
+# could do it using the SYS_PAM_MODULE_PATH, but using that in the
+# module.conf seems hacky...
+#
+# usr/lib is needed to get the ldb modules, e.g.:
+# usr/lib/x86_64-linux-gnu/ldb/modules/ldb/ldap.so
+#
+REQUIRED_DIRECTORIES="
+ /lib
+ /usr/lib
+"
diff --git a/remote/modules/sssd/module.conf.opensuse.13.2 b/remote/modules/sssd/module.conf.opensuse.13.2
new file mode 100644
index 00000000..6fafc652
--- /dev/null
+++ b/remote/modules/sssd/module.conf.opensuse.13.2
@@ -0,0 +1,23 @@
+REQUIRED_FILES="
+ /etc/sssd
+ /etc/systemd/system/sssd.service
+"
+
+REQUIRED_DIRECTORIES="
+ /$LIB64
+ /usr/lib
+ /usr/lib64
+"
+
+REQUIRED_INSTALLED_PACKAGES="
+ sssd
+ sssd-ldap
+ libldb1
+ libsss_nss_idmap0
+"
+REQUIRED_CONTENT_PACKAGES="
+ sssd
+ sssd-ldap
+ libldb1
+ libsss_nss_idmap0
+"
diff --git a/remote/modules/sssd/module.conf.ubuntu b/remote/modules/sssd/module.conf.ubuntu
new file mode 100644
index 00000000..5a8e4fa4
--- /dev/null
+++ b/remote/modules/sssd/module.conf.ubuntu
@@ -0,0 +1,14 @@
+REQUIRED_INSTALLED_PACKAGES="
+ sssd-common
+ sssd-ldap
+ libldb1
+ libnss-sss
+ libpam-sss
+"
+REQUIRED_CONTENT_PACKAGES="
+ sssd-common
+ sssd-ldap
+ libldb1
+ libnss-sss
+ libpam-sss
+"
diff --git a/remote/modules/sssd/templates/sssd-systemd.service b/remote/modules/sssd/templates/sssd-systemd.service
new file mode 100644
index 00000000..8cfd1a2e
--- /dev/null
+++ b/remote/modules/sssd/templates/sssd-systemd.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=System Security Services Daemon
+# SSSD will not be started until syslog is
+After=syslog.target
+
+[Service]
+EnvironmentFile=-/etc/sysconfig/sssd
+ExecStart=%PATH% -D -f
+# These two should be used with traditional UNIX forking daemons
+# consult systemd.service(5) for more details
+Type=forking
+PIDFile=/var/run/sssd.pid
+
+[Install]
+WantedBy=multi-user.target
diff --git a/remote/modules/systemd/data/usr/lib/systemd/system/getty@.service b/remote/modules/systemd/data/usr/lib/systemd/system/getty@.service
index 2d2940e1..772566d6 100644
--- a/remote/modules/systemd/data/usr/lib/systemd/system/getty@.service
+++ b/remote/modules/systemd/data/usr/lib/systemd/system/getty@.service
@@ -26,8 +26,9 @@ ConditionPathExists=/dev/tty0
[Service]
ExecStartPre=-/opt/openslx/bin/killall fbsplash
+ExecStartPre=-/bin/bash -c "echo -e '\033c' > /dev/%i"
# the VT is cleared by TTYVTDisallocate
-ExecStart=-/sbin/agetty --noclear %I 38400 linux
+ExecStart=-/sbin/agetty %I 38400 linux
Type=idle
Restart=always
RestartSec=0
diff --git a/remote/modules/systemd/module.build b/remote/modules/systemd/module.build
index 6e1cf4c1..67e019af 100644
--- a/remote/modules/systemd/module.build
+++ b/remote/modules/systemd/module.build
@@ -99,5 +99,9 @@ post_copy() {
if [ "x$(dpkg -s util-linux | grep Version: | cut -d' ' -f2)" == "x2.19.1-2ubuntu3" ]; then
sed -i "s/ExecStart=-\/sbin\/agetty --noclear %I 38400 linux/ExecStart=-\/sbin\/agetty %I 38400 linux/g" "${TARGET_BUILD_DIR}/usr/lib/systemd/system/getty@.service"
fi
+ # eg. systemd expects /bin/less:
+ if [ "$SYS_DISTRIBUTION" == "opensuse" -a "$SYS_VERSION" == "13.2" ]; then
+ ln -s /usr/bin/less "$TARGET_BUILD_DIR/bin/less"
+ fi
}
diff --git a/remote/modules/vmchooser/data/opt/openslx/scripts/vmchooser-run_virt b/remote/modules/vmchooser/data/opt/openslx/scripts/vmchooser-run_virt
index 726c2340..d41bf564 100755
--- a/remote/modules/vmchooser/data/opt/openslx/scripts/vmchooser-run_virt
+++ b/remote/modules/vmchooser/data/opt/openslx/scripts/vmchooser-run_virt
@@ -445,24 +445,26 @@ fi
if true; then
# detecting which card is to be used
echo "Detecting which sound card to use ..."
- PROC="/proc/asound/cards"
+ PROC="/proc/asound/cards"
if [ ! -r "$PROC" ]; then
echo "'${PROC}' not found or not readable."
SOUND_CARD_INDEX=0
+ SOUND_CARD_COUNT=1
else
# Try to filter HDMI cards first
- SOUND_CARD_INDEX=$(grep -v -i 'HDMI' "${PROC}" | grep -E -o '^[[:space:]]*[0-9]+[[:space:]]+' | head -n 1)
+ SOUND_CARD_INDEX=$(grep -v -i 'HDMI' "${PROC}" | grep -E -o '^[[:space:]]{0,2}[0-9]+[[:space:]]+' | head -n 1)
# If empty, try again with all
- [ -z "${SOUND_CARD_INDEX}" ] && SOUND_CARD_INDEX=$(cat "${PROC}" | grep -E -o '^[[:space:]]*[0-9]+[[:space:]]+' | head -n 1)
-
+ [ -z "${SOUND_CARD_INDEX}" ] && SOUND_CARD_INDEX=$(cat "${PROC}" | grep -E -o '^[[:space:]]{0,2}[0-9]+[[:space:]]+' | head -n 1)
if [ -z "${SOUND_CARD_INDEX}" ]; then
echo "No sound card found."
SOUND_CARD_INDEX=0
fi
+ SOUND_CARD_COUNT=$(grep -E '^[[:space:]]{0,2}[0-9]+[[:space:]]+' "${PROC}" | wc -l)
fi
SOUND_CARD_INDEX="$(grep -E -o '[0-9]+' <<<$SOUND_CARD_INDEX)"
echo "Detected sound card index is: $SOUND_CARD_INDEX"
+ echo "Sound card count: $SOUND_CARD_COUNT"
# Adjust sound volume (playback)... Random mixer names we have encountered during testing
echo "Setting up volume..."
diff --git a/remote/modules/vmchooser2/data/opt/openslx/scripts/vmchooser-run_virt b/remote/modules/vmchooser2/data/opt/openslx/scripts/vmchooser-run_virt
index 726c2340..d41bf564 100755
--- a/remote/modules/vmchooser2/data/opt/openslx/scripts/vmchooser-run_virt
+++ b/remote/modules/vmchooser2/data/opt/openslx/scripts/vmchooser-run_virt
@@ -445,24 +445,26 @@ fi
if true; then
# detecting which card is to be used
echo "Detecting which sound card to use ..."
- PROC="/proc/asound/cards"
+ PROC="/proc/asound/cards"
if [ ! -r "$PROC" ]; then
echo "'${PROC}' not found or not readable."
SOUND_CARD_INDEX=0
+ SOUND_CARD_COUNT=1
else
# Try to filter HDMI cards first
- SOUND_CARD_INDEX=$(grep -v -i 'HDMI' "${PROC}" | grep -E -o '^[[:space:]]*[0-9]+[[:space:]]+' | head -n 1)
+ SOUND_CARD_INDEX=$(grep -v -i 'HDMI' "${PROC}" | grep -E -o '^[[:space:]]{0,2}[0-9]+[[:space:]]+' | head -n 1)
# If empty, try again with all
- [ -z "${SOUND_CARD_INDEX}" ] && SOUND_CARD_INDEX=$(cat "${PROC}" | grep -E -o '^[[:space:]]*[0-9]+[[:space:]]+' | head -n 1)
-
+ [ -z "${SOUND_CARD_INDEX}" ] && SOUND_CARD_INDEX=$(cat "${PROC}" | grep -E -o '^[[:space:]]{0,2}[0-9]+[[:space:]]+' | head -n 1)
if [ -z "${SOUND_CARD_INDEX}" ]; then
echo "No sound card found."
SOUND_CARD_INDEX=0
fi
+ SOUND_CARD_COUNT=$(grep -E '^[[:space:]]{0,2}[0-9]+[[:space:]]+' "${PROC}" | wc -l)
fi
SOUND_CARD_INDEX="$(grep -E -o '[0-9]+' <<<$SOUND_CARD_INDEX)"
echo "Detected sound card index is: $SOUND_CARD_INDEX"
+ echo "Sound card count: $SOUND_CARD_COUNT"
# Adjust sound volume (playback)... Random mixer names we have encountered during testing
echo "Setting up volume..."
diff --git a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include
index 016ebdc6..471a207c 100644
--- a/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include
+++ b/remote/modules/vmware/data/opt/openslx/vmchooser/vmware/run-virt.include
@@ -258,16 +258,15 @@ runvmwareconfheader ()
ethernet0.present = "TRUE"
ethernet0.addressType = "static"
$network_virtualDev
- ethernet0.connectionType = "hostonly"
- #ethernet1.connectionType = "custom"
+ #ethernet0.connectionType = "hostonly"
+ ethernet0.connectionType = "custom"
ethernet0.vnet = "$hostdev"
ethernet0.address = "00:50:56:$macaddrsuffix"
ethernet0.wakeOnPcktRcv = "FALSE"
# sound
sound.present = "TRUE"
- sound.fileName = "sysdefault:CARD=$SOUND_CARD_INDEX"
- sound.autodetect = "FALSE"
+ $sound_fileName
sound.virtualdev = "$sound"
pciSound.enableVolumeControl = "FALSE"
sound.enableVolumeControl = "FALSE"
@@ -469,6 +468,15 @@ esac
# set standard sound card, overwrite depending on OS (options sb16, es1371, hdaudio)
sound="es1371"
+# set sound card explicitly if there is more than one card in the host system
+if [ -n "$SOUND_CARD_INDEX" -a -n "$SOUND_CARD_COUNT" ] && [ "$SOUND_CARD_COUNT" -gt 1 ]; then
+ sound_fileName="sound.fileName = \"sysdefault:CARD=${SOUND_CARD_INDEX}\"
+sound.autodetect = \"FALSE\""
+else
+ sound_fileName='sound.fileName = "-1"
+sound.autodetect = "TRUE"'
+fi
+
# check for 3D configuration setting
case "$enable3d" in
true|yes)
diff --git a/remote/modules/x11vnc/module.conf.opensuse b/remote/modules/x11vnc/module.conf.opensuse
new file mode 100644
index 00000000..b6b60c93
--- /dev/null
+++ b/remote/modules/x11vnc/module.conf.opensuse
@@ -0,0 +1,6 @@
+REQUIRED_INSTALLED_PACKAGES="
+ x11vnc
+"
+REQUIRED_CONTENT_PACKAGES="
+ x11vnc
+"
diff --git a/remote/modules/xorg/module.conf.opensuse.13.2 b/remote/modules/xorg/module.conf.opensuse.13.2
new file mode 100644
index 00000000..363ce3aa
--- /dev/null
+++ b/remote/modules/xorg/module.conf.opensuse.13.2
@@ -0,0 +1,92 @@
+# xkbutils, xkbprint, setxkbmap, xkbevd for 64-bit openSuse
+REQUIRED_INSTALLED_PACKAGES="
+ xorg-x11
+ xorg-x11-server
+ xorg-x11-driver-input
+ xorg-x11-driver-video
+ xf86-video-nouveau
+ xf86-video-vmware
+ xf86-video-ati
+ xf86-video-nv
+ xf86-video-intel
+ xf86-video-i128
+ xf86-video-geode
+ xf86-video-vesa
+ xf86-video-fbdev
+ xf86-video-modesetting
+ xf86-input-vmmouse
+ xf86-input-wacom
+ xf86-input-evdev
+ xf86-input-joystick
+ xf86-input-keyboard
+ xf86-input-mouse
+ xf86-input-synaptics
+ xf86-input-void
+ xkeyboard-config
+ xkbcomp
+ dejavu-fonts
+ kdm-branding-openSUSE
+ Mesa
+ xkbutils
+ xkbprint
+ setxkbmap
+ xkbevd
+ libpixman-1-0
+ xrandr
+ vaapi-intel-driver
+"
+REQUIRED_CONTENT_PACKAGES="
+ xorg-x11
+ xorg-x11-server
+ xorg-x11-driver-input
+ xorg-x11-driver-video
+ xf86-video-nouveau
+ xf86-video-vmware
+ xf86-video-ati
+ xf86-video-nv
+ xf86-video-intel
+ xf86-video-i128
+ xf86-video-geode
+ xf86-video-vesa
+ xf86-video-fbdev
+ xf86-video-modesetting
+ xf86-input-vmmouse
+ xf86-input-wacom
+ xf86-input-evdev
+ xf86-input-joystick
+ xf86-input-keyboard
+ xf86-input-mouse
+ xf86-input-synaptics
+ xf86-input-void
+ xkeyboard-config
+ xkbcomp
+ dejavu-fonts
+ libxcb-glx0
+ kdm-branding-openSUSE
+ Mesa
+ xkbutils
+ xkbprint
+ setxkbmap
+ xkbevd
+ libpixman-1-0
+ xrandr
+ vaapi-intel-driver
+"
+REQUIRED_LIBRARIES="
+ libxcb-glx
+ libIntelXvMC
+ i965_dri
+ vmwgfx_dri
+ i915_dri
+ i965_drv_video
+ libpixman-1
+"
+REQUIRED_DIRECTORIES+="
+ /usr/bin
+ /usr/lib/udev
+ /usr/$LIB64/xorg
+ /usr/share/fonts
+"
+REQUIRED_FILES="
+ /var/adm/fillup-templates/sysconfig.displaymanager-kdm
+"