Fix APPDESKTOP_PLACEONDESKTOP,APPDESKTOP_PLACEONDESKTOP. Add autoinstall *.pkg.tar.*

master
Dmitry Razumov 1 year ago
parent efac294f47
commit 953f0700c8
Signed by: asmeron
GPG Key ID: 50BC1DB583B79706

@ -238,10 +238,11 @@ MKSQFS_OPTS="-b 32K -comp gzip"
SAMBA_USERSHARE=enable
AUTHPAM[minimal]="with-faillock,with-time,with-systemd-homed,with-mkhomedir-simple,with-pamaccess"
AUTHPAM[local]="with-faillock,with-time,with-systemd-homed,with-mkhomedir-simple,with-pamaccess"
AUTHPAM[nis]="with-faillock,with-time,with-systemd-homed,with-mkhomedir-simple,with-pamaccess"
AUTHPAM[winbind]="with-faillock,with-time,with-systemd-homed,with-mkhomedir-simple,with-pamaccess"
AUTHPAM[sssd]="with-faillock,with-time,with-systemd-homed,with-mkhomedir-simple,with-pamaccess,with-sudo,with-mdns4,with-mdns6,with-files-domain"
AUTHPAM=minimal
AUTHPAM=local
JOURNALD[Storage]=persistent
JOURNALD[Compress]=yes

@ -1547,6 +1547,10 @@ ubconfig_exec_system(){
XFCE4_KIOSK\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.post.d/18-kiosk-xfce4-kioskrc ;;
XFCE4_KIOSK_USER_LOCKED) ${ROOTFS}/usr/lib/ublinux/rc.post.d/18-kiosk-xfce4-kioskrc ;;
XFCE4_KIOSK_USER_UNLOCKED) ${ROOTFS}/usr/lib/ublinux/rc.post.d/18-kiosk-xfce4-kioskrc ;;
APPDESKTOP_PLACEONDESKTOP_INIT) ${ROOTFS}/usr/lib/ublinux/rc.pamsession.d/01-placeondesktop exec_02_place_on_desktop_init "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
APPDESKTOP_PLACEONDESKTOP_INIT\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.pamsession.d/01-placeondesktop exec_02_place_on_desktop_init "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
APPDESKTOP_PLACEONDESKTOP) ${ROOTFS}/usr/lib/ublinux/rc.pamsession.d/01-placeondesktop exec_03_place_on_desktop "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
APPDESKTOP_PLACEONDESKTOP\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.pamsession.d/01-placeondesktop exec_03_place_on_desktop "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
*) NO_FIND_EXCUTE=1 ;;
esac
;;

@ -5,10 +5,9 @@ ENABLED=yes
NOEXEC="i3term:xbindkeys;i3term:fusion-icon;i3term:ublinuxupdate"
. /usr/lib/ublinux/functions
. /usr/lib/ublinux/default
SOURCE=${SYSCONF}/config; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null
SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
DE=$(detectDE)
cd $HOME

