You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

212 lines
5.1 KiB

#!/bin/sh
# see also http://www.enricozini.org/2008/tips/lightweight-autologin/
if [ ! -x /usr/bin/X ]; then
echo "SKIP autologin: X not installed" >&2
exit 0
fi
USER=kometa
add_nopasswdlogin_group()
{
[ -f "/etc/pam.d/$1" ] &&
egrep -qs '^auth.+user[[:blank:]]+ingroup[[:blank:]]+nopasswdlogin' "/etc/pam.d/$1" &&
groupadd -r nopasswdlogin &&
gpasswd -a "$USER" nopasswdlogin
}
BAK=".save"
backup() {
[ -f "$1" -a ! -f "$1$BAK" ] || return 1
cp -av "$1" "$1$BAK"
}
## this is only relevant for installable livecd
### FIXME: this shouldn't proceed in other cases!
restore_later() {
[ -n "$1" ] || return 0
local prefix="/usr/lib/alterator/hooks/livecd-preinstall.d"
[ -d "$prefix" ] || mkdir -p "$prefix"
local hook="$prefix/51-disable-autologin-again.sh"
[ -s "$hook" ] || cat >> "$hook" <<- EOF
#!/bin/sh
. livecd-functions
EOF
echo mv -v "\$destdir$1$BAK" "\$destdir$1" >> "$hook"
chmod +x "$hook"
}
## autologin^2
AUTOLOGIN_CFG=/etc/sysconfig/autologin
if [ -x /usr/sbin/autologin ]; then
backup "$AUTOLOGIN_CFG"
cat >> "$AUTOLOGIN_CFG" <<- EOF
USER=$USER
AUTOLOGIN=yes
EOF
restore_later "$AUTOLOGIN_CFG"
fi
## lightdm autologin
LIGHTDM_CONF=/etc/lightdm/lightdm.conf
if [ -f "$LIGHTDM_CONF" ]; then
mkdir -p /etc/lightdm/lightdm.conf.d
cat > /etc/lightdm/lightdm.conf.d/autologin.conf <<AUTOLOGIN_LIGHTDM
[Seat:*]
autologin-user=kometa
autologin-user-timeout=0
AUTOLOGIN_LIGHTDM
default_session="$(ls -1 /usr/share/xsessions/*.desktop | sed -n 's/^.*\/\([^/]\+\)\.desktop$/\1/;1p')"
if [ -n "$default_session" ]; then
echo "autologin-session=$default_session" >> /etc/lightdm/lightdm.conf.d/autologin.conf
else
echo "** WARNING: no sessions found in /usr/share/xsessions/" >&2
fi
backup "/etc/group"
add_nopasswdlogin_group lightdm ||:
restore_later "/etc/group"
fi
## gdm2 autologin
GDM_CONF=/etc/X11/gdm/custom.conf
if [ -f "$GDM_CONF" ]; then
backup "$GDM_CONF"
sed -i -e '/\[daemon\]/aAutomaticLoginEnable=true\nAutomaticLogin='$USER \
"$GDM_CONF"
backup "/etc/group"
add_nopasswdlogin_group gdm ||:
restore_later "$GDM_CONF"
restore_later "/etc/group"
fi
## lxdm autologin
LXDM_CONF=/etc/lxdm/lxdm.conf
if [ -f "$LXDM_CONF" ]; then
backup "$LXDM_CONF"
sed -i -e "s/\# autologin=dgod/autologin=$USER/" \
"$LXDM_CONF"
backup "/etc/group"
add_nopasswdlogin_group lxdm ||:
restore_later "$LXDM_CONF"
restore_later "/etc/group"
fi
autologin_kdm() {
backup "$1"
sed -i \
-e '/AutoLoginEnable/ s,^.*$,AutoLoginEnable=true,' \
-e '/AutoLoginUser/ s,^.*$,AutoLoginUser='$USER',' \
"$1"
restore_later "$1"
}
## kdm3 autologin
# FIXME: tde packages have kdmrc in /usr via an absolute symlink :-(
KDM_ETC=/etc/X11/kdm
KDM_USR=/usr/share/kde/config/kdm
if [ "$(readlink "$KDM_ETC")" = "$KDM_USR" ]; then
rm -f "$KDM_ETC"
ln -s ../.."$KDM_USR" "$KDM_ETC"
fi
KDMRC=/etc/X11/kdm/kdmrc
if [ -f "$KDMRC" ]; then autologin_kdm "$KDMRC"; fi
## kdm4 autologin
KDMRC=/etc/X11/kdm4/kdmrc
if [ -f "$KDMRC" ]; then autologin_kdm "$KDMRC"; fi
## sddm autologin
SDDM_RC=/etc/X11/sddm/sddm.conf
SDDM_SESSION=
if [ -f "$SDDM_RC" ]; then
backup "$SDDM_RC"
backup "/etc/group"
add_nopasswdlogin_group sddm ||:
sed -i "s,^User=$,&$USER," "$SDDM_RC"
if [ -f /usr/share/xsessions/lxqt.desktop ]; then
SDDM_SESSION=lxqt
elif [ -f /usr/share/xsessions/plasma.desktop ]; then
SDDM_SESSION=plasma
fi
if [ -n "$SDDM_SESSION" ]; then
sed -i "s,^Session=$,&$SDDM_SESSION," "$SDDM_RC"
fi
restore_later "$SDDM_RC"
restore_later "/etc/group"
fi
## nodm autologin (the last since the most intrusive)
# FIXME nodm and xinitrc should be modified (also in p6)
# WARNING: check user PATH if things go weird!
NODM_RC=/etc/sysconfig/nodm
NODM_EXE=/usr/sbin/nodm
if [ -x "$NODM_EXE" ]; then
backup "$NODM_RC"
cat >> "$NODM_RC" <<- EOF
export NODM_USER=$USER
EOF
restore_later "$NODM_RC"
else
exit 0
fi
# FIXME: drop since #27449 is fixed
PREFDM=/etc/X11/prefdm
if [ -f "$PREFDM" ] && ! grep -q nodm "$PREFDM"; then
backup "$PREFDM"
sed -i \
-e '/AUTOLOGIN_EXE=/ s,^.*$,AUTOLOGIN_EXE='$NODM_EXE',' \
-e '/AUTOLOGIN_CFG=/ s,^.*$,AUTOLOGIN_CFG='$NODM_RC',' \
"$PREFDM"
restore_later "$PREFDM"
fi
# FIXME: drop when #27451 is fixed
NODM_PAM=/etc/pam.d/nodm
for module in pam_console.so pam_ck_connector.so; do
if [ -f /lib*/security/$module ]; then
str="-session optional $module"
grep -q "^$str$" "$NODM_PAM" || echo -e "$str" >> "$NODM_PAM"
fi
done
NODM_POLKIT_CONFDIR=/etc/polkit-1/localauthority/50-local.d
NODM_POLKIT_CONF=org.freedesktop.NetworkManager.pkla
if [ -d "$NODM_POLKIT_CONFDIR" ]; then
cat > "$NODM_POLKIT_CONFDIR/$NODM_POLKIT_CONF" << _EOF_
[nm-applet]
Identity=unix-group:users
Action=org.freedesktop.NetworkManager.*
ResultAny=yes
ResultInactive=no
ResultActive=yes
_EOF_
fi
NODM_DBUS_NM_CONF=/etc/dbus-1/system.d/nm-applet.conf
if [ -f "$NODM_DBUS_NM_CONF" ]; then
sed -i "s/at_console=\"true\"/user=\"$USER\"/" "$NODM_DBUS_NM_CONF"
fi
NODM_G2KR_DIR=/etc/skel/.gnome2/keyrings
mkdir -p "$NODM_G2KR_DIR"
echo -n login > "$NODM_G2KR_DIR"/default
cat > "$NODM_G2KR_DIR"/login.keyring << _EOF_
[keyring]
display-name=login
ctime=0
mtime=0
lock-on-idle=false
lock-after=false
_EOF_
: