diff --git a/ublinux/default b/ublinux/default index 997daf4..543cc3f 100644 --- a/ublinux/default +++ b/ublinux/default @@ -15,6 +15,10 @@ declare -A REPOSITORY # autostart apps/scripts #AUTOEXEC= +#rc.desktop/all/placeondesktop +#rc.desktop/deonly/xfce4-ubinstall-trust +UBINSTALL_DESKTOP="ubinstall,ubinstall.cli" + #rc.desktop/all/fusion-icon # timeout to start fusion-icon #FUSIONICONTIMEOUT=5 diff --git a/ublinux/rc.desktop/all/placeondesktop b/ublinux/rc.desktop/all/placeondesktop index a4e42db..06a6778 100755 --- a/ublinux/rc.desktop/all/placeondesktop +++ b/ublinux/rc.desktop/all/placeondesktop @@ -1,21 +1,67 @@ -#!/bin/sh +#!/usr/bin/env bash ENABLED=yes -[[ ${ENABLED} == "yes" ]] || exit 0 - -XDG_DESKTOP_DIR="$HOME/Рабочий стол" - -. /usr/lib/ublinux/default -SOURCE=${SYSCONF}/config; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null - -[ -z "$PLACEONDESKTOP" ] && exit 0 -[ -f ~/.config/.desktopinitialized ] && exit 0 -. ~/.config/user-dirs.dirs -[ -d "$XDG_DESKTOP_DIR" ] || mkdir -p "$XDG_DESKTOP_DIR" -echo "$PLACEONDESKTOP" | tr ',;' \\n | while read a ;do - DF=$(find /usr/share/applications -type f -name $a.desktop ) - [ -f "$DF" ] && cp "$DF" "$XDG_DESKTOP_DIR" - grep "#!/usr/bin/env xdg-open" "$XDG_DESKTOP_DIR"/$a.desktop || sed -i 1s%^%'\#\!/usr/bin/env xdg-open\n'% "$XDG_DESKTOP_DIR"/$a.desktop - chmod 755 "$XDG_DESKTOP_DIR"/$a.desktop -done -touch ~/.config/.desktopinitialized +[[ ${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 diff --git a/ublinux/rc.desktop/deonly/xfce4-placeondesktop-trust b/ublinux/rc.desktop/deonly/xfce4-placeondesktop-trust new file mode 100755 index 0000000..7bd6e05 --- /dev/null +++ b/ublinux/rc.desktop/deonly/xfce4-placeondesktop-trust @@ -0,0 +1,65 @@ +#!/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 +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}]}" + done + fi +} + +place_on_desktop_trust(){ + trust_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 "${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 + } + 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" + 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//@/}( |$) ]] \ + && trust_desktop ${APPDESKTOP_PLACEONDESKTOP[${SELECT_USERS_GROUPS}]} + 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 diff --git a/ublinux/rc.desktop/xfce/xfce4-placeondesktop-trust b/ublinux/rc.desktop/xfce/xfce4-placeondesktop-trust new file mode 120000 index 0000000..6b9fcfb --- /dev/null +++ b/ublinux/rc.desktop/xfce/xfce4-placeondesktop-trust @@ -0,0 +1 @@ +../deonly/xfce4-placeondesktop-trust \ No newline at end of file diff --git a/ublinux/rc.preinit/02-skel-adds b/ublinux/rc.preinit/02-skel-adds index c4db171..02222ad 100755 --- a/ublinux/rc.preinit/02-skel-adds +++ b/ublinux/rc.preinit/02-skel-adds @@ -14,21 +14,6 @@ DEBUGMODE=no . usr/lib/ublinux/default debug_mode "$0" "$@" -INSTALLDESKTOP="ubinstall;ubinstall.cli" -echo "${INSTALLDESKTOP}" | tr ',;' \\n | while read i; do - if [[ -f usr/share/applications/"${i}".desktop ]]; then - if ! [[ -w /memory/layer-base/0 || -d /mnt/livedata || -w /mnt/livemedia ]] || grep -q ".*-iso.sgn" <<< $(cmdline_value ub.sgnfiles); then - if ! grep -q ^Hidden=true usr/share/applications/"${i}".desktop ; then -# DESKTOPNAME=$(chroot . bash -c "xdg-user-dirs-update && xdg-user-dir DESKTOP | cut -d/ -f3") - DESKTOPNAME=$(chroot . gettext -d xdg-user-dirs "Desktop") - mkdir -p etc/skel/"${DESKTOPNAME}" - cp usr/share/applications/"${i}".desktop etc/skel/"${DESKTOPNAME}"/ && echodebug "${i}.desktop added to skel." - chmod 755 etc/skel/"${DESKTOPNAME}"/"${i}".desktop - fi - fi - fi -done - if [[ -f etc/ublinux/steam ]] ;then . etc/ublinux/steam rm -f etc/skel/.steam etc/skel/.local/share/Steam 2>/dev/null diff --git a/ublinux/templates/ublinux-data.ini b/ublinux/templates/ublinux-data.ini index 37f9be6..0b43876 100644 --- a/ublinux/templates/ublinux-data.ini +++ b/ublinux/templates/ublinux-data.ini @@ -1282,6 +1282,26 @@ NSSWITCHWINBIND=yes #APPDESKTOP_BLACKLIST[user-1]=xarchiver,xfce4-power-manager-settings #APPDESKTOP_WHITELIST[user-1]= +## На рабочий стол поместить ярлыки приложений из /usr/share/applications/ , только для нового пользователя +## APPDESKTOP_PLACEONDESKTOP_INIT[]= +## [] # Применить для пользователя, пример: [superadmin,user-1]. Разделитель: запятая, точка с запятой +## [<@groups>] # Применить для группы, пример: [@whell,@users] +## # Можно комбинировать группы с пользователями, пример: @wheel,user-1 +## [*] # Все пользователи системы. Если не указано, то все пользователи системы +## = # Файлы *.desktop. Разделитель: запятая, точка с запятой. Указывается без суфикса ".desktop" +## APPDESKTOP_PLACEONDESKTOP_INIT[superadmin,@wheel]=ubinstall,htop +## APPDESKTOP_PLACEONDESKTOP_INIT=gimp,pinta + +## На рабочий стол поместить ярлыки приложений из /usr/share/applications/ +## APPDESKTOP_PLACEONDESKTOP[]= +## [] # Применить для пользователя, пример: [superadmin,user-1]. Разделитель: запятая, точка с запятой +## [<@groups>] # Применить для группы, пример: [@whell,@users] +## # Можно комбинировать группы с пользователями, пример: @wheel,user-1 +## [*] # Все пользователи системы. Если не указано, то все пользователи системы +## = # Файлы *.desktop. Разделитель: запятая, точка с запятой. Указывать без суфикса ".desktop" +## APPDESKTOP_PLACEONDESKTOP[superadmin,@wheel]=ubinstall,htop +## APPDESKTOP_PLACEONDESKTOP=gimp,pinta + [/etc/ublinux/desktop] ## Настройка сервисов окружения рабочего стола ################################################################################