@ -1,5 +1,8 @@
#!/bin/bash
ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0
for a in /usr/lib/ublinux/rc.halt/* ;do
[ -x $a ] && $a 2>/dev/null
done

@ -1,5 +1,8 @@
#!/bin/bash
ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0
for a in /usr/lib/ublinux/rc.halt.pre/* ;do
[ -x $a ] && $a 2>/dev/null
done

@ -1,11 +1,15 @@
#!/bin/bash
ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0
DEBUGMODE=no
. /usr/lib/ublinux/functions
. /usr/lib/ublinux/default
debug_mode "$0" "$@"
SOURCE=${SYSCONF}/config; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null
SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
debug_mode "$0" "$@"
# We have to launch some rc scripts
for a in /usr/lib/ublinux/rc.local.d/* ;do

@ -1,15 +1,19 @@
#!/bin/bash
ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0
DEBUGMODE=no
. /usr/lib/ublinux/functions
. /usr/lib/ublinux/default
debug_mode "$0" "$@"
SOURCE=${SYSCONF}/config; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null
SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
debug_mode "$0" "$@"
# We have to launch some rc scripts
for a in /usr/lib/ublinux/rc.network.d/* ;do
[ -x $a ] && $a 2>/dev/null &
done
# We have to launch some rc scripts
for a in /usr/lib/ublinux/rc.network.d/* ;do
[ -x $a ] && $a 2>/dev/null &
done
true
true

@ -0,0 +1,14 @@
#!/bin/bash
ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0
SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
for SCRIPT in /usr/lib/ublinux/rc.pamaccount.d/*; do
[[ -x ${SCRIPT} ]] && ${SCRIPT} &
done
true

@ -0,0 +1,14 @@
#!/bin/bash
ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0
SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
for SCRIPT in /usr/lib/ublinux/rc.pamauth.d/*; do
[[ -x ${SCRIPT} ]] && ${SCRIPT} &
done
true

@ -0,0 +1,14 @@
#!/bin/bash
ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0
SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
for SCRIPT in /usr/lib/ublinux/rc.pampassword.d/*; do
[[ -x ${SCRIPT} ]] && ${SCRIPT} &
done
true

@ -0,0 +1,14 @@
#!/bin/bash
ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0
SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
for SCRIPT in /usr/lib/ublinux/rc.pamsession.d/*; do
[[ -x ${SCRIPT} ]] && ${SCRIPT} &
done
true

@ -1,7 +1,12 @@
#!/usr/bin/env bash
ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0
DEBUGMODE=no
. /usr/lib/ublinux/functions
SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
debug_mode "$0" "$@"
for a in /usr/lib/ublinux/rc.post.d/* ;do

@ -1,5 +1,8 @@
#!/bin/bash
ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0
PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin
DEBUGMODE=no

@ -1,7 +1,10 @@
#!/bin/sh
#!/bin/bash
for a in /usr/lib/ublinux/rc.xorg/* ;do
[ -x $a ] && $a 2>/dev/null
done
ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0
true
for a in /usr/lib/ublinux/rc.xorg/* ;do
[ -x $a ] && $a 2>/dev/null
done
true

@ -1,67 +0,0 @@
#!/usr/bin/env bash
ENABLED=yes
[[ ${ENABLED} == yes ]] || exit 0
SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/kiosk; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null
declare -A APPDESKTOP_PLACEONDESKTOP APPDESKTOP_PLACEONDESKTOP_INIT
place_on_desktop_ubinstall(){
[[ $(cmdline_value ub.sgnfiles) =~ .*"-iso.sgn" ]] && APPDESKTOP_PLACEONDESKTOP+=",${UBINSTALL_DESKTOP}"
}
place_on_desktop_init(){
[[ -f ${HOME}/.config/.desktopinitialized ]] && return 0
if [[ -n ${APPDESKTOP_PLACEONDESKTOP_INIT[@]} ]]; then
for SELECT_USERS_GROUPS in "${!APPDESKTOP_PLACEONDESKTOP_INIT[@]}"; do
APPDESKTOP_PLACEONDESKTOP[${SELECT_USERS_GROUPS}]+=",${APPDESKTOP_PLACEONDESKTOP_INIT[${SELECT_USERS_GROUPS}]}"
touch ${HOME}/.config/.desktopinitialized
done
fi
}
place_on_desktop(){
copy_desktop(){
local APPDESKTOP_PLACEONDESKTOP="$1"
APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//.desktop/}
APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//;/,}; APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//,,/,}
[[ ${APPDESKTOP_PLACEONDESKTOP:0:1} == ',' ]] && APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP:1}
[[ ${APPDESKTOP_PLACEONDESKTOP} =~ ','$ ]] && APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP%*,}
find /usr/share/applications -type f $(awk 'NR > 1 {print "-o"}; {print "-name", $0".desktop"}' <<< "${APPDESKTOP_PLACEONDESKTOP//,/$'\n'}") | while IFS= read -r FIND_SELECT_DESKTOP; do
if [[ ! -f "${XDG_DESKTOP_DIR}/${FIND_SELECT_DESKTOP##*/}" ]]; then
cp -f "${FIND_SELECT_DESKTOP}" "${XDG_DESKTOP_DIR}"
#grep "#!/usr/bin/env xdg-open" "${XDG_DESKTOP_DIR}/${FIND_SELECT_DESKTOP##*/}" || sed -i 1s%^%'\#\!/usr/bin/env xdg-open\n'% "${XDG_DESKTOP_DIR}/${FIND_SELECT_DESKTOP##*/}"
chmod ugo+x "${XDG_DESKTOP_DIR}/${FIND_SELECT_DESKTOP##*/}"
fi
done
}
if [[ -n ${APPDESKTOP_PLACEONDESKTOP[@]} ]]; then
SOURCE=${HOME}/.config/user-dirs.dirs; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
[[ -n ${XDG_DESKTOP_DIR} ]] || XDG_DESKTOP_DIR="${HOME}/$(gettext -d xdg-user-dirs "Desktop")"
[[ -n ${XDG_DESKTOP_DIR} ]] || XDG_DESKTOP_DIR="${HOME}/Desktop"
[[ -d ${XDG_DESKTOP_DIR} ]] || mkdir -p "${XDG_DESKTOP_DIR}"
ID_GROUPS=$(id --name --groups)
for SELECT_USERS_GROUPS in "${!APPDESKTOP_PLACEONDESKTOP[@]}"; do
while IFS= read -r READ_USER_GROUP; do
[[ ${READ_USER_GROUP} == "0" ]] || [[ ${READ_USER_GROUP} == ${USER} ]] || [[ ${READ_USER_GROUP} =~ ^'@' && ${ID_GROUPS} =~ (^| )${READ_USER_GROUP//@/}( |$) ]] \
&& copy_desktop ${APPDESKTOP_PLACEONDESKTOP[${SELECT_USERS_GROUPS}]}
done <<< ${SELECT_USERS_GROUPS//,/$'\n'}
done
fi
}
################
##### MAIN #####
################
place_on_desktop_ubinstall
place_on_desktop_init
place_on_desktop

@ -1,4 +1,6 @@
#!/bin/bash
# Extended pattern matching: https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html#Pattern-Matching
shopt -s extglob
ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0
@ -11,11 +13,11 @@ SOURCE=${SYSCONF}/kiosk; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null
declare -A APPDESKTOP_PLACEONDESKTOP APPDESKTOP_PLACEONDESKTOP_INIT
place_on_desktop_ubinstall(){
01_place_on_desktop_ubinstall(){
[[ $(cmdline_value ub.sgnfiles) =~ .*"-iso.sgn" ]] && APPDESKTOP_PLACEONDESKTOP+=",${UBINSTALL_DESKTOP}"
}
place_on_desktop_init(){
02_place_on_desktop_init(){
[[ -f ${HOME}/.config/.desktopinitialized ]] && return 0
if [[ -n ${APPDESKTOP_PLACEONDESKTOP_INIT[@]} ]]; then
for SELECT_USERS_GROUPS in "${!APPDESKTOP_PLACEONDESKTOP_INIT[@]}"; do
@ -24,16 +26,17 @@ place_on_desktop_init(){
fi
}
place_on_desktop_trust(){
03_place_on_desktop_trust(){
trust_desktop(){
local APPDESKTOP_PLACEONDESKTOP="$1"
APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//.desktop/}
APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//@lock/}
APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//@dislock/}
APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//;/,}; APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//,,/,}
[[ ${APPDESKTOP_PLACEONDESKTOP:0:1} == ',' ]] && APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP:1}
[[ ${APPDESKTOP_PLACEONDESKTOP} =~ ','$ ]] && APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP%*,}
find "${XDG_DESKTOP_DIR}" -type f $(tr ',;' $'\n' <<< "${APPDESKTOP_PLACEONDESKTOP}" | awk 'NR > 1 {print "-o"}; {print "-name", $0".desktop"}') | while IFS= read -r FIND_SELECT_DESKTOP; do
if ! gio info "${FIND_SELECT_DESKTOP}" | grep metadata::xfce-exe-checksum > /dev/null 2>&1; then
chmod ugo+x "${FIND_SELECT_DESKTOP}"
gio set -t string "${FIND_SELECT_DESKTOP}" metadata::xfce-exe-checksum "$(sha256sum "${FIND_SELECT_DESKTOP}" | awk '{print $1}')" 2>/dev/null
fi
done
@ -47,19 +50,17 @@ place_on_desktop_trust(){
while IFS= read -r READ_USER_GROUP; do
[[ ${READ_USER_GROUP} == "0" ]] || [[ ${READ_USER_GROUP} == ${USER} ]] || [[ ${READ_USER_GROUP} =~ ^'@' && ${ID_GROUPS} =~ (^| )${READ_USER_GROUP//@/}( |$) ]] \
&& trust_desktop ${APPDESKTOP_PLACEONDESKTOP[${SELECT_USERS_GROUPS}]}
done <<< ${SELECT_USERS_GROUPS//,/$'\n'}
done <<< ${SELECT_USERS_GROUPS//@(,|;)/$'\n'}
done
fi
}
################
##### MAIN #####
################
/usr/lib/ublinux/rc.desktop/all/placeondesktop
place_on_desktop_ubinstall
place_on_desktop_init
place_on_desktop_trust
01_place_on_desktop_ubinstall
02_place_on_desktop_init
03_place_on_desktop_trust

@ -254,8 +254,7 @@ exec_03_ubpile_reverse_proxy(){
fi
if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ -n ${UBPILE_REVERSE_PROXY} ]]; then
if [[ ${UBPILE_REVERSE_PROXY} == @(disable|no) ]]; then
systemctl --quiet stop haproxy-ubpile.service &>/dev/null
systemctl --quiet disable haproxy-ubpile.service &>/dev/null
stop_haproxy
elif [[ ${UBPILE_REVERSE_PROXY} == @(enable|yes) ]]; then
UBPILE_PORT="$(sed -En '/^\s*frontend http/,/^\s*backend/{s/^\s*bind.*:([[:digit:]]*).*/\1/p}' ${PATH_HAPROXY_UBPILE_CONF})"
#[[ $(declare -p UBPILE 2>/dev/null) =~ "declare -A" && -n ${UBPILE[web_direct_connect]} ]] || { ubconfig set [server] UBPILE[web_direct_connect]="true"; RESTART_UBPILE=yes; }
@ -275,8 +274,6 @@ exec_03_ubpile_reverse_proxy(){
[[ $(declare -p UBPILE 2>/dev/null) =~ "declare -A" && -n ${UBPILE[web_direct_connect]} ]] && { ubconfig remove [server] UBPILE[web_direct_connect]; RESTART_UBPILE=yes; }
[[ $(declare -p UBPILE 2>/dev/null) =~ "declare -A" && -n ${UBPILE[base_app_url]} ]] && { ubconfig remove [server] UBPILE[base_app_url]; RESTART_UBPILE=yes; }
stop_haproxy
systemctl --quiet stop haproxy-ubpile.service &>/dev/null
systemctl --quiet disable haproxy-ubpile.service &>/dev/null
fi
[[ -n ${RESTART_UBPILE} && -n ${APP_UBPILE} ]] && { systemctl --quiet is-active ubpile.service &>/dev/null && systemctl --quiet restart ubpile.service &>/dev/null; message_motd; }
[[ -n ${RESTART_UBPILE} && -n ${APP_UBPILE_WORKFLOW} ]] && systemctl --quiet is-active ubpile-workflow.service &>/dev/null && systemctl --quiet restart ubpile-workflow.service &>/dev/null

@ -0,0 +1,395 @@
#!/usr/bin/env bash
# Extended pattern matching: https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html#Pattern-Matching
shopt -s extglob
ENABLED=yes
[[ ${ENABLED} == yes ]] || exit 0
SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/kiosk; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null
## Назначение модулей:
## account подтвердить личность, проверив учетные данные, такие как пароль, ключ, токен и другие
## auth проверить авторизацию для таких действий, как разрешения, ограничения и т. д.
## password обновить учетные данные
## session распределять ресурсы во время входа в систему, такие как личные данные, лимиты и другие.
##
## Выполнение из /etc/pam.d/system-login
## Тип модуля: session
## Глобальные переменные:
## PAM_RHOST Удалённый хост
## PAM_RUSER Удалённый пользователь
## PAM_SERVICE Сервис выполняющий вход /etc/pam.d/service_name
## PAM_TTY Консоль, может быть как "/dev/tty2" так и ":0"
## PAM_USER Текущий пользователь
## PAM_TYPE Тип сессии, возможные значения: account, auth, password, open_session, close_session
##
## PAM_RHOST= PAM_RUSER= PAM_SERVICE=login PAM_TTY=/dev/tty2 PAM_USER=superadmin PAM_TYPE=open_session
## PAM_RHOST= PAM_RUSER= PAM_SERVICE=login PAM_TTY=/dev/tty2 PAM_USER=superadmin PAM_TYPE=close_session
## PAM_RHOST= PAM_RUSER= PAM_SERVICE=lightdm-autologin PAM_TTY=:0 PAM_USER=superadmin PAM_TYPE=open_session
## PAM_RHOST= PAM_RUSER= PAM_SERVICE=systemd-user PAM_TTY= PAM_USER=lightdm PAM_TYPE=open_session
## PAM_RHOST= PAM_RUSER= PAM_SERVICE=systemd-user PAM_TTY= PAM_USER=user-2 PAM_TYPE=open_session
## PAM_RHOST= PAM_RUSER= PAM_SERVICE=lightdm PAM_TTY=:0 PAM_USER=user-2 PAM_TYPE=open_session
## PAM_RHOST=1.2.3.4 PAM_RUSER= PAM_SERVICE=sshd PAM_TTY=ssh PAM_USER=user-2 PAM_TYPE=open_session
if [[ ${PAM_TYPE} == "open_session" && -n ${PAM_USER} ]]; then
# Выполнение функции вызвано используя PAM, получаем имя пользователя вызвавшего PAM, будем пременять только для пользователя
SELECT_USER="${PAM_USER}"
fi
declare -A APPDESKTOP_PLACEONDESKTOP APPDESKTOP_PLACEONDESKTOP_INIT
exec_01_place_on_desktop_ubinstall(){
[[ $(cmdline_value ub.sgnfiles) =~ .*"-iso.sgn" ]] && APPDESKTOP_PLACEONDESKTOP+=",${UBINSTALL_DESKTOP}"
}
## На рабочий стол поместить ярлыки приложений из /usr/share/applications/ , только для нового пользователя
## APPDESKTOP_PLACEONDESKTOP_INIT[<users>|<@groups>|*]=<desktop_file_1>[@lock],<desktop_files_n>[@lock]
## [<users>] # Применить для пользователя, пример: [superadmin,user-1]. Разделитель запятая(,) или точка с запятой(;)
## [<@groups>] # Применить для группы, пример: [@whell,@users]
## # Можно комбинировать группы с пользователями, пример: @wheel,user-1
## [*] # Все пользователи системы. Если не указано, то все пользователи системы
## =<desktop_file_n> # Файлы *.desktop. Разделитель: запятая(,) или точка с запятой(;). Указывается без суфикса ".desktop"
## =<desktop_file_n>@lock # Файл *.desktop с установленным владельцем:группой root:root и ACL правами только чтения
## =@lock # Установить владельца:группу root:root и права ACL только чтения на каталог "Рабочего стола" рекурсивно
## =@dislock # Установить владельца:группу домашний_пользователь:домашний_пользователь и очистить ACL права на каталог "Рабочего стола" рекурсивно
## APPDESKTOP_PLACEONDESKTOP_INIT[superadmin,@wheel]=ubinstall,htop@lock
## APPDESKTOP_PLACEONDESKTOP_INIT=gimp,pinta
exec_02_place_on_desktop_init(){
[[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && local COMMAND=$1 && shift
[[ -n ${COMMAND} ]] || local COMMAND="set="
[[ $(declare -p APPDESKTOP_PLACEONDESKTOP_INIT 2>/dev/null) =~ ^"declare -A" ]] || declare -gA APPDESKTOP_PLACEONDESKTOP_INIT
local PARAM="$@"
if [[ -n ${PARAM} ]]; then
local APPDESKTOP_PLACEONDESKTOP_INIT
declare -A APPDESKTOP_PLACEONDESKTOP_INIT
[[ ${PARAM%%=*} =~ [!\$%\&()*+/\<\=\>?\^\{|\}~] ]] || eval "${PARAM%%=*}=\${PARAM#*=}"
fi
if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ ${#APPDESKTOP_PLACEONDESKTOP_INIT[@]} -ne 0 ]]; then
local ID_GROUPS= SELECT_USER_HOME=
for SELECT_USERS_GROUPS in "${!APPDESKTOP_PLACEONDESKTOP_INIT[@]}"; do
while IFS= read -r READ_USER_GROUP; do
if [[ -n ${SELECT_USER} ]]; then
# Применить для PAM пользователя
[[ -z ${ID_GROUPS} ]] && ID_GROUPS=$(id --name --groups ${SELECT_USER})
if [[ ${READ_USER_GROUP} == "0" ]] || [[ ${READ_USER_GROUP} == ${SELECT_USER} ]] || [[ ${READ_USER_GROUP} =~ ^'@' && ${ID_GROUPS} =~ (^| )${READ_USER_GROUP//@/}( |$) ]]; then
SELECT_USER_HOME_INIT=$(getent passwd ${SELECT_USER} | cut -d: -f6)
[[ -f ${SELECT_USER_HOME_INIT}/.config/.place_on_desktop_init ]] && continue
copy_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP_INIT[${SELECT_USERS_GROUPS}]}" && touch ${SELECT_USER_HOME_INIT}/.config/.place_on_desktop_init
fi
elif [[ ${READ_USER_GROUP} == "0" ]]; then
# Применить для всех пользователей
for SELECT_USER in $(getent passwd | cut -d: -f1 | xargs); do
SELECT_USER_HOME_INIT=$(getent passwd ${SELECT_USER} | cut -d: -f6)
[[ -f ${SELECT_USER_HOME_INIT}/.config/.place_on_desktop_init ]] && continue
copy_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP_INIT[${SELECT_USERS_GROUPS}]}" && touch ${SELECT_USER_HOME_INIT}/.config/.place_on_desktop_init
SELECT_USER_HOME=
done
SELECT_USER=
elif [[ ! ${READ_USER_GROUP} =~ ^'@' ]] && getent passwd "${READ_USER_GROUP}" &>/dev/null; then
# Применить для выбанного пользователь
SELECT_USER=${READ_USER_GROUP}
SELECT_USER_HOME_INIT=$(getent passwd ${SELECT_USER} | cut -d: -f6)
[[ -f ${SELECT_USER_HOME_INIT}/.config/.place_on_desktop_init ]] && continue
copy_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP_INIT[${SELECT_USERS_GROUPS}]}" && touch ${SELECT_USER_HOME_INIT}/.config/.place_on_desktop_init
SELECT_USER=; SELECT_USER_HOME=
elif [[ ${READ_USER_GROUP} =~ ^'@' ]] && getent group "${READ_USER_GROUP//@/}" &>/dev/null; then
# Применить для выбраной группа
for SELECT_USER in $(getent group "${READ_USER_GROUP//@/}" | cut -d: -f4 | tr , ' '); do
SELECT_USER_HOME_INIT=$(getent passwd ${SELECT_USER} | cut -d: -f6)
[[ -f ${SELECT_USER_HOME_INIT}/.config/.place_on_desktop_init ]] && continue
copy_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP_INIT[${SELECT_USERS_GROUPS}]}" && touch ${SELECT_USER_HOME_INIT}/.config/.place_on_desktop_init
SELECT_USER_HOME=
done
SELECT_USER=
fi
done <<< ${SELECT_USERS_GROUPS//@(,|;)/$'\n'}
done
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then
if [[ ${PARAM%%=*} =~ ^.*'['(.*)']' && ${BASH_REMATCH[1]} == @("*"|"**"|"/"|"//") ]]; then
PARAM_VALUE="${PARAM#*=}"
APPDESKTOP_PLACEONDESKTOP_INIT+="${PARAM_VALUE// /,}"
fi
local ID_GROUPS= SELECT_USER_HOME=
for SELECT_USERS_GROUPS in "${!APPDESKTOP_PLACEONDESKTOP_INIT[@]}"; do
while IFS= read -r READ_USER_GROUP; do
if [[ ${READ_USER_GROUP} == "0" ]]; then
# Применить для всех пользователей
for SELECT_USER in $(getent passwd | cut -d: -f1 | xargs); do
SELECT_USER_HOME_INIT=$(getent passwd ${SELECT_USER} | cut -d: -f6)
remove_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP_INIT[${SELECT_USERS_GROUPS}]}" && rm -f ${SELECT_USER_HOME_INIT}/.config/.place_on_desktop_init
SELECT_USER_HOME=
done
SELECT_USER=
elif [[ ! ${READ_USER_GROUP} =~ ^'@' ]] && getent passwd "${READ_USER_GROUP}" &>/dev/null; then
# Применить для выбанного пользователь
SELECT_USER=${READ_USER_GROUP}
SELECT_USER_HOME_INIT=$(getent passwd ${SELECT_USER} | cut -d: -f6)
remove_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP_INIT[${SELECT_USERS_GROUPS}]}" && rm -f ${SELECT_USER_HOME_INIT}/.config/.place_on_desktop_init
SELECT_USER=; SELECT_USER_HOME=
elif [[ ${READ_USER_GROUP} =~ ^'@' ]] && getent group "${READ_USER_GROUP//@/}" &>/dev/null; then
# Применить для выбраной группа
for SELECT_USER in $(getent group "${READ_USER_GROUP//@/}" | cut -d: -f4 | tr , ' '); do
SELECT_USER_HOME_INIT=$(getent passwd ${SELECT_USER} | cut -d: -f6)
remove_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP_INIT[${SELECT_USERS_GROUPS}]}" && rm -f ${SELECT_USER_HOME_INIT}/.config/.place_on_desktop_init
SELECT_USER_HOME=
done
SELECT_USER=
fi
done <<< ${SELECT_USERS_GROUPS//@(,|;)/$'\n'}
done
fi
}
## На рабочий стол поместить ярлыки приложений из /usr/share/applications/
## APPDESKTOP_PLACEONDESKTOP[<users>|<@groups>|*]=<desktop_file_1>[@lock],<desktop_files_n>[@lock]
## [<users>] # Применить для пользователя, пример: [superadmin,user-1]. Разделитель запятая(,) или точка с запятой(;)
## [<@groups>] # Применить для группы, пример: [@whell,@users]
## # Можно комбинировать группы с пользователями, пример: @wheel,user-1
## [*] # Все пользователи системы. Если не указано, то все пользователи системы
## =<desktop_file_n> # Файлы *.desktop. Разделитель: запятая(,) или точка с запятой(;). Указывается без суфикса ".desktop"
## =<desktop_file_n>@lock # Файл *.desktop с установленным владельцем:группой root:root и ACL правами только чтения
## =@lock # Установить владельца:группу root:root и права ACL только чтения на каталог рабочего стола рекурсивно
## =@dislock # Установить владельца:группу домашний_пользователь:домашний_пользователь и очистить ACL права на каталог рабочего стола рекурсивно
## APPDESKTOP_PLACEONDESKTOP[superadmin,@wheel]=ubinstall,htop
## APPDESKTOP_PLACEONDESKTOP[user-1]=htop@lock
## APPDESKTOP_PLACEONDESKTOP[user-2]=*@lock
## APPDESKTOP_PLACEONDESKTOP=gimp,pinta
exec_03_place_on_desktop(){
[[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && local COMMAND=$1 && shift
[[ -n ${COMMAND} ]] || local COMMAND="set="
[[ $(declare -p APPDESKTOP_PLACEONDESKTOP 2>/dev/null) =~ ^"declare -A" ]] || declare -gA APPDESKTOP_PLACEONDESKTOP
local PARAM="$@"
if [[ -n ${PARAM} ]]; then
local APPDESKTOP_PLACEONDESKTOP
declare -A APPDESKTOP_PLACEONDESKTOP
[[ ${PARAM%%=*} =~ [!\$%\&()*+/\<\=\>?\^\{|\}~] ]] || eval "${PARAM%%=*}=\${PARAM#*=}"
fi
if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ ${#APPDESKTOP_PLACEONDESKTOP[@]} -ne 0 ]]; then
local ID_GROUPS= SELECT_USER_HOME=
for SELECT_USERS_GROUPS in "${!APPDESKTOP_PLACEONDESKTOP[@]}"; do
while IFS= read -r READ_USER_GROUP; do
if [[ -n ${SELECT_USER} ]]; then
# Применить для PAM пользователя
[[ -z ${ID_GROUPS} ]] && ID_GROUPS=$(id --name --groups ${SELECT_USER})
[[ ${READ_USER_GROUP} == "0" ]] || [[ ${READ_USER_GROUP} == ${SELECT_USER} ]] || [[ ${READ_USER_GROUP} =~ ^'@' && ${ID_GROUPS} =~ (^| )${READ_USER_GROUP//@/}( |$) ]] \
&& copy_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP[${SELECT_USERS_GROUPS}]}"
elif [[ ${READ_USER_GROUP} == "0" ]]; then
# Применить для всех пользователей
for SELECT_USER in $(getent passwd | cut -d: -f1 | xargs); do
copy_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP[${SELECT_USERS_GROUPS}]}"
SELECT_USER_HOME=
done
SELECT_USER=
elif [[ ! ${READ_USER_GROUP} =~ ^'@' ]] && getent passwd "${READ_USER_GROUP}" &>/dev/null; then
# Применить для выбанного пользователь
SELECT_USER=${READ_USER_GROUP}
copy_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP[${SELECT_USERS_GROUPS}]}"
SELECT_USER=; SELECT_USER_HOME=
elif [[ ${READ_USER_GROUP} =~ ^'@' ]] && getent group "${READ_USER_GROUP//@/}" &>/dev/null; then
# Применить для выбраной группа
for SELECT_USER in $(getent group "${READ_USER_GROUP//@/}" | cut -d: -f4 | tr , ' '); do
copy_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP[${SELECT_USERS_GROUPS}]}"
SELECT_USER_HOME=
done
SELECT_USER=
fi
done <<< ${SELECT_USERS_GROUPS//@(,|;)/$'\n'}
done
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then
if [[ ${PARAM%%=*} =~ ^.*'['(.*)']' && ${BASH_REMATCH[1]} == @("*"|"**"|"/"|"//") ]]; then
PARAM_VALUE="${PARAM#*=}"
APPDESKTOP_PLACEONDESKTOP+="${PARAM_VALUE// /,}"
fi
local ID_GROUPS= SELECT_USER_HOME=
for SELECT_USERS_GROUPS in "${!APPDESKTOP_PLACEONDESKTOP[@]}"; do
while IFS= read -r READ_USER_GROUP; do
if [[ ${READ_USER_GROUP} == "0" ]]; then
# Применить для всех пользователей
for SELECT_USER in $(getent passwd | cut -d: -f1 | xargs); do
remove_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP[${SELECT_USERS_GROUPS}]}"
SELECT_USER_HOME=
done
SELECT_USER=
elif [[ ! ${READ_USER_GROUP} =~ ^'@' ]] && getent passwd "${READ_USER_GROUP}" &>/dev/null; then
# Применить для выбанного пользователь
SELECT_USER=${READ_USER_GROUP}
remove_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP[${SELECT_USERS_GROUPS}]}"
SELECT_USER=; SELECT_USER_HOME=
elif [[ ${READ_USER_GROUP} =~ ^'@' ]] && getent group "${READ_USER_GROUP//@/}" &>/dev/null; then
# Применить для выбраной группа
for SELECT_USER in $(getent group "${READ_USER_GROUP//@/}" | cut -d: -f4 | tr , ' '); do
remove_desktop "${SELECT_USER}" "${APPDESKTOP_PLACEONDESKTOP[${SELECT_USERS_GROUPS}]}"
SELECT_USER_HOME=
done
SELECT_USER=
fi
done <<< ${SELECT_USERS_GROUPS//@(,|;)/$'\n'}
done
fi
}
##
## $1 SELECT_USER
## $2 APPDESKTOP_PLACEONDESKTOP
##
copy_desktop(){
local SELECT_USER="$1"
local APPDESKTOP_PLACEONDESKTOP="$2"
[[ -n ${SELECT_USER} ]] || return 1
[[ -n ${APPDESKTOP_PLACEONDESKTOP} ]] || return 1
if [[ -z ${SELECT_USER_HOME} ]]; then
SELECT_USER_HOME=$(getent passwd ${SELECT_USER} | cut -d: -f6)
[[ -n ${SELECT_USER_HOME} ]] || return 1
local HOME=${SELECT_USER_HOME}
local XDG_DESKTOP_DIR=
SOURCE=${SELECT_USER_HOME}/.config/user-dirs.dirs; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
[[ -d ${XDG_DESKTOP_DIR} && ${XDG_DESKTOP_DIR} != ${SELECT_USER_HOME} ]] || XDG_DESKTOP_DIR="${SELECT_USER_HOME}/$(gettext -d xdg-user-dirs "Desktop")"
[[ -d ${XDG_DESKTOP_DIR} && ${XDG_DESKTOP_DIR} != ${SELECT_USER_HOME} ]] || XDG_DESKTOP_DIR="${SELECT_USER_HOME}/Desktop"
[[ -d ${XDG_DESKTOP_DIR} && ${XDG_DESKTOP_DIR} != ${SELECT_USER_HOME} ]] || return 1
fi
APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//.desktop/}
APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//;/,}; APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//,,/,}
[[ ${APPDESKTOP_PLACEONDESKTOP:0:1} == ',' ]] && APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP:1}
[[ ${APPDESKTOP_PLACEONDESKTOP} =~ ','$ ]] && APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP%*,}
#find /usr/share/applications -type f $(awk 'NR > 1 {print "-o"}; {print "-name", $0".desktop"}' <<< "${APPDESKTOP_PLACEONDESKTOP//@(,|;)/$'\n'}") | while IFS= read -r FIND_SELECT_DESKTOP; do
while IFS= read -r FIND_SELECT_ITEM; do
local FIND_SELECT_DESKTOP_LOCK=
local FIND_SELECT_DESKTOP=
if [[ ${FIND_SELECT_ITEM} =~ (.+)"@lock"$ ]]; then
FIND_SELECT_DESKTOP="${BASH_REMATCH[1]}"
FIND_SELECT_DESKTOP_LOCK=yes
else
FIND_SELECT_DESKTOP=${FIND_SELECT_ITEM}
fi
if [[ -f ${FIND_SELECT_DESKTOP}.desktop ]]; then
FILE_DESKTOP="${FIND_SELECT_DESKTOP}.desktop"
elif [[ -f /usr/share/applications/${FIND_SELECT_DESKTOP}.desktop ]]; then
FILE_DESKTOP="/usr/share/applications/${FIND_SELECT_DESKTOP}.desktop"
elif [[ -f ${FIND_SELECT_DESKTOP} ]]; then
FILE_DESKTOP=${FIND_SELECT_DESKTOP}
fi
if [[ ${FIND_SELECT_DESKTOP} == "@lock" ]]; then
# Если система загружена в режимах песочницы без сохранённого профиля, то в AUFS не применить аттрибут immutable
#[[ ${SYSTEMBOOT_STATEMODE} == @(sandbox|sandbox_hdd) ]]
chattr -R -i "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" #2>/dev/null
chown -R root:root "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs"
chmod -R u+rwX,go-rwx "${XDG_DESKTOP_DIR}"
chmod -R u+rwX,go-rwx "${SELECT_USER_HOME}/.config/user-dirs.dirs"
setfacl -R -m u:${SELECT_USER}:rX "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs"
setfacl -R -m d:u:${SELECT_USER}:rX "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs"
chattr +i "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" #2>/dev/null
elif [[ ${FIND_SELECT_DESKTOP} == "@dislock" ]]; then
chattr -R -i "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" #2>/dev/null
setfacl --remove-all --recursive "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs"
setfacl --remove-all --recursive --default "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs"
chmod -R u+rwX,g+rX,g-w,o+rX,o-w "${XDG_DESKTOP_DIR}"
chmod -R u+rw,u-x,go-rwx "${SELECT_USER_HOME}/.config/user-dirs.dirs"
chown -R ${SELECT_USER}:${SELECT_USER} "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs"
elif [[ -n ${FILE_DESKTOP} ]]; then
[[ -f "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" ]] || cp -f "${FILE_DESKTOP}" "${XDG_DESKTOP_DIR}"
if [[ -n ${FIND_SELECT_DESKTOP_LOCK} ]]; then
chattr -i "${XDG_DESKTOP_DIR}" "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" #2>/dev/null
chown root:root "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" "${SELECT_USER_HOME}/.config/user-dirs.dirs"
if [[ ${FILE_DESKTOP##*/} =~ .*".desktop"$ ]]; then
chmod o-rwx,ug+rwx "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}"
setfacl -m u:${SELECT_USER}:rx "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}"
else
chmod o-rwx,ug+rwX "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}"
setfacl -m u:${SELECT_USER}:rX "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}"
fi
chmod u+rw,u-x,go-rwx "${SELECT_USER_HOME}/.config/user-dirs.dirs"
setfacl -m u:${SELECT_USER}:r "${SELECT_USER_HOME}/.config/user-dirs.dirs"
chattr +i "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" #2>/dev/null
else
chattr -i "${XDG_DESKTOP_DIR}" "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}" #2>/dev/null
setfacl --remove-all --recursive "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}"
setfacl --remove-all --recursive --default "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}"
if [[ ${FILE_DESKTOP##*/} =~ .*".desktop"$ ]]; then
chmod -R u+rwx,g+rx,g-w,o+rx,o-w "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}"
else
chmod -R u+rwX,g+rX,g-w,o+rX,o-w "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}"
fi
chown ${SELECT_USER}:${SELECT_USER} "${XDG_DESKTOP_DIR}/${FILE_DESKTOP##*/}"
fi
#grep "#!/usr/bin/env xdg-open" "${XDG_DESKTOP_DIR}/${FIND_SELECT_DESKTOP##*/}" || sed -i 1s%^%'\#\!/usr/bin/env xdg-open\n'% "${XDG_DESKTOP_DIR}/${FIND_SELECT_DESKTOP##*/}"
fi
done <<< "${APPDESKTOP_PLACEONDESKTOP//@(,|;)/$'\n'}"
}
##
## $1 SELECT_USER
## $2 APPDESKTOP_PLACEONDESKTOP
##
remove_desktop(){
local SELECT_USER="$1"
local APPDESKTOP_PLACEONDESKTOP="$2"
[[ -n ${SELECT_USER} ]] || return 1
[[ -n ${APPDESKTOP_PLACEONDESKTOP} ]] || return 1
if [[ -z ${SELECT_USER_HOME} ]]; then
SELECT_USER_HOME=$(getent passwd ${SELECT_USER} | cut -d: -f6)
[[ -n ${SELECT_USER_HOME} ]] || return 1
local HOME=${SELECT_USER_HOME}
local XDG_DESKTOP_DIR=
SOURCE=${SELECT_USER_HOME}/.config/user-dirs.dirs; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
[[ -d ${XDG_DESKTOP_DIR} && ${XDG_DESKTOP_DIR} != ${SELECT_USER_HOME} ]] || XDG_DESKTOP_DIR="${SELECT_USER_HOME}/$(gettext -d xdg-user-dirs "Desktop")"
[[ -d ${XDG_DESKTOP_DIR} && ${XDG_DESKTOP_DIR} != ${SELECT_USER_HOME} ]] || XDG_DESKTOP_DIR="${SELECT_USER_HOME}/Desktop"
[[ -d ${XDG_DESKTOP_DIR} && ${XDG_DESKTOP_DIR} != ${SELECT_USER_HOME} ]] || return 1
fi
APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//.desktop/}
APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//;/,}; APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP//,,/,}
[[ ${APPDESKTOP_PLACEONDESKTOP:0:1} == ',' ]] && APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP:1}
[[ ${APPDESKTOP_PLACEONDESKTOP} =~ ','$ ]] && APPDESKTOP_PLACEONDESKTOP=${APPDESKTOP_PLACEONDESKTOP%*,}
while IFS= read -r FIND_SELECT_ITEM; do
local FIND_SELECT_DESKTOP_LOCK=
local FIND_SELECT_DESKTOP=
if [[ ${FIND_SELECT_ITEM} =~ (.+)"@lock"$ ]]; then
FIND_SELECT_DESKTOP="${BASH_REMATCH[1]}"
FIND_SELECT_DESKTOP_LOCK=yes
else
FIND_SELECT_DESKTOP=${FIND_SELECT_ITEM}
fi
if [[ -f ${XDG_DESKTOP_DIR}/${FIND_SELECT_DESKTOP##*/}.desktop ]]; then
FILE_DESKTOP="${XDG_DESKTOP_DIR}/${FIND_SELECT_DESKTOP##*/}.desktop"
elif [[ -f ${XDG_DESKTOP_DIR}//${FIND_SELECT_DESKTOP##*/} ]]; then
FILE_DESKTOP="${XDG_DESKTOP_DIR}//${FIND_SELECT_DESKTOP##*/}"
fi
if [[ ${FIND_SELECT_DESKTOP} == @("@lock"|"@dislock") ]]; then
chattr -R -i "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs" 2>/dev/null
setfacl --remove-all --recursive "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs"
setfacl --remove-all --recursive --default "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs"
chmod -R u+rwX,g+rX,g-w,o+rX,o-w "${XDG_DESKTOP_DIR}"
chmod -R u+rw,u-x,go-rwx "${SELECT_USER_HOME}/.config/user-dirs.dirs"
chown -R ${SELECT_USER}:${SELECT_USER} "${XDG_DESKTOP_DIR}" "${SELECT_USER_HOME}/.config/user-dirs.dirs"
elif [[ -n ${FILE_DESKTOP} ]]; then
[[ -f "${FILE_DESKTOP}" ]] && chattr -i "${FILE_DESKTOP}" && rm -f "${FILE_DESKTOP}"
fi
done <<< "${APPDESKTOP_PLACEONDESKTOP//@(,|;)/$'\n'}"
}
################
##### 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
true

@ -56,36 +56,6 @@ exec_udevrules(){
rm -f "${ROOTFS}/etc/udev/rules.d/${FILE_UDEV_70##*/}"
fi
}
exec_statemode(){
## Setting state mode
STATE_MODE=$(cmdline_value ub.mode)
STATE_HOME=$(cmdline_value ub.home)
## Полное сохранение ub.mode=changes
if [[ ${STATE_MODE} =~ ^"changes"$ ]]; then
sed -e '$a\SYSTEMBOOT_STATEMODE=changes' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
#sed "s/SYSTEMBOOT_STATEMODE=.*/SYSTEMBOOT_STATEMODE=changes/" -i ${SYSCONF}/config
## Сохранение в модуль ub.mode=toxzm ub.mode=machines
elif [[ ${STATE_MODE} =~ ^("toxzm"|"machines")$ ]]; then
sed -e '$a\SYSTEMBOOT_STATEMODE=module' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
#echo "SYSTEMBOOT_STATEMODE=module" >> ${SYSCONF}/config
## Полная песочница RAM ub.mode= ; ub.home=
elif [[ ${STATE_MODE} == "" && ${STATE_HOME} == "" ]]; then
sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
#echo "SYSTEMBOOT_STATEMODE=sandbox" >> ${SYSCONF}/config
## Песочница с сохранением профиля пользователя ub.mode= ; ub.home=/ublinux-data/homes
elif [[ ${STATE_MODE} == "" && ${STATE_HOME} =~ ^"/" ]]; then
sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox_ram_home' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
#echo "SYSTEMBOOT_STATEMODE=sandbox_ram_home" >> ${SYSCONF}/config
## Полная песочница HDD ub.mode=clear ; ub.home=
elif [[ ${STATE_MODE} == "clear" && ${STATE_HOME} == "" ]]; then
sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox_hdd' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
#echo "SYSTEMBOOT_STATEMODE=sandbox_hdd" >> ${SYSCONF}/config
## Полная песочница HDD с сохранением профиля пользователя ub.mode=clear ; ub.home=
elif [[ ${STATE_MODE} == "clear" && ${STATE_HOME} =~ ^"/" ]]; then
sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox_hdd_home' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
#echo "SYSTEMBOOT_STATEMODE=sandbox_hdd_home" >> ${SYSCONF}/config
fi
}
exec_enviroment(){
## Установить переменные окружения глобальные и пользовательские
## ENVIROMENT[system:<var>]=<value>

@ -0,0 +1,47 @@
#!/usr/bin/env bash
ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0
DEBUGMODE=no
[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${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}"
exec_statemode(){
## Setting state mode
STATE_MODE=$(cmdline_value ub.mode)
STATE_HOME=$(cmdline_value ub.home)
if [[ ${STATE_MODE} =~ ^"changes"$ ]]; then
## Полное сохранение ub.mode=changes
sed -e '$a\SYSTEMBOOT_STATEMODE=changes' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
elif [[ ${STATE_MODE} =~ ^("toxzm"|"machines")$ ]]; then
## Сохранение в модуль ub.mode=toxzm ub.mode=machines
sed -e '$a\SYSTEMBOOT_STATEMODE=module' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
elif [[ ${STATE_MODE} == "" && ${STATE_HOME} == "" ]]; then
## Полная песочница RAM ub.mode= ; ub.home=
sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
elif [[ ${STATE_MODE} == "" && ${STATE_HOME} =~ ^"/" ]]; then
## Песочница с сохранением профиля пользователя ub.mode= ; ub.home=/ublinux-data/homes
sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox_ram_home' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
elif [[ ${STATE_MODE} == "clear" && ${STATE_HOME} == "" ]]; then
## Полная песочница HDD ub.mode=clear ; ub.home=
sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox_hdd' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
elif [[ ${STATE_MODE} == "clear" && ${STATE_HOME} =~ ^"/" ]]; then
## Полная песочница HDD с сохранением профиля пользователя ub.mode=clear ; ub.home=
sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox_hdd_home' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
fi
}
################
##### MAIN #####
################
# Если файл подключен как ресурс с функциями, то выйти
return 0 2>/dev/null && return 0
exec_statemode $@

@ -0,0 +1,28 @@
#!/usr/bin/env bash
ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0
DEBUGMODE=no
[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${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
# Если система загружена в песочнице без HOME и HOME пустой, то HOME подключаем к TMPFS для того что-бы работал аттрибут immutable
exec_remounthome(){
[[ ${SYSTEMBOOT_STATEMODE} == @(sandbox|sandbox_hdd) ]] && find ${ROOTFS}/home -maxdepth 0 -empty -exec mount -t tmpfs tmpfs {} \;
}
################
##### MAIN #####
################
# Если файл подключен как ресурс с функциями, то выйти
return 0 2>/dev/null && return 0
exec_remounthome $@

@ -0,0 +1,37 @@
#!/usr/bin/env bash
ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0
DEBUGMODE=no
[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${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
exec_install_pkg_tar(){
[[ -n $(find /memory/layer-base/*/install/preinit -type f -name "*.pkg.tar.*" -print 2>/dev/null) ]] || return 0
if [[ -n ${ROOTFS} ]]; then
mount -t proc /proc /${ROOTFS}/proc
mount -t sysfs /sys /${ROOTFS}/sys
mount --bind /dev/ /${ROOTFS}/dev
LC_ALL=C LD_LIBRARY_PATH="${ROOTFS}/usr/lib" find /memory/layer-base/*/install/preinit -type f -name "*.pkg.tar.*" -exec ${ROOTFS}/usr/bin/pacman --quiet --sysroot ${ROOTFS} -U --noprogressbar --noconfirm {} +
umount /${ROOTFS}/dev
umount /${ROOTFS}/sys
umount /${ROOTFS}/proc
else
find /memory/layer-base/*/install/preinit -type f -name "*.pkg.tar.*" -exec pacman --quiet -U --noprogressbar --noconfirm {} +
fi
}
################
##### MAIN #####
################
# Если файл подключен как ресурс с функциями, то выйти
return 0 2>/dev/null && return 0
exec_install_pkg_tar $@

@ -249,7 +249,7 @@ VERSION=
## USERSHADOW[superadmin]=18009:0:120:7:14:
## Синхронизация пользователей системы /etc/passwd и их параметры /etc/shadow с глобальной конфигурацией
## USERADD_SYNC='boot,shutdown,shutdown@all,shutdown@users,shutdown@systems,shutdown@<min>-<max>,shutdown@<gid>'
## USERADD_SYNC='boot,shutdown,shutdown@all,shutdown@users,shutdown@systems,shutdown@<min>-<max>,shutdown@<uid>'
## boot # При загрузке системы принудительно применить глобальную конфигурацию на пользователя
## shutdown # Аналогичен shutdown@users + shutdown@systems
## shutdown@all # При завершении работы системы синхронизировать всех пользователей в системе с глобальной конфигурацией
@ -476,17 +476,50 @@ VERSION=
## по умолчанию PUBLICDIR=/home/public
#PUBLICDIR=
## Автомонтирование сетевых ресурсов
## Пароль кодировать в base64: echo 'password' | base64
## AUTOMOUNT_SHARE[mountpoint]='cifs:share:username:password_base64:domain:opt'
## AUTOMOUNT_SHARE[/mnt/cifs:share]='cifs://192.168.103.55/share:user:password_base64:domain:noperm,vers=1.0'
## AUTOMOUNT_SHARE[/media/sdb1]='direct:/dev/sdb1:wheel:775:noacl'
## AUTOMOUNT_SHARE[/media/mytag]='virtiofs:mytag:wheel:775:'
## AUTOMOUNT_SHARE[/mnt/sshfs/user-1@192.168.1.1]='sshfs:superadmin@192.168.1.1:/home/user-1:password_base64:'
#AUTOMOUNT_SHARE[/mnt/share2]='cifs://192.168.103.55/share2:share:password_base64:domain:noperm,vers=1.0'
## Автомонтирование ресурсов
## AUTOMOUNT_SHARE[<mountpoint>]='cifs:<share>:[<username>]:[<password_base64>]:[<domain>]:[<opt>]'
## <mountpoint> # Точка монтирования. Пример: /media/share_srv
## <share> # Сетевой путь. Пример: //192.168.1.1/share
## <username> # Имя пользователя
## # Если не указан, то используется: anonymouse
## <password_base64> # Пароль пользователя. Пароль кодировать в base64: base64 <<< 'password'
## # Если не указан, то без пароля
## <domain> # Имя домена. Пример: ubdomain.ru
## <opt> # Опции подключения. Пример: noperm,vers=1.0
#AUTOMOUNT_SHARE[/media/cifs:share]='cifs://192.168.103.55/share:user:password_base64:domain:noperm,vers=1.0'
#AUTOMOUNT_SHARE[/media/share2]='cifs://192.168.103.55/share2:share:password_base64:domain:noperm,vers=1.0'
##
## AUTOMOUNT_SHARE[<mountpoint>]='direct:<device>:[<group>]:[<mode>]:[<opt>]'
## <mountpoint> # Точка монтирования. Пример: /media/direct:sdb1
## <device> # Устройство подключения
## <group> # Назначенная группа на точку монтирования. Пример: users
## <mode> # Назначенные права доступа. Пример: 775
## <opt> # Опции подключения. Пример: noacl
#AUTOMOUNT_SHARE[/media/direct:sdb1]='direct:/dev/sdb1:wheel:775:noacl'
#AUTOMOUNT_SHARE[/media/sda4]='direct:/dev/sda4:wheel:775:noacl'
#AUTOMOUNT_SHARE[/mnt/sshfs/user-1@192.168.1.1]='sshfs:superadmin@192.168.1.1:/home/user-1:password_base64:'
#AUTOMOUNT_SHARE[/mnt/nfs/user-1@192.168.1.1]='nfs:192.168.1.1:/home/user-1'
##
## AUTOMOUNT_SHARE[<mountpoint>]='virtiofs:<tag>:[<group>]:[<mode>]:[<opt>]'
## <mountpoint> # Точка монтирования. Пример: /media/virtiofs:mytag
## <tag> # Объявленный тег virtiofs. Пример: mytag
## <group> # Назначенная группа на точку монтирования. Пример: users
## <mode> # Назначенные права доступа. Пример: 775
## <opt> # Опции подключения. Пример:
#AUTOMOUNT_SHARE[/media/mytag]='virtiofs:mytag:wheel:775:'
##
## AUTOMOUNT_SHARE[<mountpoint>]='sshfs:<username>@<hostname>:<share>:<password_base64>:[<opt>]'
## <mountpoint> # Точка монтирования. Пример: /media/sshfs:superadmin@192.168.1.1
## <username> # Имя пользователя. Пример: superadmin
## <hostname> # Адрес или имя хоста. Пример: 192.168.1.1
## <share> # Путь каталога который будет подключен. Пример: /home/superadmin
## <password_base64> # Пароль пользователя. Пароль кодировать в base64: base64 <<< 'password'
## <opt> # Опции подключения. Пример:
#AUTOMOUNT_SHARE[/mnt/sshfs:user-1@192.168.1.1]='sshfs:user-1@192.168.1.1:/home/user-1:password_base64:'
##
## AUTOMOUNT_SHARE[<mountpoint>]='nfs:<hostname>:<share>'
## <mountpoint> # Точка монтирования. Пример: /media/nfs:user1@192.168.1.1
## <hostname> # Адрес или имя хоста. Пример: 192.168.1.1
## <share> # Путь каталога который будет подключен. Пример: /home/superadmin
#AUTOMOUNT_SHARE[/mnt/nfs:user-1@192.168.1.1]='nfs:192.168.1.1:/home/user-1'
## Mount local partitions
## Подключение всех разделов при старте
@ -1148,10 +1181,14 @@ VERSION=
## <directory> # mountpoint for bind mounts (see --bind/rbind)
## <file> # regular file for loopdev setup
## <attributs>: # Разделение , или ;
## acl # Включить POSIX ACL
## noacl # Отключить POSIX ACL
## udba=notify # Для AUFS устанавливает либо «fsnotify», либо «inotify» для всех каталогов, к которым осуществляется доступ, в своих ветвях и получает событие об этом каталоге и его дочерних элементах
## nosuid # Block the operation of suid, and sgid bits. | Блокировать работу suid и sgid бит.
## nodev # Don't interpret block special devices on the filesystem. | Не интерпретируйте блокировку специальных устройств в файловой системе.
## noexec # Don't allow the execution of executable binaries | Не позволить выполнять исполняемые двоичные файлы
## nosymfollow # Don't follow symlinks when resolving paths | Не переходить по символическим ссылкам при разрешении путей
## MOUNT_ATTR[/]=acl,udba=notify
## MOUNT_ATTR[/home]=nosuid,nodev,noexec,nosymfollow
## MOUNT_ATTR[/tmp,/dev/shm]=nosuid,nodev,noexec
@ -1375,29 +1412,25 @@ VERSION=
## # Можно комбинировать группы с пользователями, пример: @wheel,user-1
## [*] # Все пользователи системы. Если не указано, то все пользователи системы
## =<desktop_file_n> # Файлы *.desktop. Разделитель: запятая(,) или точка с запятой(;). Указывается без суфикса ".desktop"
## =<desktop_file_n>@lock # Файл *.desktop с установленным владельцем:группой root:root и правами на файл 770
## =*@lock # Установить владельца:группу root:root и права на каталог рабочего стола рекурсивно 777
## # Права устанавливаются только при наличии домашнего каталога пользователя,
## # если пользователь доменный, и нет рабочего каталога, то права будут применены только после перезагрузки
## APPDESKTOP_PLACEONDESKTOP_INIT[superadmin,@wheel]=ubinstall,htop:700
## =<desktop_file_n>@lock # Файл *.desktop с установленным владельцем:группой root:root и ACL правами только чтения
## =@lock # Установить владельца:группу root:root и права ACL только чтения на каталог "Рабочего стола" рекурсивно
## =@dislock # Установить владельца:группу домашний_пользователь:домашний_пользователь и очистить ACL права на каталог "Рабочего стола" рекурсивно
## APPDESKTOP_PLACEONDESKTOP_INIT[superadmin,@wheel]=ubinstall,htop@lock
## APPDESKTOP_PLACEONDESKTOP_INIT=gimp,pinta
## На рабочий стол поместить ярлыки приложений из /usr/share/applications/
## APPDESKTOP_PLACEONDESKTOP[<users>|<@groups>|*]=<desktop_file_n>[:777][:ugo-rwx],<desktop_file_n>[:777][:ugo-rwx]
## APPDESKTOP_PLACEONDESKTOP[<users>|<@groups>|*]=<desktop_file_1>[@lock],<desktop_files_n>[@lock]
## [<users>] # Применить для пользователя, пример: [superadmin,user-1]. Разделитель запятая(,) или точка с запятой(;)
## [<@groups>] # Применить для группы, пример: [@whell,@users]
## # Можно комбинировать группы с пользователями, пример: @wheel,user-1
## [*] # Все пользователи системы. Если не указано, то все пользователи системы
## =<desktop_file_n> # Файлы *.desktop. Разделитель: запятая(,) или точка с запятой(;). Указывается без суфикса ".desktop"
## =<desktop_file_n>:700 # Файл *.desktop с установленным владельцем:группой root:root и правами на файл 777
## =<desktop_file_n>:ugo-rx # Файл *.desktop с установленным владельцем:группой root:root и правами на файл ugo+-rwx
## =*:700 # Установить владельца:группу root:root и права на каталог рабочего стола рекурсивно 777
## =*:ugo-w # Установить владельца:группу root:root и права на каталог рабочего стола рекурсивно ugo+-rwx
## # Права устанавливаются только при наличии домашнего каталога пользователя,
## # если пользователь доменный, и нет рабочего каталога, то права будут применены только после перезагрузки
## =<desktop_file_n>@lock # Файл *.desktop с установленным владельцем:группой root:root и ACL правами только чтения
## =@lock # Установить владельца:группу root:root и права ACL только чтения на каталог рабочего стола рекурсивно
## =@dislock # Установить владельца:группу домашний_пользователь:домашний_пользователь и очистить ACL права на каталог рабочего стола рекурсивно
## APPDESKTOP_PLACEONDESKTOP[superadmin,@wheel]=ubinstall,htop
## APPDESKTOP_PLACEONDESKTOP[user-1]=htop:700
## APPDESKTOP_PLACEONDESKTOP[user-2]=*:700
## APPDESKTOP_PLACEONDESKTOP[user-1]=htop@lock
## APPDESKTOP_PLACEONDESKTOP[user-2]=*@lock
## APPDESKTOP_PLACEONDESKTOP=gimp,pinta
[/etc/ublinux/desktop]
@ -1721,15 +1754,23 @@ VERSION=
## # Обязательные параметры: AUTOINSTALL[device]
#AUTOINSTALL[install_type]=fast
## Тип загрузки системы с устройства
## AUTOINSTALL[boot]=*bios+efi|bios|efi|none
## *bios+efi # Гибридная установка Bios_boot + EFI. По умолчанию
## bios # Только Bios Boot сектор
## efi # Только EFI разел
## none # Не создавать BIOS/EFI разделы
## AUTOINSTALL[bios_boot]=bios+efi
## Устройство на которое будет установлена система. Если установлена опция AUTOINSTALL[device_type], то возможно пречислять через запятую (,) несколько устройств
## AUTOINSTALL[device]=<device_1>[,<device_n>]
## AUTOINSTALL[device]=sda
## AUTOINSTALL[device]=sda,sdb,sdc,sde
## Тип виртуального устройств из выбранных физических, используется для рейда MDADM или LVM и другие
## AUTOINSTALL[device_type]=<type_vfs>
## <type_vfs> # Тип виртуального устройства, доступные типы: *plain|raid0|raid1|raid4|raid5|raid6|raid10|lvm|lvm_dynamic
## AUTOINSTALL[device_type]=*plain
## AUTOINSTALL[device_typevfs]=<type_vfs>
## <type_vfs> # Тип виртуального устройства, доступные типы: *none|raid0|raid1|raid4|raid5|raid6|raid10|lvm|lvm_dynamic
## AUTOINSTALL[device_typevfs]=*none
## Раздел на который будет установлена система (part)/ublinux и пользовательские данные(part)/ublinux-data
## Если указан второй раздел через запятую (,) то установка разделится на (part1)/ublinux (part2)/ublinux-data

Loading…
Cancel
Save