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.
170 lines
7.5 KiB
170 lines
7.5 KiB
#!/usr/bin/env bash
|
|
#
|
|
# Initial script for Live operating system
|
|
# This script are launching before starting init from linux-live 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/os-config; [[ -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 ;;
|
|
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 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" && ${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 |