|
|
#!/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
|
|
|
|
|
|
[[ -d /usr/lib/ublinux ]] && { unset ROOTFS; unset CMD_CHROOT; } || { ROOTFS='.'; CMD_CHROOT='chroot . '; }
|
|
|
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}/desktop; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
|
|
|
|
|
|
## Сервер XDMCP Lightdm
|
|
|
## LIGHTDM_XDMCP=yes|no|enable|disable
|
|
|
## yes|enable # Включить XDMCP с параметрами по умолчанию
|
|
|
## no|disable # Выключить XDMCP
|
|
|
## LIGHTDM_XDMCP[<parametr>]=<value>
|
|
|
## <parametr> # Название параметра, примеры в /etc/lightdm/lightdm.conf
|
|
|
## port # Порт подключения UDP/IP. По умолчанию: 177
|
|
|
## address # Адрес хоста соединения XDMCP. По умолчанию: все адреса
|
|
|
## key # Ключ аутентификации, используемый для XDM-AUTHENTICATION-1, или пустой, чтобы не использовать аутентификацию (хранится в файлеkeys.conf)
|
|
|
## hostname # Имя хоста для отправки отчета клиентам XDMCP. По умолчанию: системное имя хоста
|
|
|
## <value> # Значение параметра
|
|
|
#LIGHTDM_XDMCP=enable
|
|
|
exec_lightdm_xdmcp(){
|
|
|
[[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && COMMAND=$1 && shift
|
|
|
[[ -n ${COMMAND} ]] || COMMAND="set="
|
|
|
local PARAM="$@"
|
|
|
if [[ -n ${PARAM} ]]; then
|
|
|
local LIGHTDM_XDMCP=
|
|
|
declare -A LIGHTDM_XDMCP
|
|
|
[[ ${PARAM%%=*} =~ [!\$%\&()*+,/\;\<\=\>?\^\{|\}~] ]] || eval "${PARAM%%=*}=\${PARAM#*=}"
|
|
|
fi
|
|
|
FILE_LIGHTDM_CONF="${ROOTFS}/etc/lightdm/lightdm.conf"
|
|
|
FILE_LIGHTDM_XDMCP_CONF="${ROOTFS}/etc/lightdm/lightdm.conf.d/99-xdmcp-ubconfig.conf"
|
|
|
if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && ${#LIGHTDM_XDMCP[@]} -ne 0 ]]; then
|
|
|
if [[ ${LIGHTDM_XDMCP} == @("enable"|"yes") ]]; then
|
|
|
[[ -d ${ROOTFS}/etc/lightdm/${FILE_LIGHTDM_XDMCP_CONF%/*} ]] || mkdir -p ${FILE_LIGHTDM_XDMCP_CONF%/*}
|
|
|
cat <<-EOF | sed 's/^\s*\t*//' > "${FILE_LIGHTDM_XDMCP_CONF}"
|
|
|
[XDMCPServer]
|
|
|
enabled=true
|
|
|
EOF
|
|
|
for LIGHTDM_PARAM in "${!LIGHTDM_XDMCP[@]}"; do
|
|
|
[[ ${LIGHTDM_PARAM} == 0 ]] && continue
|
|
|
echo "${LIGHTDM_PARAM}=${LIGHTDM_XDMCP[${LIGHTDM_PARAM}]}" >> "${FILE_LIGHTDM_XDMCP_CONF}"
|
|
|
done
|
|
|
else
|
|
|
rm -f "${FILE_LIGHTDM_XDMCP_CONF}"
|
|
|
fi
|
|
|
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then
|
|
|
rm -f "${FILE_LIGHTDM_XDMCP_CONF}"
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
## Настройка гритера для менеджера диспелея Lightdm
|
|
|
## По умолчанию если не выбрано, то любой доступный, обычно 'lightdm-gtk-greeter'
|
|
|
## LIGHTDM_GREETER[<parametr>]=<value>
|
|
|
## <parametr> # Название параметра, примеры в /etc/lightdm/lightdm.conf
|
|
|
## greeter-session # Название установленного гритера в каталоге /usr/share/xgreeters/*.desktop
|
|
|
## =lightdm-gtk-greeter # LightDM GTK+ гритер
|
|
|
## =io.elementary.greeter # Pantheon гритер
|
|
|
## greeter-hide-users # Скрыть список пользователей, значения (true|false)
|
|
|
## greeter-allow-guest # В списке пользователей показывать Гостя, значения (true|false)
|
|
|
## greeter-show-manual-login # Разрешить вводить произвольного пользователя, значения (true|false)
|
|
|
## greeter-show-remote-login # Разрешить выбрать удалённого пользователя, значения (true|false)
|
|
|
## <value> # Значение параметра
|
|
|
#LIGHTDM_GREETER[greeter-session]=io.elementary.greeter
|
|
|
exec_lightdm_greeter(){
|
|
|
[[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && COMMAND=$1 && shift
|
|
|
[[ -n ${COMMAND} ]] || COMMAND="set="
|
|
|
local PARAM="$@"
|
|
|
if [[ -n ${PARAM} ]]; then
|
|
|
local LIGHTDM_GREETER=
|
|
|
declare -A LIGHTDM_GREETER
|
|
|
[[ ${PARAM%%=*} =~ [!\$%\&()*+,/\;\<\=\>?\^\{|\}~] ]] || eval "${PARAM%%=*}=\${PARAM#*=}"
|
|
|
fi
|
|
|
FILE_LIGHTDM_CONF="${ROOTFS}/etc/lightdm/lightdm.conf"
|
|
|
FILE_LIGHTDM_GREETER_CONF="${ROOTFS}/etc/lightdm/lightdm.conf.d/99-greeter-ubconfig.conf"
|
|
|
if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ ${#LIGHTDM_GREETER[@]} -ne 0 ]]; then
|
|
|
[[ -d ${ROOTFS}/etc/lightdm/${FILE_LIGHTDM_GREETER_CONF%/*} ]] || mkdir -p ${FILE_LIGHTDM_GREETER_CONF%/*}
|
|
|
cat <<-EOF | sed 's/^\s*\t*//' > "${FILE_LIGHTDM_GREETER_CONF}"
|
|
|
[Seat:*]
|
|
|
EOF
|
|
|
for LIGHTDM_PARAM in "${!LIGHTDM_GREETER[@]}"; do
|
|
|
[[ ${LIGHTDM_PARAM} == 0 ]] && continue
|
|
|
[[ -z ${PARAM} && ${LIGHTDM_PARAM} == "greeter-session" ]] && { [[ -f ${ROOTFS}/usr/share/xgreeters/${LIGHTDM_GREETER[${LIGHTDM_PARAM}]}.desktop ]] || continue; }
|
|
|
if [[ ${LIGHTDM_PARAM} == "greeter-session" ]]; then
|
|
|
if [[ -n ${PARAM} ]]; then
|
|
|
# Если с входящим параметром, т.е. вполнение через ubconfig, то перевыполнить подготовку фона
|
|
|
${ROOTFS}/usr/lib/ublinux/rc.post.d/12-dm-background
|
|
|
else
|
|
|
# Если без входящего параметра, т.е. вполнение при загрузке, то проверить наличие гритера в системе
|
|
|
[[ -f ${ROOTFS}/usr/share/xgreeters/${LIGHTDM_GREETER[${LIGHTDM_PARAM}]}.desktop ]] || continue
|
|
|
fi
|
|
|
fi
|
|
|
|
|
|
echo "${LIGHTDM_PARAM}=${LIGHTDM_GREETER[${LIGHTDM_PARAM}]}" >> "${FILE_LIGHTDM_GREETER_CONF}"
|
|
|
done
|
|
|
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then
|
|
|
rm -f "${FILE_LIGHTDM_GREETER_CONF}"
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
|
|
|
################
|
|
|
##### MAIN #####
|
|
|
################
|
|
|
# Если файл подключен как ресурс с функциями, то выйти
|
|
|
return 0 2>/dev/null && return 0
|
|
|
if [[ -z $@ ]]; then
|
|
|
while read -r FUNCTION; do
|
|
|
$"${FUNCTION##* }"
|
|
|
done < <(declare -F | grep "declare -f exec_")
|
|
|
else
|
|
|
FUNCTION=
|
|
|
while [[ $# -gt 0 ]]; do
|
|
|
[[ -z ${1} ]] || { declare -f ${1} &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'"; }
|
|
|
shift
|
|
|
done
|
|
|
eval ${FUNCTION#*; }
|
|
|
fi
|