#!/usr/bin/env bash ENABLED=yes [[ ${ENABLED} != yes ]] && exit 0 . /usr/lib/ublinux/functions . /usr/lib/ublinux/os-config SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/desktop; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null # ARG1: AUTOEXEC[user-1,%wheel]="xbindkeys;kde:yakuake;gnome:guake;lxde:guake;xfce:plank" exec_autoexec_set(){ local PARAM="$@" [[ -n ${PARAM} ]] && declare -A AUTOEXEC && eval "${PARAM%%=*}='${PARAM#*=}'" [[ -n ${AUTOEXEC[@]} ]] || return CURRENT_DE=$(detectDE) for ITEM_UNIT in "${!AUTOEXEC[@]}"; do local IS_EXEC= while read USER_GROUP; do if [[ ${USER_GROUP} == 0 ]] \ || ( [[ ${USER_GROUP} =~ ^"%" ]] && getent group "${USER_GROUP//%/}" | grep -q "\b${USER}\b" ) \ || getent passwd "${USER_GROUP}" | grep -q ^"\b${USER}\b"; then IS_EXEC=yes fi done < <(echo "${ITEM_UNIT}" | tr ';, ' \\n) if [[ -n ${IS_EXEC} ]]; then while read DE_CMD; do FIND_DE=${DE_CMD%%:*} FIND_CMD=${DE_CMD#*:} [[ ${FIND_DE} != ${FIND_CMD} && ${FIND_DE} != ${CURRENT_DE} ]] && continue [[ -z ${FIND_CMD} ]] || while read EXEC_CMD; do cd ${HOME} if [[ ${EXEC_CMD} =~ ".desktop"$ ]]; then bash -c "$(grep '^Exec' $(find /usr/share/applications ~/local/share/applications -iname ${EXEC_CMD} 2>/dev/null | tail -1) | tail -1 | sed 's/^Exec=//' | sed 's/%.//' | sed 's/^"//g' | sed 's/" *$//g')" & #echo "bash -c $(grep '^Exec' $(find /usr/share/applications ~/local/share/applications -iname ${EXEC_CMD} 2>/dev/null | tail -1) | tail -1 | sed 's/^Exec=//' | sed 's/%.//' | sed 's/^"//g' | sed 's/" *$//g') &" else bash -c "${FIND_CMD}" & #echo "bash -c ${EXEC_CMD} &" fi done < <(echo "${FIND_CMD}" | tr ',' \\n) done < <(echo "${AUTOEXEC[${ITEM_UNIT}]}" | tr ';' \\n) fi done } # ARG1: AUTOEXEC[superadmin]= exec_autoexec_remove(){ PARAM="$@" [[ -n ${PARAM} ]] && ITEM_UNIT=${PARAM#*[} && ITEM_UNIT=${ITEM_UNIT%%]*} || return 0 [[ -n ${ITEM_UNIT} ]] || return 0 } ################ ##### MAIN ##### ################ if [[ -z $@ || $1 == set ]]; then shift exec_autoexec_set $@ KERNEL_AUTOEXEC=$(cmdline_value autoexec) [[ ${KERNEL_AUTOEXEC} == "" ]] || exec_autoexec_set set AUTOEXEC=${KERNEL_AUTOEXEC} elif [[ $1 == remove ]]; then shift exec_autoexec_remove $@ fi