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.
ublinux-init/ublinux/rc.preinit.d/52-desktop

171 lines
7.5 KiB

#!/usr/bin/env bash
#
# Initial script for UBLinux
# This script are launching before starting init from initrd script
# Current dir allways must be set to root (/)
# All system path must be relative, except initrd dirs
ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0
DEBUGMODE=no
PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin
unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=.
SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0
SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0
debug_mode "$0" "$@"
SYSCONF="${ROOTFS}${SYSCONF}"
SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/system; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/desktop; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
[[ -f ${ROOTFS}/etc/inittab ]] && sed -i 's/id:.:initdefault:/id:5:initdefault:/' ${ROOTFS}/etc/inittab
switch3don(){
echo "COMPOSITING_SERVER_START=no" >${SYSCONF}/compositing-server
#Gnome-shell does not supports compiz, so turn on it only in classic mode and only after desktop started
if [ -x usr/bin/gnome-shell ] ;then
echo -e "COMPOSITING_WM_START=no\nCOMPOSITING_WM=compiz-fusion" >${SYSCONF}/compositing-wm
sed -i /COMPOSITING_WM_START/d ${SYSCONF}/config
echo COMPOSITING_WM_START=yes >> ${SYSCONF}/config
else
echo -e "COMPOSITING_WM_START=yes\nCOMPOSITING_WM=compiz-fusion" >${SYSCONF}/compositing-wm
fi
# [ -f usr/lib/libDrakX/harddrake/autoconf.pm ] && sed -i 's/^ *Xconfig::glx::write({});$/# Xconfig::glx::write({});/' usr/lib/libDrakX/harddrake/autoconf.pm
[ -f etc/xdg/kwinrc ] && sed -i s/^Enabled=.*/Enabled=false/ etc/xdg/kwinrc
}
switch3doff(){
echo "COMPOSITING_SERVER_START=no" >${SYSCONF}/compositing-server
echo -e "COMPOSITING_WM_START=no\nCOMPOSITING_WM=compiz-fusion" >${SYSCONF}/compositing-wm
sed -i /COMPOSITING_WM_START/d ${SYSCONF}/config
# [ -f usr/lib/libDrakX/harddrake/autoconf.pm ] && sed -i 's/^# Xconfig::glx::write({});$/ Xconfig::glx::write({});/' usr/lib/libDrakX/harddrake/autoconf.pm
[ -f etc/xdg/kwinrc ] && sed -i s/^Enabled=.*/Enabled=true/ etc/xdg/kwinrc
}
setupdm(){
if [ -f lib/systemd/system/$1.service ] ;then
ln -sf /lib/systemd/system/$1.service etc/systemd/system/display-manager.service
ln -sf /lib/systemd/system/graphical.target etc/systemd/system/default.target
[[ -f ${SYSCONF}/desktop ]] && sed -i /DISPLAYMANAGER=/d ${SYSCONF}/desktop
echo "DISPLAYMANAGER=${1%%-plymouth*}" >> ${SYSCONF}/desktop
case ${1%%-plymouth*} in
lightdm)
# FIX lightdm-greater
mkdir -p usr/libexec
ln -sf /usr/lib/at-spi-bus-launcher usr/libexec/at-spi-bus-launcher
ln -sf init usr/bin/systemd
;;
esac
fi
}
setupde(){
if [[ -f usr/share/xsessions/$1.desktop ]] ;then
sed -i /DESKTOP=/d ${SYSCONF}/desktop
echo "DESKTOP=$1" >> ${SYSCONF}/desktop
# ln -sf $1.desktop usr/share/xsessions/default.desktop
# cat > usr/share/xsessions/default.desktop <<EOF
#[Desktop Entry]
#Encoding=UTF-8
#Name=DEFAULT
#Name[ru]=Сеанс по умолчанию (${1})
#Comment=Default UBLinux Session
#Comment[ru]=Предопределённая рабочая среда пользователя
#Exec=gtk-launch /usr/share/xsessions/${1}.desktop
#Icon=
#Type=Application
#EOF
cp -a usr/share/xsessions/$1.desktop usr/share/xsessions/default.desktop
sed -i "s/Name=.*/Name=Default Session \(${1}\)/" usr/share/xsessions/default.desktop
sed -i "s/Name\[ru\]=.*/Name\[ru\]=Сеанс по умолчанию \(${1}\)/" usr/share/xsessions/default.desktop
[[ -d etc/X11/wmsession.d ]] && ln -sf /usr/share/xsessions/default.desktop etc/X11/wmsession.d/00DEFAULT
[[ -d etc/X11/dm/Sessions ]] && ln -sf /usr/share/xsessions/default.desktop etc/X11/dm/Sessions/00DEFAULT.desktop
#[ -d etc/X11/wmsession.d ] && cp -pf /usr/share/xsessions/default.desktop etc/X11/wmsession.d/00DEFAULT
#[ -d etc/X11/dm/Sessions ] && cp -pf /usr/share/xsessions/default.desktop etc/X11/dm/Sessions/00DEFAULT.desktop
case $1 in
xfce)
# FIX xfce.screensaver add button
[[ -f usr/share/dbus-1/services/org.xfce.ScreenSaver.service ]] && rm -f usr/share/dbus-1/services/org.xfce.ScreenSaver.service
[[ -f etc/xdg/autostart/xscreensaver.desktop ]] && rm -f etc/xdg/autostart/xscreensaver.desktop
;;
esac
fi
}
disabledmde(){
[ -f etc/inittab ] && sed -i 's/id:.:initdefault:/id:3:initdefault:/' etc/inittab
ln -sf /lib/systemd/system/multi-user.target etc/systemd/system/default.target
DISPLAYMANAGER=none
sed -i /DISPLAYMANAGER=/d ${SYSCONF}/desktop
echo "DISPLAYMANAGER=$DISPLAYMANAGER" >> ${SYSCONF}/desktop
DESKTOP=none
sed -i /DESKTOP=/d ${SYSCONF}/desktop
echo "DESKTOP=$DESKTOP" >> ${SYSCONF}/desktop
}
[ "$(cmdline_parameter 3ddesktop)" ] && switch3don
[ "$(cmdline_parameter no3ddesktop)" ] && switch3doff
for i in $(cmdline_value desktop | tr , " " ) ;do
case $i in
3d) switch3don ;;
no3d) switch3doff ;;
xfce) DESKTOP=xfce ;;
kde) DESKTOP=kde4 ;;
gnome) DESKTOP=gnome ;;
gnome-shell|gnome3) DESKTOP=gnomeshell ;;
lxde) DESKTOP=lxde ;;
lxqt) DESKTOP=lxqt ;;
i3) DESKTOP=i3 ;;
steam) DESKTOP=steam ;;
plasma) DESKTOP=plasma ;;
mate) DESKTOP=mate ;;
ukui) DESKTOP=ukui ;;
pantheon) DESKTOP=pantheon ;;
none) DISPLAYMANAGER=none && DESKTOP=none ;;
lightdm) DISPLAYMANAGER=lightdm ;;
kdm) DISPLAYMANAGER=kdm ;;
gdm) DISPLAYMANAGER=gdm ;;
slim) DISPLAYMANAGER=slim ;;
xdm) DISPLAYMANAGER=xdm ;;
lxdm) DISPLAYMANAGER=lxdm ;;
sddm) DISPLAYMANAGER=sddm ;;
lan) sed -i s/ONBOOT=.*/ONBOOT=yes/ ${SYSCONF}/network-scripts/ifcfg-eth0 2>/dev/null ;;
nolan) sed -i s/ONBOOT=.*/ONBOOT=no/ ${SYSCONF}/network-scripts/ifcfg-eth0 2>/dev/null ;;
*) DESKTOP=${i,,} ;;
esac
done
# Disable Display Manager
[[ "${DESKTOP}" == "none" || "${DISPLAYMANAGER}" == "none" ]] && DESKTOP="none" && DISPLAYMANAGER="none" && disabledmde
# Autodetect Display Manager
[[ -z "${DISPLAYMANAGER}" ]] && for i in slim xdm lxdm kdm gdm sddm lightdm; do
[[ -f lib/systemd/system/$i.service ]] && DISPLAYMANAGER=$i
done
[[ -f lib/systemd/system/${DISPLAYMANAGER}-plymouth.service ]] && setupdm ${DISPLAYMANAGER}-plymouth && rm -f lib/systemd/system/${DISPLAYMANAGER}.service || setupdm ${DISPLAYMANAGER}
# Autodetect Display Environment
# /usr/share/xsessions/*.desktop for X's sessions and /usr/share/wayland-sessions/*.desktop for Wayland's.
[[ -z "${DESKTOP}" ]] && for i in i3 ukui steam lxde lxqt kde4 xfce pantheon mate gnome gnomeshell plasma; do
[[ -f usr/share/wayland-sessions/$i.desktop ]] && DESKTOP=$i
[[ -f usr/share/xsessions/$i.desktop ]] && DESKTOP=$i
done
setupde ${DESKTOP,,}
[[ -z "${DISPLAYMANAGER}" && -z "${DESKTOP}" ]] && disabledmde
# Set default user to Display Manager
if [[ ${DISPLAYMANAGER} == "lightdm" && -n ${DISPLAYMANAGER_DEFAULTUSER} ]]; then
sed -i /DISPLAYMANAGER_DEFAULTUSER=/d ${SYSCONF}/desktop
echo "DISPLAYMANAGER_DEFAULTUSER=${DISPLAYMANAGER_DEFAULTUSER}" >> ${SYSCONF}/desktop
mkdir -p var/lib/lightdm/.cache/lightdm-gtk-greeter/
echo "[greeter]" > var/lib/lightdm/.cache/lightdm-gtk-greeter/state
echo "last-user=${DISPLAYMANAGER_DEFAULTUSER}" >> var/lib/lightdm/.cache/lightdm-gtk-greeter/state
chown -Rf 41:41 var/lib/lightdm/
chmod 1770 var/lib/lightdm/
chmod 755 var/lib/lightdm/.cache/lightdm-gtk-greeter/
chmod 644 var/lib/lightdm/.cache/lightdm-gtk-greeter/state
fi