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.
68 lines
2.4 KiB
68 lines
2.4 KiB
#!/usr/bin/env bash
|
|
|
|
ENABLED=yes
|
|
[[ ${ENABLED} != yes ]] && exit 0
|
|
|
|
. /usr/lib/ublinux/functions
|
|
. /usr/lib/ublinux/default
|
|
|
|
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;xfce:plank.desktop,xterm;lxde:guake"
|
|
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="|"set+="|"set++=") ]]; then
|
|
shift
|
|
exec_autoexec_set $@
|
|
KERNEL_AUTOEXEC="$(cmdline_value autoexec)"
|
|
[[ -n ${KERNEL_AUTOEXEC} ]] && exec_autoexec_set AUTOEXEC="${KERNEL_AUTOEXEC}"
|
|
elif [[ $1 == @("set-="|"set--="|"remove") ]]; then
|
|
shift
|
|
exec_autoexec_remove $@
|
|
fi
|
|
|