summaryrefslogtreecommitdiffstats
path: root/data
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--data/.gitignore2
-rw-r--r--data/61-gdm.rules.in138
-rw-r--r--data/Init.in97
-rwxr-xr-xdata/PostLogin8
-rwxr-xr-xdata/PostSession.in3
-rwxr-xr-xdata/PreSession.in9
-rwxr-xr-xdata/Xsession.in229
-rw-r--r--data/applications/meson.build16
-rw-r--r--data/applications/mime-dummy-handler.desktop6
-rw-r--r--data/applications/mimeapps.list19
-rw-r--r--data/autostart/meson.build12
-rw-r--r--data/autostart/orca-autostart.desktop7
-rw-r--r--data/dconf/.gitignore1
-rw-r--r--data/dconf/defaults/00-upstream-settings51
-rw-r--r--data/dconf/defaults/locks/00-upstream-settings-locks28
-rw-r--r--data/dconf/gdm.in2
-rw-r--r--data/dconf/meson.build25
-rw-r--r--data/gdm.conf-custom.in16
-rw-r--r--data/gdm.conf.in81
-rw-r--r--data/gdm.schemas.in144
-rw-r--r--data/gdm.service.in33
-rw-r--r--data/gnome-login.session.in3
-rw-r--r--data/locale.alias7
-rw-r--r--data/meson.build214
-rw-r--r--data/org.gnome.login-screen.gschema.xml102
-rw-r--r--data/pam-arch/gdm-autologin.pam15
-rw-r--r--data/pam-arch/gdm-fingerprint.pam17
-rw-r--r--data/pam-arch/gdm-launch-environment.pam17
-rw-r--r--data/pam-arch/gdm-password.pam12
-rw-r--r--data/pam-arch/gdm-smartcard.pam17
-rw-r--r--data/pam-exherbo/gdm-autologin.pam12
-rw-r--r--data/pam-exherbo/gdm-fingerprint.pam16
-rw-r--r--data/pam-exherbo/gdm-launch-environment.pam17
-rw-r--r--data/pam-exherbo/gdm-password.pam12
-rw-r--r--data/pam-exherbo/gdm-smartcard.pam16
-rw-r--r--data/pam-lfs/gdm-autologin.pam19
-rw-r--r--data/pam-lfs/gdm-fingerprint.pam18
-rw-r--r--data/pam-lfs/gdm-launch-environment.pam17
-rw-r--r--data/pam-lfs/gdm-password.pam17
-rw-r--r--data/pam-lfs/gdm-smartcard.pam17
-rw-r--r--data/pam-openembedded/gdm-autologin.pam5
-rw-r--r--data/pam-openembedded/gdm-launch-environment.pam5
-rw-r--r--data/pam-openembedded/gdm-password.pam5
-rw-r--r--data/pam-redhat/gdm-autologin.pam16
-rw-r--r--data/pam-redhat/gdm-fingerprint.pam16
-rw-r--r--data/pam-redhat/gdm-launch-environment.pam9
-rw-r--r--data/pam-redhat/gdm-password.pam20
-rw-r--r--data/pam-redhat/gdm-smartcard.pam16
-rw-r--r--data/session.conf.in4
49 files changed, 1588 insertions, 0 deletions
diff --git a/data/.gitignore b/data/.gitignore
new file mode 100644
index 0000000..c95bb39
--- /dev/null
+++ b/data/.gitignore
@@ -0,0 +1,2 @@
+/gdm.service
+/greeter-dconf-defaults
diff --git a/data/61-gdm.rules.in b/data/61-gdm.rules.in
new file mode 100644
index 0000000..5bc9941
--- /dev/null
+++ b/data/61-gdm.rules.in
@@ -0,0 +1,138 @@
+# identify virtio graphics cards to find passthrough setups
+SUBSYSTEM!="virtio", GOTO="gdm_virtio_device_end"
+ACTION!="add", GOTO="gdm_virtio_device_end"
+ATTR{vendor}=="0x1af4", ATTR{device}=="0x0010", RUN+="/usr/bin/touch /run/udev/gdm-machine-has-virtual-gpu", ENV{GDM_MACHINE_HAS_VIRTUAL_GPU}="1", GOTO="gdm_virtio_device_end"
+LABEL="gdm_virtio_device_end"
+
+SUBSYSTEM!="pci", GOTO="gdm_pci_device_end"
+ACTION!="bind", GOTO="gdm_pci_device_end"
+
+# identify virtio graphics cards to find passthrough setups
+# cirrus
+ATTR{vendor}=="0x1013", ATTR{device}=="0x00b8", ATTR{subsystem_vendor}=="0x1af4", ATTR{subsystem_device}=="0x1100", RUN+="/usr/bin/touch /run/udev/gdm-machine-has-virtual-gpu", ENV{GDM_MACHINE_HAS_VIRTUAL_GPU}="1", GOTO="gdm_pci_device_end"
+# vga
+ATTR{vendor}=="0x1b36", ATTR{device}=="0x0100", RUN+="/usr/bin/touch /run/udev/gdm-machine-has-virtual-gpu", ENV{GDM_MACHINE_HAS_VIRTUAL_GPU}="1", GOTO="gdm_pci_device_end"
+# qxl
+ATTR{vendor}=="0x1234", ATTR{device}=="0x1111", RUN+="/usr/bin/touch /run/udev/gdm-machine-has-virtual-gpu", ENV{GDM_MACHINE_HAS_VIRTUAL_GPU}="1", GOTO="gdm_pci_device_end"
+
+# disable Wayland on Hi1710 chipsets
+ATTR{vendor}=="0x19e5", ATTR{device}=="0x1711", GOTO="gdm_disable_wayland"
+
+# disable Wayland on Matrox chipsets
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0522", GOTO="gdm_disable_wayland"
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0524", GOTO="gdm_disable_wayland"
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0530", GOTO="gdm_disable_wayland"
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0532", GOTO="gdm_disable_wayland"
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0533", GOTO="gdm_disable_wayland"
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0534", GOTO="gdm_disable_wayland"
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0536", GOTO="gdm_disable_wayland"
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0538", GOTO="gdm_disable_wayland"
+
+# disable Wayland on aspeed chipsets
+ATTR{vendor}=="0x1a03", ATTR{device}=="0x2010", GOTO="gdm_disable_wayland"
+ATTR{vendor}=="0x1a03", ATTR{device}=="0x2000", GOTO="gdm_disable_wayland"
+
+LABEL="gdm_pci_device_end"
+
+# disable Wayland if modesetting is disabled
+KERNEL!="card[0-9]*", GOTO="gdm_nomodeset_end"
+SUBSYSTEM!="drm", GOTO="gdm_nomodeset_end"
+IMPORT{parent}="GDM_MACHINE_HAS_VIRTUAL_GPU"
+ENV{GDM_MACHINE_HAS_VIRTUAL_GPU}!="1", RUN+="/usr/bin/touch /run/udev/gdm-machine-has-hardware-gpu"
+# but keep it enabled for simple framebuffer drivers
+DRIVERS=="simple-framebuffer", GOTO="gdm_nomodeset_end"
+IMPORT{cmdline}="nomodeset", GOTO="gdm_disable_wayland"
+LABEL="gdm_nomodeset_end"
+
+# The vendor nvidia driver has multiple modules that need to be loaded before GDM can make an
+# informed choice on which way to proceed, so force GDM to wait until NVidia's modules are
+# loaded before starting up.
+KERNEL!="nvidia", GOTO="gdm_nvidia_end"
+SUBSYSTEM!="module", GOTO="gdm_nvidia_end"
+ACTION!="add", GOTO="gdm_nvidia_end"
+RUN+="/usr/bin/touch /run/udev/gdm-machine-has-vendor-nvidia-driver"
+
+# Check if suspend/resume services necessary for working wayland support is available
+TEST{0711}!="/usr/bin/nvidia-sleep.sh", GOTO="gdm_disable_wayland"
+TEST{0711}!="/usr/lib/systemd/system-sleep/nvidia", GOTO="gdm_disable_wayland"
+IMPORT{program}="/bin/sh -c \"sed -e 's/: /=/g' -e 's/\([^[:upper:]]\)\([[:upper:]]\)/\1_\2/g' -e 's/[[:lower:]]/\U&/g' -e 's/^/NVIDIA_/' /proc/driver/nvidia/params\""
+ENV{NVIDIA_PRESERVE_VIDEO_MEMORY_ALLOCATIONS}!="1", GOTO="gdm_disable_wayland"
+IMPORT{program}="/bin/sh -c 'echo NVIDIA_HIBERNATE=`systemctl is-enabled nvidia-hibernate`'"
+ENV{NVIDIA_HIBERNATE}!="enabled", GOTO="gdm_disable_wayland"
+IMPORT{program}="/bin/sh -c 'echo NVIDIA_RESUME=`systemctl is-enabled nvidia-resume`'"
+ENV{NVIDIA_RESUME}!="enabled", GOTO="gdm_disable_wayland"
+IMPORT{program}="/bin/sh -c 'echo NVIDIA_SUSPEND=`systemctl is-enabled nvidia-suspend`'"
+ENV{NVIDIA_SUSPEND}!="enabled", GOTO="gdm_disable_wayland"
+LABEL="gdm_nvidia_end"
+
+# If this machine has an internal panel, take note, since it's probably a laptop
+# FIXME: It could be "ghost connectors" make this pop positive for some workstations
+# in the wild. If so, we may have to fallback to looking at the chassis type from
+# dmi data or acpi
+KERNEL!="card[0-9]-eDP-*", GOTO="gdm_laptop_check_end"
+SUBSYSTEM!="drm", GOTO="gdm_laptop_check_end"
+ACTION!="add", GOTO="gdm_laptop_check_end"
+RUN+="/usr/bin/touch /run/udev/gdm-machine-is-laptop"
+GOTO="gdm_hybrid_nvidia_laptop_check"
+LABEL="gdm_laptop_check_end"
+
+# If this is a hybrid graphics setup, take note
+KERNEL!="card[1-9]*", GOTO="gdm_hybrid_graphics_check_end"
+KERNEL=="card[1-9]-*", GOTO="gdm_hybrid_graphics_check_end"
+SUBSYSTEM!="drm", GOTO="gdm_hybrid_graphics_check_end"
+ACTION!="add", GOTO="gdm_hybrid_graphics_check_end"
+RUN+="/usr/bin/touch /run/udev/gdm-machine-has-hybrid-graphics"
+LABEL="gdm_hybrid_graphics_check_end"
+
+# If this is a hybrid graphics laptop with vendor nvidia driver, disable wayland
+LABEL="gdm_hybrid_nvidia_laptop_check"
+TEST!="/run/udev/gdm-machine-is-laptop", GOTO="gdm_hybrid_nvidia_laptop_check_end"
+TEST!="/run/udev/gdm-machine-has-hybrid-graphics", GOTO="gdm_hybrid_nvidia_laptop_check_end"
+TEST!="/run/udev/gdm-machine-has-vendor-nvidia-driver", GOTO="gdm_hybrid_nvidia_laptop_check_end"
+GOTO="gdm_disable_wayland"
+LABEL="gdm_hybrid_nvidia_laptop_check_end"
+
+# Disable wayland in situation where we're in a guest with a virtual gpu and host passthrough gpu
+LABEL="gdm_virt_passthrough_check"
+TEST!="/run/udev/gdm-machine-has-hybrid-graphics", GOTO="gdm_virt_passthrough_check_end"
+TEST!="/run/udev/gdm-machine-has-virtual-gpu", GOTO="gdm_virt_passthrough_check_end"
+TEST!="/run/udev/gdm-machine-has-hardware-gpu", GOTO="gdm_virt_passthrough_check_end"
+GOTO="gdm_disable_wayland"
+LABEL="gdm_virt_passthrough_check_end"
+
+# Disable wayland when there are multiple virtual gpus
+LABEL="gdm_virt_multi_gpu_check"
+TEST!="/run/udev/gdm-machine-has-hybrid-graphics", GOTO="gdm_virt_multi_gpu_check_end"
+TEST!="/run/udev/gdm-machine-has-virtual-gpu", GOTO="gdm_virt_multi_gpu_check_end"
+TEST=="/run/udev/gdm-machine-has-hardware-gpu", GOTO="gdm_virt_multi_gpu_check_end"
+LABEL="gdm_virt_multi_gpu_check_end"
+
+# Disable wayland when nvidia modeset is disabled or when drivers are a lower
+# version than 470,
+# For versions above 470 but lower than 510 prefer Xorg,
+# Above 510, prefer Wayland.
+KERNEL!="nvidia_drm", GOTO="gdm_nvidia_drm_end"
+SUBSYSTEM!="module", GOTO="gdm_nvidia_drm_end"
+ACTION!="add", GOTO="gdm_nvidia_drm_end"
+# disable wayland if nvidia-drm modeset is not enabled
+ATTR{parameters/modeset}!="Y", GOTO="gdm_disable_wayland"
+# disable wayland for nvidia drivers versions lower than 470
+ATTR{version}=="4[0-6][0-9].*|[0-3][0-9][0-9].*|[0-9][0-9].*|[0-9].*", GOTO="gdm_disable_wayland"
+# For nvidia drivers versions Above 510, keep Wayland by default
+ATTR{version}=="[5-9][1-9][0-9].*", GOTO="gdm_end"
+# For nvidia drivers versions 470-495, prefer Xorg by default
+GOTO="gdm_prefer_xorg"
+LABEL="gdm_nvidia_drm_end"
+
+GOTO="gdm_end"
+
+LABEL="gdm_prefer_xorg"
+RUN+="@libexecdir@/gdm-runtime-config set daemon PreferredDisplayServer xorg"
+GOTO="gdm_end"
+
+LABEL="gdm_disable_wayland"
+RUN+="@libexecdir@/gdm-runtime-config set daemon WaylandEnable false"
+GOTO="gdm_end"
+
+LABEL="gdm_end"
+
diff --git a/data/Init.in b/data/Init.in
new file mode 100644
index 0000000..0c50251
--- /dev/null
+++ b/data/Init.in
@@ -0,0 +1,97 @@
+#!/bin/sh
+# Stolen from the debian kdm setup, aren't I sneaky
+# Plus a lot of fun stuff added
+# -George
+
+PATH="@X_PATH@:$PATH"
+OLD_IFS=$IFS
+
+gdmwhich () {
+ COMMAND="$1"
+ OUTPUT=
+ IFS=:
+ for dir in $PATH
+ do
+ if test -x "$dir/$COMMAND" ; then
+ if test "x$OUTPUT" = "x" ; then
+ OUTPUT="$dir/$COMMAND"
+ fi
+ fi
+ done
+ IFS=$OLD_IFS
+ echo "$OUTPUT"
+}
+
+if [ -f /etc/X11/Xresources ]; then
+ sysresources=/etc/X11/Xresources
+else
+ sysresources=/usr/etc/X11/Xresources
+fi
+
+# merge in defaults
+if [ -f "$sysresources" ]; then
+ xrdb -nocpp -merge "$sysresources"
+fi
+
+if [ -f /etc/X11/Xmodmap ]; then
+ sysmodmap=/etc/X11/Xmodmap
+else
+ sysmodmap=/usr/etc/X11/Xmodmap
+fi
+
+XMODMAP=`gdmwhich xmodmap`
+if [ "x$XMODMAP" != "x" ] ; then
+ if [ "x$GDM_PARENT_DISPLAY" = "x" ]; then
+ if [ -f $sysmodmap ]; then
+ $XMODMAP $sysmodmap
+ fi
+ else
+ ( DISPLAY=$GDM_PARENT_DISPLAY XAUTHORITY=$GDM_PARENT_XAUTHORITY $XMODMAP -pke ) | $XMODMAP -
+ fi
+
+ #
+ # Switch Sun's Alt and Meta mod mappings
+ #
+
+ UNAME=`gdmwhich uname`
+ PROCESSOR=`$UNAME -p`
+ if [ "x$PROCESSOR" = "xsparc" ]; then
+ if $XMODMAP | grep mod4 | grep Alt > /dev/null 2>/dev/null
+ then
+ $XMODMAP -e "clear Mod1" \
+ -e "clear Mod4" \
+ -e "add Mod1 = Alt_L" \
+ -e "add Mod1 = Alt_R" \
+ -e "add Mod4 = Meta_L" \
+ -e "add Mod4 = Meta_R"
+ fi
+ fi
+fi
+
+SETXKBMAP=`gdmwhich setxkbmap`
+if [ "x$SETXKBMAP" != "x" ] ; then
+ # FIXME: is this all right? Is this completely on crack?
+ # What this does is move the xkb configuration from the GDM_PARENT_DISPLAY
+ # FIXME: This should be done in code. Or there must be an easier way ...
+ if [ -n "$GDM_PARENT_DISPLAY" ]; then
+ XKBSETUP=`( DISPLAY=$GDM_PARENT_DISPLAY XAUTHORITY=$GDM_PARENT_XAUTHORITY $SETXKBMAP -v )`
+ if [ -n "$XKBSETUP" ]; then
+ XKBKEYMAP=`echo "$XKBSETUP" | grep '^keymap' | awk '{ print $2 }'`
+ XKBTYPES=`echo "$XKBSETUP" | grep '^types' | awk '{ print $2 }'`
+ XKBCOMPAT=`echo "$XKBSETUP" | grep '^compat' | awk '{ print $2 }'`
+ XKBSYMBOLS=`echo "$XKBSETUP" | grep '^symbols' | awk '{ print $2 }'`
+ XKBGEOMETRY=`echo "$XKBSETUP" | grep '^geometry' | awk '{ print $2 }'`
+ if [ -n "$XKBKEYMAP" ]; then
+ $SETXKBMAP -keymap "$XKBKEYMAP"
+ elif [ -n "$XKBTYPES" -a -n "$XKBCOMPAT" -a -n "$XKBSYMBOLS" -a -n "$XKBGEOMETRY" ]; then
+ $SETXKBMAP -types "$XKBTYPES" -compat "$XKBCOMPAT" -symbols "$XKBSYMBOLS" -geometry "$XKBGEOMETRY"
+ elif [ -n "$XKBTYPES" -a -n "$XKBCOMPAT" -a -n "$XKBSYMBOLS" ]; then
+ $SETXKBMAP -types "$XKBTYPES" -compat "$XKBCOMPAT" -symbols "$XKBSYMBOLS"
+ elif [ -n "$XKBSYMBOLS" ]; then
+ $SETXKBMAP -symbols "$XKBSYMBOLS"
+ fi
+ fi
+ fi
+fi
+
+exit 0
diff --git a/data/PostLogin b/data/PostLogin
new file mode 100755
index 0000000..efc6394
--- /dev/null
+++ b/data/PostLogin
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# Note: this is a sample and will not be run as is. Change the name of this
+# file to <gdmconfdir>/PostLogin/Default for this script to be run. This
+# script will be run before any setup is run on behalf of the user and is
+# useful if you for example need to do some setup to create a home directory
+# for the user or something like that. $HOME, $LOGIN and such will all be
+# set appropriately and this script is run as root.
diff --git a/data/PostSession.in b/data/PostSession.in
new file mode 100755
index 0000000..c52d3c2
--- /dev/null
+++ b/data/PostSession.in
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+exit 0
diff --git a/data/PreSession.in b/data/PreSession.in
new file mode 100755
index 0000000..cfabee7
--- /dev/null
+++ b/data/PreSession.in
@@ -0,0 +1,9 @@
+#!/bin/sh
+#
+# Note that any setup should come before the sessreg command as
+# that must be 'exec'ed for the pid to be correct (sessreg uses the parent
+# pid)
+#
+# Note that output goes into the .xsession-errors file for easy debugging
+#
+PATH="@X_PATH@:$PATH"
diff --git a/data/Xsession.in b/data/Xsession.in
new file mode 100755
index 0000000..2e4de4f
--- /dev/null
+++ b/data/Xsession.in
@@ -0,0 +1,229 @@
+#!@XSESSION_SHELL@
+#
+# This is SORT OF LIKE an X session, but not quite. You get a command as the
+# first argument (it could be multiple words, so run it with "eval"). As a
+# special case, the command can be:
+# default - Run the appropriate Xclients startup (see the code below)
+# custom - Run ~/.xsession and if that's not available run 'default'
+#
+# (Note that other arguments could also follow, but only the command one is
+# right now relevant and supported)
+#
+# The output is ALREADY redirected to .xsession-errors in GDM. This way
+# .xsession-errors actually gets more output such as if the PreSession script
+# is failing. This also prevents DoS attacks if some app in the users session
+# can be prodded to dump lots of stuff on the stdout/stderr. We wish to be
+# robust don't we? In case you wish to use an existing script for other DM's,
+# you can just not redirect when GDMSESSION is set. GDMSESSION will always
+# be set from gdm.
+#
+# Also note that this is not run as a login shell, this is just executed.
+# This is why we source the profile files below.
+#
+# based on:
+# $XConsortium: Xsession /main/10 1995/12/18 18:21:28 gildea $
+
+command="$@"
+
+# this will go into the .xsession-errors along with all other echo's
+# good for debugging where things went wrong
+echo "$0: Beginning session setup..."
+
+# First read /etc/profile (resp. /usr/etc/profile) and .profile
+if [ -f /etc/profile ]; then
+ . /etc/profile
+elif [ -f /usr/etc/profile ]; then
+ . /usr/etc/profile
+fi
+test -f "$HOME/.profile" && . "$HOME/.profile"
+# Second read /etc/xprofile (resp. /usr/etc/xprofile) and .xprofile for X specific setup
+if [ -f /etc/xprofile ]; then
+ . /etc/xprofile
+elif [ -f /usr/etc/xprofile ]; then
+ . /usr/etc/xprofile
+
+fi
+test -f "$HOME/.xprofile" && . "$HOME/.xprofile"
+
+# Translation stuff
+if [ -x "@libexecdir@/gdmtranslate" ] ; then
+ gdmtranslate="@libexecdir@/gdmtranslate"
+else
+ gdmtranslate=
+fi
+
+# Note that this should only go to zenity dialogs which always expect utf8
+gettextfunc () {
+ if [ "x$gdmtranslate" != "x" ] ; then
+ "$gdmtranslate" --utf8 "$1"
+ else
+ echo "$1"
+ fi
+}
+
+OLD_IFS=$IFS
+
+gdmwhich () {
+ COMMAND="$1"
+ OUTPUT=
+ IFS=:
+ for dir in $PATH
+ do
+ if test -x "$dir/$COMMAND" ; then
+ if test "x$OUTPUT" = "x" ; then
+ OUTPUT="$dir/$COMMAND"
+ fi
+ fi
+ done
+ IFS=$OLD_IFS
+ echo "$OUTPUT"
+}
+
+zenity=`gdmwhich zenity`
+
+# Note: ~/.xsession-errors is now done in the daemon so that it
+# works for ALL sessions (except ones named 'Failsafe')
+
+# clean up after xbanner
+freetemp=`gdmwhich freetemp`
+if [ -n "$freetemp" ] ; then
+ "$freetemp"
+fi
+
+userresources="$HOME/.Xresources"
+usermodmap="$HOME/.Xmodmap"
+userxkbmap="$HOME/.Xkbmap"
+
+if [ -f /etc/X11/Xresources ]; then
+ sysresources=/etc/X11/Xresources
+else
+ sysresources=/usr/etc/X11/Xresources
+fi
+
+if [ -f /etc/X11/Xmodmap ]; then
+ sysmodmap=/etc/X11/Xmodmap
+else
+ sysmodmap=/usr/etc/X11/Xmodmap
+fi
+
+if [ -f /etc/X11/Xkbmap ]; then
+ sysxkbmap=/etc/X11/Xkbmap
+else
+ sysxkbmap=/usr/etc/X11/Xkbmap
+fi
+
+rh6sysresources=/etc/X11/xinit/Xresources
+rh6sysmodmap=/etc/X11/xinit/Xmodmap
+
+# merge in defaults
+if [ -f "$rh6sysresources" ]; then
+ xrdb -nocpp -merge "$rh6sysresources"
+fi
+
+if [ -f "$sysresources" ]; then
+ xrdb -nocpp -merge "$sysresources"
+fi
+
+if [ -f "$userresources" ]; then
+ xrdb -nocpp -merge "$userresources"
+fi
+
+# merge in keymaps
+if [ -f "$sysxkbmap" ]; then
+ setxkbmap `cat "$sysxkbmap"`
+ XKB_IN_USE=yes
+fi
+
+if [ -f "$userxkbmap" ]; then
+ setxkbmap `cat "$userxkbmap"`
+ XKB_IN_USE=yes
+fi
+
+#
+# Eeek, this seems like too much magic here
+#
+if [ -z "$XKB_IN_USE" -a ! -L /etc/X11/X ]; then
+ if grep '^exec.*/Xsun' /etc/X11/X > /dev/null 2>&1 && [ -f /etc/X11/XF86Config ]; then
+ xkbsymbols=`sed -n -e 's/^[ ]*XkbSymbols[ ]*"\(.*\)".*$/\1/p' /etc/X11/XF86Config`
+ if [ -n "$xkbsymbols" ]; then
+ setxkbmap -symbols "$xkbsymbols"
+ XKB_IN_USE=yes
+ fi
+ fi
+fi
+
+# xkb and xmodmap don't play nice together
+if [ -z "$XKB_IN_USE" ]; then
+ if [ -f "$rh6sysmodmap" ]; then
+ xmodmap "$rh6sysmodmap"
+ fi
+
+ if [ -f "$sysmodmap" ]; then
+ xmodmap "$sysmodmap"
+ fi
+
+ if [ -f "$usermodmap" ]; then
+ xmodmap "$usermodmap"
+ fi
+fi
+
+unset XKB_IN_USE
+
+xhost +si:localuser:`id -un` || :
+
+# run all system xinitrc shell scripts.
+if [ -d /usr/etc/X11/xinit/xinitrc.d ]; then
+ for i in /usr/etc/X11/xinit/xinitrc.d/* ; do
+ sname=$(basename "$i")
+ test -x "/etc/X11/xinit/xinitrc.d/$sname" && continue
+ if [ -x "$i" -a ! -d "$i" ]; then
+ . "$i"
+ fi
+ done
+fi
+if [ -d /etc/X11/xinit/xinitrc.d ]; then
+ for i in /etc/X11/xinit/xinitrc.d/* ; do
+ if [ -x "$i" -a ! -d "$i" ]; then
+ . "$i"
+ fi
+ done
+fi
+
+if [ "x$command" = "xdefault" ] ; then
+ if [ -x "$HOME/.Xclients" ]; then
+ command="$HOME/.Xclients"
+ elif [ -x /etc/X11/xinit/Xclients ]; then
+ command="/etc/X11/xinit/Xclients"
+ elif [ -x /etc/X11/Xclients ]; then
+ command="/etc/X11/Xclients"
+ else
+ if [ -n "$zenity" ] ; then
+ disptext=`gettextfunc "System has no Xclients file, so starting a failsafe xterm session. Windows will have focus only if the mouse pointer is above them. To get out of this mode type 'exit' in the window."`
+ "$zenity" --info --text "$disptext"
+ else
+ echo "$0: Cannot find Xclients"
+ fi
+ exec xterm -geometry 80x24+0+0
+ fi
+fi
+
+# add ssh-agent if found
+sshagent="`gdmwhich ssh-agent`"
+if [ -n "$sshagent" ] && [ -x "$sshagent" ] && [ -z "$SSH_AUTH_SOCK" ]; then
+ command="$sshagent -- $command"
+elif [ -z "$sshagent" ] ; then
+ echo "$0: ssh-agent not found!"
+fi
+
+echo "$0: Setup done, will execute: $command"
+
+eval exec $command
+
+echo "$0: Executing $command failed, will run xterm"
+
+if [ -n "$zenity" ] ; then
+ disptext=`gettextfunc "Failed to start the session, so starting a failsafe xterm session. Windows will have focus only if the mouse pointer is above them. To get out of this mode type 'exit' in the window."`
+ "$zenity" --info --text "$disptext"
+fi
+
+exec xterm -geometry 80x24+0+0
diff --git a/data/applications/meson.build b/data/applications/meson.build
new file mode 100644
index 0000000..48a2f09
--- /dev/null
+++ b/data/applications/meson.build
@@ -0,0 +1,16 @@
+desktop_conf = {
+ 'LIBDIR': gdm_prefix / get_option('libdir'),
+ 'LIBEXECDIR': gdm_prefix / get_option('libexecdir'),
+ 'LOCALSTATEDIR': gdm_prefix / get_option('localstatedir'),
+ 'SBINDIR': gdm_prefix / get_option('sbindir'),
+ 'SYSCONFDIR': gdm_prefix / get_option('sysconfdir'),
+}
+
+foreach desktop_file : [ 'mime-dummy-handler.desktop', 'mimeapps.list' ]
+ configure_file(
+ input: desktop_file,
+ output: desktop_file,
+ configuration: desktop_conf,
+ install_dir: get_option('datadir') / 'gdm' / 'greeter' / 'applications',
+ )
+endforeach
diff --git a/data/applications/mime-dummy-handler.desktop b/data/applications/mime-dummy-handler.desktop
new file mode 100644
index 0000000..8f6623e
--- /dev/null
+++ b/data/applications/mime-dummy-handler.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Dummy URI Handler
+Exec=true %U
+Terminal=false
+StartupNotify=false
diff --git a/data/applications/mimeapps.list b/data/applications/mimeapps.list
new file mode 100644
index 0000000..db3a144
--- /dev/null
+++ b/data/applications/mimeapps.list
@@ -0,0 +1,19 @@
+[Default Applications]
+x-scheme-handler/file=mime-dummy-handler.desktop
+x-scheme-handler/ftp=mime-dummy-handler.desktop
+x-scheme-handler/ghelp=mime-dummy-handler.desktop
+x-scheme-handler/help=mime-dummy-handler.desktop
+x-scheme-handler/http=mime-dummy-handler.desktop
+x-scheme-handler/https=mime-dummy-handler.desktop
+x-scheme-handler/info=mime-dummy-handler.desktop
+x-scheme-handler/irc=mime-dummy-handler.desktop
+x-scheme-handler/itms=mime-dummy-handler.desktop
+x-scheme-handler/mailto=mime-dummy-handler.desktop
+x-scheme-handler/man=mime-dummy-handler.desktop
+x-scheme-handler/mms=mime-dummy-handler.desktop
+x-scheme-handler/rtp=mime-dummy-handler.desktop
+x-scheme-handler/rtsp=mime-dummy-handler.desktop
+x-scheme-handler/sip=mime-dummy-handler.desktop
+x-scheme-handler/trash=mime-dummy-handler.desktop
+x-scheme-handler/webcal=mime-dummy-handler.desktop
+x-scheme-handler/xmpp=mime-dummy-handler.desktop
diff --git a/data/autostart/meson.build b/data/autostart/meson.build
new file mode 100644
index 0000000..348a6c6
--- /dev/null
+++ b/data/autostart/meson.build
@@ -0,0 +1,12 @@
+autostart_files_conf = {
+ 'LIBEXECDIR': gdm_prefix / get_option('libexecdir'),
+}
+
+foreach autostart_file : [ 'orca-autostart.desktop' ]
+ configure_file(
+ input: autostart_file,
+ output: autostart_file,
+ configuration: autostart_files_conf,
+ install_dir: get_option('datadir') / 'gdm' / 'greeter' / 'autostart',
+ )
+endforeach
diff --git a/data/autostart/orca-autostart.desktop b/data/autostart/orca-autostart.desktop
new file mode 100644
index 0000000..944cfd7
--- /dev/null
+++ b/data/autostart/orca-autostart.desktop
@@ -0,0 +1,7 @@
+[Desktop Entry]
+Type=Application
+Name=Orca screen reader
+Exec=orca --disable main-window,splash-window --enable speech,braille
+NoDisplay=true
+AutostartCondition=GSettings org.gnome.desktop.a11y.applications screen-reader-enabled
+X-GNOME-AutoRestart=true
diff --git a/data/dconf/.gitignore b/data/dconf/.gitignore
new file mode 100644
index 0000000..f0047b3
--- /dev/null
+++ b/data/dconf/.gitignore
@@ -0,0 +1 @@
+/gdm
diff --git a/data/dconf/defaults/00-upstream-settings b/data/dconf/defaults/00-upstream-settings
new file mode 100644
index 0000000..0f41899
--- /dev/null
+++ b/data/dconf/defaults/00-upstream-settings
@@ -0,0 +1,51 @@
+# This file is part of the GDM packaging and should not be changed.
+#
+# Instead create your own file next to it with a higher numbered prefix,
+# and run
+#
+# dconf update
+#
+
+[org/gnome/desktop/session]
+session-name='gnome-login'
+
+[org/gnome/desktop/input-sources]
+show-all-sources=true
+
+[org/gnome/desktop/a11y]
+always-show-universal-access-status=true
+
+[org/gnome/desktop/background]
+show-desktop-icons=false
+
+[org/gnome/desktop/default-applications/terminal]
+exec='true'
+
+[org/gnome/desktop/lockdown]
+disable-application-handlers=true
+disable-command-line=true
+disable-lock-screen=true
+disable-log-out=false
+disable-printing=true
+disable-print-setup=true
+disable-save-to-disk=true
+disable-user-switching=true
+
+[org/gnome/desktop/sound]
+event-sounds=true
+
+[org/gnome/settings-daemon/plugins/media-keys]
+calculator=''
+eject=''
+email=''
+help=''
+home=''
+media=''
+next=''
+pause=''
+play=''
+previous=''
+screensaver=''
+search=''
+stop=''
+www=''
diff --git a/data/dconf/defaults/locks/00-upstream-settings-locks b/data/dconf/defaults/locks/00-upstream-settings-locks
new file mode 100644
index 0000000..9cecec6
--- /dev/null
+++ b/data/dconf/defaults/locks/00-upstream-settings-locks
@@ -0,0 +1,28 @@
+/org/gnome/desktop/a11y/keyboard/enable
+/org/gnome/desktop/background/show-desktop-icons
+/org/gnome/desktop/default-applications/terminal/exec
+/org/gnome/desktop/interface/toolkit-accessibility
+/org/gnome/desktop/lockdown/disable-application-handlers
+/org/gnome/desktop/lockdown/disable-command-line
+/org/gnome/desktop/lockdown/disable-lock-screen
+/org/gnome/desktop/lockdown/disable-log-out
+/org/gnome/desktop/lockdown/disable-printing
+/org/gnome/desktop/lockdown/disable-print-setup
+/org/gnome/desktop/lockdown/disable-save-to-disk
+/org/gnome/desktop/lockdown/disable-user-switching
+/org/gnome/desktop/session/session-name
+/org/gnome/desktop/sound/event-sounds
+/org/gnome/settings-daemon/plugins/media-keys/calculator
+/org/gnome/settings-daemon/plugins/media-keys/eject
+/org/gnome/settings-daemon/plugins/media-keys/email
+/org/gnome/settings-daemon/plugins/media-keys/help
+/org/gnome/settings-daemon/plugins/media-keys/home
+/org/gnome/settings-daemon/plugins/media-keys/media
+/org/gnome/settings-daemon/plugins/media-keys/next
+/org/gnome/settings-daemon/plugins/media-keys/pause
+/org/gnome/settings-daemon/plugins/media-keys/play
+/org/gnome/settings-daemon/plugins/media-keys/previous
+/org/gnome/settings-daemon/plugins/media-keys/screensaver
+/org/gnome/settings-daemon/plugins/media-keys/search
+/org/gnome/settings-daemon/plugins/media-keys/stop
+/org/gnome/settings-daemon/plugins/media-keys/www
diff --git a/data/dconf/gdm.in b/data/dconf/gdm.in
new file mode 100644
index 0000000..4d8bf17
--- /dev/null
+++ b/data/dconf/gdm.in
@@ -0,0 +1,2 @@
+user-db:user
+file-db:@DATADIR@/@PACKAGE@/greeter-dconf-defaults
diff --git a/data/dconf/meson.build b/data/dconf/meson.build
new file mode 100644
index 0000000..8ce18d6
--- /dev/null
+++ b/data/dconf/meson.build
@@ -0,0 +1,25 @@
+gdm_dconf = configure_file(
+ input: 'gdm.in',
+ output: '@BASENAME@',
+ configuration: {
+ 'DATADIR': gdm_prefix / get_option('datadir'),
+ 'PACKAGE': meson.project_name(),
+ },
+ install_dir: get_option('datadir') / 'dconf' / 'profile',
+)
+
+greeter_dconf_defaults = custom_target('greeter-dconf-defaults',
+ output: 'greeter-dconf-defaults',
+ input: files(
+ 'defaults/00-upstream-settings',
+ 'defaults/locks/00-upstream-settings-locks',
+ ),
+ command: [
+ find_program('dconf'),
+ 'compile',
+ '@OUTPUT@',
+ meson.current_source_dir() / 'defaults',
+ ],
+ install: true,
+ install_dir: get_option('datadir') / meson.project_name(),
+)
diff --git a/data/gdm.conf-custom.in b/data/gdm.conf-custom.in
new file mode 100644
index 0000000..9b63ba9
--- /dev/null
+++ b/data/gdm.conf-custom.in
@@ -0,0 +1,16 @@
+# GDM configuration storage
+
+[daemon]
+# Uncomment the line below to force the login screen to use Xorg
+#WaylandEnable=false
+
+[security]
+
+[xdmcp]
+
+[chooser]
+
+[debug]
+# Uncomment the line below to turn on debugging
+#Enable=true
+
diff --git a/data/gdm.conf.in b/data/gdm.conf.in
new file mode 100644
index 0000000..2d8897d
--- /dev/null
+++ b/data/gdm.conf.in
@@ -0,0 +1,81 @@
+<!DOCTYPE busconfig PUBLIC
+ "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+
+ <!-- Only root can own the service -->
+ <policy user="root">
+ <allow own="org.gnome.DisplayManager"/>
+
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.gnome.DisplayManager.Manager"/>
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.gnome.DisplayManager.Display"/>
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.gnome.DisplayManager.LocalDisplayFactory"/>
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.gnome.DisplayManager.Settings"/>
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.freedesktop.DBus.Properties" />
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.freedesktop.DBus.Introspectable"/>
+
+ </policy>
+
+ <policy context="default">
+ <deny send_destination="org.gnome.DisplayManager"
+ send_interface="org.gnome.DisplayManager.Display"/>
+ <deny send_destination="org.gnome.DisplayManager"
+ send_interface="org.gnome.DisplayManager.LocalDisplayFactory"/>
+ <deny send_destination="org.gnome.DisplayManager"
+ send_interface="org.gnome.DisplayManager.Settings"/>
+ <deny send_destination="org.gnome.DisplayManager"
+ send_interface="org.gnome.DisplayManager.Session"/>
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.freedesktop.DBus.Introspectable"/>
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.freedesktop.DBus.ObjectManager"/>
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.freedesktop.DBus.Properties"/>
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.gnome.DisplayManager.Manager"/>
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.gnome.DisplayManager.Display"
+ send_member="GetId"/>
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.gnome.DisplayManager.Display"
+ send_member="GetRemoteHostname"/>
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.gnome.DisplayManager.Display"
+ send_member="GetSeatId"/>
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.gnome.DisplayManager.Display"
+ send_member="GetX11DisplayName"/>
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.gnome.DisplayManager.Display"
+ send_member="GetX11DisplayNumber"/>
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.gnome.DisplayManager.Display"
+ send_member="IsLocal"/>
+
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.gnome.DisplayManager.LocalDisplayFactory"
+ send_member="CreateTransientDisplay"/>
+ </policy>
+
+ <policy user="@GDM_USERNAME@">
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.gnome.DisplayManager.Manager"/>
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.gnome.DisplayManager.Display"/>
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.gnome.DisplayManager.LocalDisplayFactory"/>
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.gnome.DisplayManager.Settings"/>
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.freedesktop.DBus.Properties" />
+ <allow send_destination="org.gnome.DisplayManager"
+ send_interface="org.freedesktop.DBus.Introspectable"/>
+ </policy>
+
+</busconfig>
diff --git a/data/gdm.schemas.in b/data/gdm.schemas.in
new file mode 100644
index 0000000..a1035f9
--- /dev/null
+++ b/data/gdm.schemas.in
@@ -0,0 +1,144 @@
+<gdmschemafile>
+ <schemalist>
+
+ <schema>
+ <key>chooser/Multicast</key>
+ <signature>b</signature>
+ <default>false</default>
+ </schema>
+ <schema>
+ <key>chooser/MulticastAddr</key>
+ <signature>s</signature>
+ <default>ff02::1</default>
+ </schema>
+
+ <schema>
+ <key>daemon/User</key>
+ <signature>s</signature>
+ <default>@GDM_USERNAME@</default>
+ </schema>
+ <schema>
+ <key>daemon/Group</key>
+ <signature>s</signature>
+ <default>@GDM_GROUPNAME@</default>
+ </schema>
+ <schema>
+ <key>daemon/AutomaticLoginEnable</key>
+ <signature>b</signature>
+ <default>false</default>
+ </schema>
+ <schema>
+ <key>daemon/AutomaticLogin</key>
+ <signature>s</signature>
+ <default></default>
+ </schema>
+ <schema>
+ <key>daemon/TimedLoginEnable</key>
+ <signature>b</signature>
+ <default>false</default>
+ </schema>
+ <schema>
+ <key>daemon/TimedLogin</key>
+ <signature>s</signature>
+ <default></default>
+ </schema>
+ <schema>
+ <key>daemon/TimedLoginDelay</key>
+ <signature>i</signature>
+ <default>30</default>
+ </schema>
+ <schema>
+ <key>daemon/InitialSetupEnable</key>
+ <signature>b</signature>
+ <default>true</default>
+ </schema>
+ <schema>
+ <key>daemon/PreferredDisplayServer</key>
+ <signature>s</signature>
+ <default>wayland</default>
+ </schema>
+ <schema>
+ <key>daemon/WaylandEnable</key>
+ <signature>b</signature>
+ <default>true</default>
+ </schema>
+ <schema>
+ <key>daemon/XorgEnable</key>
+ <signature>b</signature>
+ <default>true</default>
+ </schema>
+ <schema>
+ <key>security/AllowRemoteAutoLogin</key>
+ <signature>b</signature>
+ <default>false</default>
+ </schema>
+
+ <schema>
+ <key>debug/Enable</key>
+ <signature>b</signature>
+ <default>false</default>
+ </schema>
+
+ <schema>
+ <key>security/DisallowTCP</key>
+ <signature>b</signature>
+ <default>true</default>
+ </schema>
+ <schema>
+ <key>xdmcp/Enable</key>
+ <signature>b</signature>
+ <default>false</default>
+ </schema>
+ <schema>
+ <key>xdmcp/ShowLocalGreeter</key>
+ <signature>b</signature>
+ <default>true</default>
+ </schema>
+ <schema>
+ <key>xdmcp/MaxPending</key>
+ <signature>i</signature>
+ <default>4</default>
+ </schema>
+ <schema>
+ <key>xdmcp/MaxSessions</key>
+ <signature>i</signature>
+ <default>16</default>
+ </schema>
+ <schema>
+ <key>xdmcp/MaxWait</key>
+ <signature>i</signature>
+ <default>30</default>
+ </schema>
+ <schema>
+ <key>xdmcp/DisplaysPerHost</key>
+ <signature>i</signature>
+ <default>1</default>
+ </schema>
+ <schema>
+ <key>xdmcp/Port</key>
+ <signature>i</signature>
+ <default>177</default>
+ </schema>
+ <schema>
+ <key>xdmcp/HonorIndirect</key>
+ <signature>b</signature>
+ <default>true</default>
+ </schema>
+ <schema>
+ <key>xdmcp/MaxWaitIndirect</key>
+ <signature>i</signature>
+ <default>30</default>
+ </schema>
+ <schema>
+ <key>xdmcp/PingIntervalSeconds</key>
+ <signature>i</signature>
+ <default>0</default>
+ </schema>
+ <schema>
+ <key>xdmcp/Willing</key>
+ <signature>s</signature>
+ <default>@gdmconfdir@/Xwilling</default>
+ </schema>
+ </schemalist>
+</gdmschemafile>
+
diff --git a/data/gdm.service.in b/data/gdm.service.in
new file mode 100644
index 0000000..17e8a8d
--- /dev/null
+++ b/data/gdm.service.in
@@ -0,0 +1,33 @@
+[Unit]
+Description=GNOME Display Manager
+
+# replaces the getty
+Conflicts=getty@tty${GDM_INITIAL_VT}.service
+After=getty@tty${GDM_INITIAL_VT}.service
+
+# replaces plymouth-quit since it quits plymouth on its own
+Conflicts=${PLYMOUTH_QUIT_SERVICE}
+After=${PLYMOUTH_QUIT_SERVICE}
+
+# Needs all the dependencies of the services it's replacing
+# pulled from getty@.service and ${PLYMOUTH_QUIT_SERVICE}
+# (except for plymouth-quit-wait.service since it waits until
+# plymouth is quit, which we do)
+After=rc-local.service plymouth-start.service systemd-user-sessions.service
+
+# GDM takes responsibility for stopping plymouth, so if it fails
+# for any reason, make sure plymouth still stops
+OnFailure=plymouth-quit.service
+
+[Service]
+ExecStart=${sbindir}/gdm
+KillMode=mixed
+Restart=always
+IgnoreSIGPIPE=no
+BusName=org.gnome.DisplayManager
+EnvironmentFile=-${LANG_CONFIG_FILE}
+ExecReload=/bin/kill -SIGHUP $MAINPID
+KeyringMode=shared
+
+[Install]
+Alias=display-manager.service
diff --git a/data/gnome-login.session.in b/data/gnome-login.session.in
new file mode 100644
index 0000000..6347096
--- /dev/null
+++ b/data/gnome-login.session.in
@@ -0,0 +1,3 @@
+[GNOME Session]
+Name=Display Manager
+RequiredComponents=@gnome_required_components@;
diff --git a/data/locale.alias b/data/locale.alias
new file mode 100644
index 0000000..7cabea6
--- /dev/null
+++ b/data/locale.alias
@@ -0,0 +1,7 @@
+# You could insert none UTF-8 locales likes C, ja_JP.eucJP
+# The format is language label, space and locale name but
+# the language label is no longer used.
+#
+# This file will be removed in the future once gdm setup tool is generated.
+#
+#Unspecified C,POSIX
diff --git a/data/meson.build b/data/meson.build
new file mode 100644
index 0000000..2dec4c2
--- /dev/null
+++ b/data/meson.build
@@ -0,0 +1,214 @@
+subdir('applications')
+subdir('autostart')
+subdir('dconf')
+
+# XPath configs
+foreach file : [ 'Init', 'PreSession', 'PostSession' ]
+ generated_file = configure_file(
+ input: '@0@.in'.format(file),
+ output: file,
+ configuration: { 'X_PATH': x_path },
+ )
+
+ install_data(generated_file,
+ install_dir: gdmconfdir / file,
+ install_mode: 'rwxr-xr-x',
+ rename: 'Default'
+ )
+endforeach
+
+install_data('PostLogin',
+ rename: 'Default.sample',
+ install_mode: 'rwxr-xr-x',
+ install_dir: gdmconfdir / 'PostLogin',
+)
+
+# gdm.conf
+configure_file(
+ input: 'gdm.conf.in',
+ output: '@BASENAME@',
+ configuration: {
+ 'GDM_USERNAME': get_option('user')
+ },
+ install_dir: dbus_sys_dir,
+)
+configure_file(
+ input: 'gdm.conf-custom.in',
+ output: gdm_custom_conf.split('/')[-1],
+ copy: true,
+ install_mode: 'rw-r--r--',
+ install_dir: run_command(find_program('dirname'), gdm_custom_conf).stdout().strip(),
+)
+
+# GSettings schema
+install_data('org.gnome.login-screen.gschema.xml',
+ install_dir: get_option('datadir') / 'glib-2.0' / 'schemas',
+)
+compiled_gschema = gnome.compile_schemas()
+
+# gdm.schema
+gdm_schema = configure_file(
+ input: 'gdm.schemas.in',
+ output: '@BASENAME@',
+ configuration: {
+ 'GDM_USERNAME': get_option('user'),
+ 'GDM_GROUPNAME': get_option('group'),
+ 'gdmconfdir': gdmconfdir,
+ },
+ install_dir: get_option('datadir') / 'gdm',
+)
+
+install_data('locale.alias',
+ install_dir: get_option('datadir') / 'gdm',
+)
+
+gdm_gnome_shell_component = 'org.gnome.Shell'
+gdm_gnome_session_required_components = [
+ 'org.gnome.SettingsDaemon.A11ySettings',
+ 'org.gnome.SettingsDaemon.Color',
+ 'org.gnome.SettingsDaemon.Datetime',
+ 'org.gnome.SettingsDaemon.Housekeeping',
+ 'org.gnome.SettingsDaemon.Keyboard',
+ 'org.gnome.SettingsDaemon.MediaKeys',
+ 'org.gnome.SettingsDaemon.Power',
+ 'org.gnome.SettingsDaemon.PrintNotifications',
+ 'org.gnome.SettingsDaemon.Rfkill',
+ 'org.gnome.SettingsDaemon.ScreensaverProxy',
+ 'org.gnome.SettingsDaemon.Sharing',
+ 'org.gnome.SettingsDaemon.Smartcard',
+ 'org.gnome.SettingsDaemon.Sound',
+ 'org.gnome.SettingsDaemon.Wacom',
+]
+
+gdm_gnome_user_session_wanted_components = gdm_gnome_session_required_components
+gdm_gnome_user_session_wanted_components += [
+ 'org.gnome.SettingsDaemon.XSettings',
+]
+
+configure_file(
+ input: 'gnome-login.session.in',
+ output: '@BASENAME@',
+ configuration: {
+ 'libexecdir': gdm_prefix / get_option('libexecdir'),
+ 'gnome_required_components': ';'.join(
+ [ gdm_gnome_shell_component ] + gdm_gnome_session_required_components),
+ },
+ install_dir: get_option('datadir') / 'gnome-session' / 'sessions',
+)
+
+# PAM
+pam_data_files_map = {
+ 'redhat': [
+ 'gdm-autologin',
+ 'gdm-launch-environment',
+ 'gdm-fingerprint',
+ 'gdm-smartcard',
+ 'gdm-password',
+ ],
+ 'openembedded': [
+ 'gdm-autologin',
+ 'gdm-launch-environment',
+ 'gdm-password',
+ ],
+ 'exherbo': [
+ 'gdm-autologin',
+ 'gdm-launch-environment',
+ 'gdm-fingerprint',
+ 'gdm-smartcard',
+ 'gdm-password',
+ ],
+ 'lfs': [
+ 'gdm-autologin',
+ 'gdm-launch-environment',
+ 'gdm-fingerprint',
+ 'gdm-smartcard',
+ 'gdm-password',
+ ],
+ 'arch': [
+ 'gdm-autologin',
+ 'gdm-launch-environment',
+ 'gdm-fingerprint',
+ 'gdm-smartcard',
+ 'gdm-password',
+ ],
+ 'none': [],
+ # We should no longer have 'autodetect' at this point
+}
+
+pam_data_files = pam_data_files_map[default_pam_config]
+pam_prefix = (get_option('pam-prefix') != '')? get_option('pam-prefix') : get_option('sysconfdir')
+foreach _pam_filename : pam_data_files
+ install_data('pam-@0@/@1@.pam'.format(default_pam_config, _pam_filename),
+ rename: _pam_filename,
+ install_dir: pam_prefix / 'pam.d',
+ )
+endforeach
+
+gdm_rules = configure_file(
+ input: '61-gdm.rules.in',
+ output: '@BASENAME@',
+ configuration: {
+ 'libexecdir': gdm_prefix / get_option('libexecdir'),
+ },
+ install_dir: udev_dir,
+)
+
+# DBus service files
+service_config = configuration_data()
+service_config.set('sbindir', gdm_prefix / get_option('sbindir'))
+service_config.set('GDM_INITIAL_VT', get_option('initial-vt'))
+service_config.set('LANG_CONFIG_FILE', lang_config_file)
+if plymouth_dep.found()
+ service_config.set('PLYMOUTH_QUIT_SERVICE', 'plymouth-quit.service')
+else
+ service_config.set('PLYMOUTH_QUIT_SERVICE', '')
+endif
+
+if get_option('systemdsystemunitdir') != ''
+ systemd_systemunitdir = get_option('systemdsystemunitdir')
+else
+ systemd_systemunitdir = systemd_dep.get_pkgconfig_variable('systemdsystemunitdir')
+endif
+
+if get_option('systemduserunitdir') != ''
+ systemd_userunitdir = get_option('systemduserunitdir')
+else
+ systemd_userunitdir = systemd_dep.get_pkgconfig_variable('systemduserunitdir',
+ define_variable: ['prefix', get_option('prefix')])
+endif
+
+configure_file(
+ input: 'gdm.service.in',
+ output: '@BASENAME@',
+ configuration: service_config,
+ install_dir: systemd_systemunitdir,
+ format: 'cmake'
+)
+
+gdm_gnome_session_wanted_targets = []
+foreach component: gdm_gnome_user_session_wanted_components
+ gdm_gnome_session_wanted_targets += 'Wants=@0@.target'.format(component)
+endforeach
+
+configure_file(
+ input: 'session.conf.in',
+ output: 'session.conf',
+ configuration: {
+ 'requires_component': gdm_gnome_shell_component,
+ 'wants_required_components': '\n'.join(gdm_gnome_session_wanted_targets),
+ },
+ install_dir: systemd_userunitdir / 'gnome-session@gnome-login.target.d',
+)
+
+# XSession
+if get_option('gdm-xsession')
+ configure_file(
+ input: 'Xsession.in',
+ output: '@BASENAME@',
+ configuration: {
+ 'libexecdir': gdm_prefix / get_option('libexecdir'),
+ 'XSESSION_SHELL': get_option('solaris')? '/bin/ksh' : '/bin/sh',
+ },
+ install_dir: gdmconfdir,
+ )
+endif
diff --git a/data/org.gnome.login-screen.gschema.xml b/data/org.gnome.login-screen.gschema.xml
new file mode 100644
index 0000000..7b5c54d
--- /dev/null
+++ b/data/org.gnome.login-screen.gschema.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schemalist gettext-domain="gdm">
+ <schema id="org.gnome.login-screen" path="/org/gnome/login-screen/">
+ <key name="enable-fingerprint-authentication" type="b">
+ <default>true</default>
+ <summary>
+ Whether or not to allow fingerprint readers for login
+ </summary>
+ <description>
+ The login screen can optionally allow users who have enrolled
+ their fingerprints to log in using those prints.
+ </description>
+ </key>
+ <key name="enable-smartcard-authentication" type="b">
+ <default>true</default>
+ <summary>
+ Whether or not to allow smartcard readers for login
+ </summary>
+ <description>
+ The login screen can optionally allow users who have smartcards
+ to log in using those smartcards.
+ </description>
+ </key>
+ <key name="enable-password-authentication" type="b">
+ <default>true</default>
+ <summary>
+ Whether or not to allow passwords for login
+ </summary>
+ <description>
+ The login screen can be configured to disallow password authentication,
+ forcing the user to use smartcard or fingerprint authentication.
+ </description>
+ </key>
+ <key name="logo" type="s">
+ <default>''</default>
+ <summary>
+ Path to small image at top of user list
+ </summary>
+ <description>
+ The login screen can optionally show a small image to provide site
+ administrators and distributions a way to display branding.
+ </description>
+ </key>
+ <key name="fallback-logo" type="s">
+ <default>''</default>
+ <summary>
+ Path to small image at top of user list
+ </summary>
+ <description>
+ The fallback login screen can optionally show a small image to provide
+ site administrators and distributions a way to display branding.
+ </description>
+ </key>
+ <key name="disable-user-list" type="b">
+ <default>false</default>
+ <summary>
+ Avoid showing user list
+ </summary>
+ <description>
+ The login screen normally shows a list of available users to log in
+ as. This setting can be toggled to disable showing the user list.
+ </description>
+ </key>
+ <key name="banner-message-enable" type="b">
+ <default>false</default>
+ <summary>
+ Enable showing the banner message
+ </summary>
+ <description>
+ Set to true to show the banner message text.
+ </description>
+ </key>
+ <key name="banner-message-text" type="s">
+ <default>''</default>
+ <summary>
+ Banner message text
+ </summary>
+ <description>
+ Text banner message to show in the login window.
+ </description>
+ </key>
+ <key name="disable-restart-buttons" type="b">
+ <default>false</default>
+ <summary>
+ Disable showing the restart buttons
+ </summary>
+ <description>
+ Set to true to disable showing the restart buttons in the login window.
+ </description>
+ </key>
+ <key name="allowed-failures" type="i">
+ <default>3</default>
+ <summary>
+ Number of allowed authentication failures
+ </summary>
+ <description>
+ The number of times a user is allowed to attempt authentication, before
+ giving up and going back to user selection.
+ </description>
+ </key>
+ </schema>
+</schemalist>
diff --git a/data/pam-arch/gdm-autologin.pam b/data/pam-arch/gdm-autologin.pam
new file mode 100644
index 0000000..30bdf52
--- /dev/null
+++ b/data/pam-arch/gdm-autologin.pam
@@ -0,0 +1,15 @@
+#%PAM-1.0
+
+auth required pam_shells.so
+auth requisite pam_nologin.so
+auth optional pam_permit.so
+auth required pam_env.so
+auth [success=ok default=1] pam_gdm.so
+auth optional pam_gnome_keyring.so
+
+account include system-local-login
+
+password required pam_deny.so
+
+session include system-local-login
+session optional pam_gnome_keyring.so auto_start
diff --git a/data/pam-arch/gdm-fingerprint.pam b/data/pam-arch/gdm-fingerprint.pam
new file mode 100644
index 0000000..2aaf9f6
--- /dev/null
+++ b/data/pam-arch/gdm-fingerprint.pam
@@ -0,0 +1,17 @@
+#%PAM-1.0
+
+auth required pam_shells.so
+auth requisite pam_nologin.so
+auth requisite pam_faillock.so preauth
+auth required pam_fprintd.so
+auth optional pam_permit.so
+auth required pam_env.so
+auth [success=ok default=1] pam_gdm.so
+auth optional pam_gnome_keyring.so
+
+account include system-local-login
+
+password required pam_deny.so
+
+session include system-local-login
+session optional pam_gnome_keyring.so auto_start
diff --git a/data/pam-arch/gdm-launch-environment.pam b/data/pam-arch/gdm-launch-environment.pam
new file mode 100644
index 0000000..20d1810
--- /dev/null
+++ b/data/pam-arch/gdm-launch-environment.pam
@@ -0,0 +1,17 @@
+#%PAM-1.0
+
+auth required pam_succeed_if.so audit quiet_success user in gdm:gnome-initial-setup
+auth optional pam_permit.so
+auth required pam_env.so
+
+account required pam_succeed_if.so audit quiet_success user in gdm:gnome-initial-setup
+account optional pam_permit.so
+
+password required pam_deny.so
+
+session optional pam_loginuid.so
+session optional pam_keyinit.so force revoke
+session required pam_succeed_if.so audit quiet_success user in gdm:gnome-initial-setup
+session optional pam_permit.so
+-session optional pam_systemd.so
+session required pam_env.so user_readenv=1
diff --git a/data/pam-arch/gdm-password.pam b/data/pam-arch/gdm-password.pam
new file mode 100644
index 0000000..137242a
--- /dev/null
+++ b/data/pam-arch/gdm-password.pam
@@ -0,0 +1,12 @@
+#%PAM-1.0
+
+auth include system-local-login
+auth optional pam_gnome_keyring.so
+
+account include system-local-login
+
+password include system-local-login
+password optional pam_gnome_keyring.so use_authtok
+
+session include system-local-login
+session optional pam_gnome_keyring.so auto_start
diff --git a/data/pam-arch/gdm-smartcard.pam b/data/pam-arch/gdm-smartcard.pam
new file mode 100644
index 0000000..6d7333b
--- /dev/null
+++ b/data/pam-arch/gdm-smartcard.pam
@@ -0,0 +1,17 @@
+#%PAM-1.0
+
+auth required pam_shells.so
+auth requisite pam_nologin.so
+auth requisite pam_faillock.so preauth
+auth required pam_pkcs11.so wait_for_card card_only
+auth optional pam_permit.so
+auth required pam_env.so
+auth [success=ok default=1] pam_gdm.so
+auth optional pam_gnome_keyring.so
+
+account include system-local-login
+
+password required pam_deny.so
+
+session include system-local-login
+session optional pam_gnome_keyring.so auto_start
diff --git a/data/pam-exherbo/gdm-autologin.pam b/data/pam-exherbo/gdm-autologin.pam
new file mode 100644
index 0000000..283cd87
--- /dev/null
+++ b/data/pam-exherbo/gdm-autologin.pam
@@ -0,0 +1,12 @@
+#%PAM-1.0
+
+auth [success=ok default=1] pam_gdm.so
+auth optional pam_gnome_keyring.so
+auth sufficient pam_permit.so
+
+account include system-local-login
+
+password include system-local-login
+
+session include system-local-login
+session optional pam_gnome_keyring.so auto_start
diff --git a/data/pam-exherbo/gdm-fingerprint.pam b/data/pam-exherbo/gdm-fingerprint.pam
new file mode 100644
index 0000000..ab8f7ba
--- /dev/null
+++ b/data/pam-exherbo/gdm-fingerprint.pam
@@ -0,0 +1,16 @@
+#%PAM-1.0
+
+auth required pam_shells.so
+auth required pam_nologin.so
+auth required pam_faillock.so preauth
+auth required pam_fprintd.so
+auth required pam_env.so
+auth [success=ok default=1] pam_gdm.so
+auth optional pam_gnome_keyring.so
+
+account include system-local-login
+
+password include system-local-login
+
+session include system-local-login
+session optional pam_gnome_keyring.so auto_start
diff --git a/data/pam-exherbo/gdm-launch-environment.pam b/data/pam-exherbo/gdm-launch-environment.pam
new file mode 100644
index 0000000..15769ae
--- /dev/null
+++ b/data/pam-exherbo/gdm-launch-environment.pam
@@ -0,0 +1,17 @@
+#%PAM-1.0
+
+auth required pam_succeed_if.so audit quiet_success user = gdm
+auth required pam_env.so
+auth optional pam_permit.so
+
+account required pam_succeed_if.so audit quiet_success user = gdm
+account optional pam_permit.so
+
+password required pam_deny.so
+
+session optional pam_loginuid.so
+session optional pam_keyinit.so force revoke
+session required pam_succeed_if.so audit quiet_success user = gdm
+-session optional pam_systemd.so
+-session optional pam_elogind.so
+session optional pam_permit.so
diff --git a/data/pam-exherbo/gdm-password.pam b/data/pam-exherbo/gdm-password.pam
new file mode 100644
index 0000000..d462030
--- /dev/null
+++ b/data/pam-exherbo/gdm-password.pam
@@ -0,0 +1,12 @@
+#%PAM-1.0
+
+auth include system-local-login
+auth optional pam_gnome_keyring.so
+
+account include system-local-login
+
+password include system-local-login
+password optional pam_gnome_keyring.so use_authtok
+
+session include system-local-login
+session optional pam_gnome_keyring.so auto_start
diff --git a/data/pam-exherbo/gdm-smartcard.pam b/data/pam-exherbo/gdm-smartcard.pam
new file mode 100644
index 0000000..da650b8
--- /dev/null
+++ b/data/pam-exherbo/gdm-smartcard.pam
@@ -0,0 +1,16 @@
+#%PAM-1.0
+
+auth required pam_shells.so
+auth required pam_nologin.so
+auth required pam_faillock.so preauth
+auth required pam_pkcs11.so wait_for_card card_only
+auth required pam_env.so
+auth [success=ok default=1] pam_gdm.so
+auth optional pam_gnome_keyring.so
+
+account include system-local-login
+
+password include system-local-login
+
+session include system-local-login
+session optional pam_gnome_keyring.so auto_start
diff --git a/data/pam-lfs/gdm-autologin.pam b/data/pam-lfs/gdm-autologin.pam
new file mode 100644
index 0000000..953d47e
--- /dev/null
+++ b/data/pam-lfs/gdm-autologin.pam
@@ -0,0 +1,19 @@
+# Begin /etc/pam.d/gdm-autologin
+
+auth requisite pam_nologin.so
+auth required pam_env.so
+
+auth required pam_succeed_if.so uid >= 1000 quiet
+auth optional pam_gdm.so
+auth optional pam_gnome_keyring.so
+auth required pam_permit.so
+
+account include system-account
+password include system-password
+
+session optional pam_keyinit.so revoke
+session required pam_limits.so
+session include system-session
+session optional pam_gnome_keyring.so auto_start
+
+# End /etc/pam.d/gdm-autologin
diff --git a/data/pam-lfs/gdm-fingerprint.pam b/data/pam-lfs/gdm-fingerprint.pam
new file mode 100644
index 0000000..f004882
--- /dev/null
+++ b/data/pam-lfs/gdm-fingerprint.pam
@@ -0,0 +1,18 @@
+# Begin /etc/pam.d/gdm-fingerprint
+
+auth requisite pam_nologin.so
+auth required pam_env.so
+
+auth required pam_succeed_if.so uid >= 1000 quiet
+auth required pam_fprintd.so
+auth optional pam_gnome_keyring.so
+
+account include system-account
+password required pam_fprintd.so
+
+session optional pam_keyinit.so revoke
+session required pam_limits.so
+session include system-session
+session optional pam_gnome_keyring.so auto_start
+
+# End /etc/pam.d/gdm-fingerprint
diff --git a/data/pam-lfs/gdm-launch-environment.pam b/data/pam-lfs/gdm-launch-environment.pam
new file mode 100644
index 0000000..174c347
--- /dev/null
+++ b/data/pam-lfs/gdm-launch-environment.pam
@@ -0,0 +1,17 @@
+# Begin /etc/pam.d/gdm-launch-environment
+
+auth required pam_succeed_if.so audit quiet_success user = gdm
+auth required pam_env.so
+auth optional pam_permit.so
+
+account required pam_succeed_if.so audit quiet_success user = gdm
+account include system-account
+
+password required pam_deny.so
+
+session required pam_succeed_if.so audit quiet_success user = gdm
+-session optional pam_systemd.so
+session optional pam_keyinit.so force revoke
+session optional pam_permit.so
+
+# End /etc/pam.d/gdm-launch-environment
diff --git a/data/pam-lfs/gdm-password.pam b/data/pam-lfs/gdm-password.pam
new file mode 100644
index 0000000..9b52a17
--- /dev/null
+++ b/data/pam-lfs/gdm-password.pam
@@ -0,0 +1,17 @@
+# Begin /etc/pam.d/gdm-password
+
+auth requisite pam_nologin.so
+auth required pam_env.so
+
+auth required pam_succeed_if.so uid >= 1000 quiet
+auth include system-auth
+auth optional pam_gnome_keyring.so
+
+account include system-account
+password include system-password
+
+session required pam_limits.so
+session include system-session
+session optional pam_gnome_keyring.so auto_start
+
+# End /etc/pam.d/gdm-password
diff --git a/data/pam-lfs/gdm-smartcard.pam b/data/pam-lfs/gdm-smartcard.pam
new file mode 100644
index 0000000..f2c1b64
--- /dev/null
+++ b/data/pam-lfs/gdm-smartcard.pam
@@ -0,0 +1,17 @@
+# Begin /etc/pam.d/gdm-smartcard
+
+auth requisite pam_nologin.so
+auth required pam_env.so
+
+auth required pam_succeed_if.so uid >= 1000 quiet
+auth required pam_pkcs11.so wait_for_card card_only
+auth optional pam_gnome_keyring.so
+
+account include system-account
+password required pam_pkcs11.so
+
+session required pam_limits.so
+session include system-session
+session optional pam_gnome_keyring.so auto_start
+
+# End /etc/pam.d/gdm-smartcard
diff --git a/data/pam-openembedded/gdm-autologin.pam b/data/pam-openembedded/gdm-autologin.pam
new file mode 100644
index 0000000..a9f4354
--- /dev/null
+++ b/data/pam-openembedded/gdm-autologin.pam
@@ -0,0 +1,5 @@
+#%PAM-1.0
+auth required pam_permit.so
+account include common-account
+password include common-auth
+session include common-session
diff --git a/data/pam-openembedded/gdm-launch-environment.pam b/data/pam-openembedded/gdm-launch-environment.pam
new file mode 100644
index 0000000..a9f4354
--- /dev/null
+++ b/data/pam-openembedded/gdm-launch-environment.pam
@@ -0,0 +1,5 @@
+#%PAM-1.0
+auth required pam_permit.so
+account include common-account
+password include common-auth
+session include common-session
diff --git a/data/pam-openembedded/gdm-password.pam b/data/pam-openembedded/gdm-password.pam
new file mode 100644
index 0000000..758464d
--- /dev/null
+++ b/data/pam-openembedded/gdm-password.pam
@@ -0,0 +1,5 @@
+#%PAM-1.0
+auth include common-auth
+account include common-account
+password include common-password
+session include common-session
diff --git a/data/pam-redhat/gdm-autologin.pam b/data/pam-redhat/gdm-autologin.pam
new file mode 100644
index 0000000..c31ff27
--- /dev/null
+++ b/data/pam-redhat/gdm-autologin.pam
@@ -0,0 +1,16 @@
+#%PAM-1.0
+auth [success=ok default=1] pam_gdm.so
+-auth optional pam_gnome_keyring.so
+auth sufficient pam_permit.so
+account required pam_nologin.so
+account include system-auth
+password include system-auth
+session required pam_selinux.so close
+session required pam_loginuid.so
+session optional pam_console.so
+session required pam_selinux.so open
+session optional pam_keyinit.so force revoke
+session required pam_namespace.so
+session include system-auth
+session optional pam_gnome_keyring.so auto_start
+session include postlogin
diff --git a/data/pam-redhat/gdm-fingerprint.pam b/data/pam-redhat/gdm-fingerprint.pam
new file mode 100644
index 0000000..1483cdf
--- /dev/null
+++ b/data/pam-redhat/gdm-fingerprint.pam
@@ -0,0 +1,16 @@
+auth substack fingerprint-auth
+auth include postlogin
+
+account required pam_nologin.so
+account include fingerprint-auth
+
+password include fingerprint-auth
+
+session required pam_selinux.so close
+session required pam_loginuid.so
+session optional pam_console.so
+session required pam_selinux.so open
+session optional pam_keyinit.so force revoke
+session required pam_namespace.so
+session include fingerprint-auth
+session include postlogin
diff --git a/data/pam-redhat/gdm-launch-environment.pam b/data/pam-redhat/gdm-launch-environment.pam
new file mode 100644
index 0000000..2e9ea2b
--- /dev/null
+++ b/data/pam-redhat/gdm-launch-environment.pam
@@ -0,0 +1,9 @@
+#%PAM-1.0
+auth required pam_env.so
+auth required pam_permit.so
+auth include postlogin
+account required pam_permit.so
+password required pam_permit.so
+session optional pam_keyinit.so force revoke
+session include system-auth
+session include postlogin
diff --git a/data/pam-redhat/gdm-password.pam b/data/pam-redhat/gdm-password.pam
new file mode 100644
index 0000000..21c04ec
--- /dev/null
+++ b/data/pam-redhat/gdm-password.pam
@@ -0,0 +1,20 @@
+auth [success=done ignore=ignore default=bad] pam_selinux_permit.so
+auth substack password-auth
+auth optional pam_gnome_keyring.so
+auth include postlogin
+
+account required pam_nologin.so
+account include password-auth
+
+password substack password-auth
+-password optional pam_gnome_keyring.so use_authtok
+
+session required pam_selinux.so close
+session required pam_loginuid.so
+session optional pam_console.so
+session required pam_selinux.so open
+session optional pam_keyinit.so force revoke
+session required pam_namespace.so
+session include password-auth
+session optional pam_gnome_keyring.so auto_start
+session include postlogin
diff --git a/data/pam-redhat/gdm-smartcard.pam b/data/pam-redhat/gdm-smartcard.pam
new file mode 100644
index 0000000..5024e52
--- /dev/null
+++ b/data/pam-redhat/gdm-smartcard.pam
@@ -0,0 +1,16 @@
+auth substack smartcard-auth
+auth include postlogin
+
+account required pam_nologin.so
+account include smartcard-auth
+
+password include smartcard-auth
+
+session required pam_selinux.so close
+session required pam_loginuid.so
+session optional pam_console.so
+session required pam_selinux.so open
+session optional pam_keyinit.so force revoke
+session required pam_namespace.so
+session include smartcard-auth
+session include postlogin
diff --git a/data/session.conf.in b/data/session.conf.in
new file mode 100644
index 0000000..7bfa365
--- /dev/null
+++ b/data/session.conf.in
@@ -0,0 +1,4 @@
+[Unit]
+@wants_required_components@
+
+Requires=@requires_component@.target