diff --git a/ublinux/functions b/ublinux/functions index 1a3ee57..78c289b 100755 --- a/ublinux/functions +++ b/ublinux/functions @@ -223,6 +223,14 @@ allow_only_root(){ # Hotkeys functions # ##################### +notify-send(){ + local FIND_DISPLAY=":$(ls /tmp/.X11-unix/* | sed 's#/tmp/.X11-unix/X##' | head -n 1)" + local FIND_USER=$(who | grep '('${FIND_DISPLAY}')' | awk '{print $1}' | head -n 1) #' + local FIND_UID=$(id -u ${FIND_USER}) + [[ -n ${FIND_DISPLAY} && -n ${FIND_USER} && -n ${FIND_UID} ]] || return 1 + sudo -u ${FIND_USER} DISPLAY=${FIND_DISPLAY} DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/${FIND_UID}/bus notify-send "$@" +} + show_run(){ DE=$(detectDE) if [ "$DE" = "kde" -o "$DE" = "plasma" ] ; then @@ -272,8 +280,9 @@ show_hotkeys(){ show_info(){ . /etc/os-release + FILE_INFO="/tmp/info.txt" LIVECDNAME="$NAME" - UPTIME=$(uptime | awk '{print "time - "$1", up - "$3}') + UPTIME=$(uptime | awk '{print "time - "$1", up - "$3}'). RAM=$(free -m | grep Mem | awk '{ print "total - "$2", free - "$4}') SWAP=$(free -m | grep Swap | awk '{ print "total - "$2", free - "$4}') CPU="$(cat /proc/cpuinfo | sed -e '/model name/!d' -e 's/^.*://')" @@ -289,21 +298,25 @@ show_info(){ else PROF_SIZE=$(df -h / |grep aufs | awk '{print " ["$5"] total - "$2", free - "$4}') fi - echo "$LIVECDNAME ($VERSION)" > ~/info.txt - echo "UPTIME: $UPTIME" >> ~/info.txt - echo "KERNEL: $KERNEL" >> ~/info.txt - echo "RAM: $RAM" >> ~/info.txt - echo "SWAP: $SWAP" >> ~/info.txt - [ "$(cat /proc/cmdline | grep changes= )" ] && echo "PROFILE: $PROF_SIZE" >> ~/info.txt - echo -e "CPU: ($CPUARCH) \n$CPU" >> ~/info.txt - echo "VIDEO: $VIDEO" >> ~/info.txt - echo "$GLXINFO" >> ~/info.txt - echo "AUDIO: $AUDIO" >> ~/info.txt - echo "CMDLINE: $CMDLINE" >> ~/info.txt - echo "MODULES:" >> ~/info.txt - grep squashfs /proc/mounts | awk '{print $2}' | sort >> ~/info.txt - mdialog --textbox $HOME/info.txt - rm -f $HOME/info.txt + echo "$LIVECDNAME ($VERSION)" > "${FILE_INFO}" + echo "UPTIME: $UPTIME" >> "${FILE_INFO}" + echo "KERNEL: $KERNEL" >> "${FILE_INFO}" + echo "RAM: $RAM" >> "${FILE_INFO}" + echo "SWAP: $SWAP" >> "${FILE_INFO}" + [ "$(cat /proc/cmdline | grep changes= )" ] && echo "PROFILE: $PROF_SIZE" >> "${FILE_INFO}" + echo -e "CPU: ($CPUARCH) \n$CPU" >> "${FILE_INFO}" + echo "VIDEO: $VIDEO" >> "${FILE_INFO}" + echo "$GLXINFO" >> "${FILE_INFO}" + echo "AUDIO: $AUDIO" >> "${FILE_INFO}" + echo "CMDLINE: $CMDLINE" >> "${FILE_INFO}" + echo "MODULES:" >> "${FILE_INFO}" + grep squashfs /proc/mounts | awk '{print $2}' | sort >> "${FILE_INFO}" + zenity --text-info \ + --width=640 \ + --height=480 \ + --title="Show info" \ + --filename="${FILE_INFO}" + rm -f "${FILE_INFO}" } touchpad(){ @@ -399,4 +412,4 @@ screen_scale(){ fi } -[ "$(basename $0)" = "functions" ] && $@ || true +[[ $(basename $0) == functions ]] && $@ || true diff --git a/ublinux/rc.desktop/all/autoexec b/ublinux/rc.desktop/all/autoexec index ab7114e..b42c73c 100755 --- a/ublinux/rc.desktop/all/autoexec +++ b/ublinux/rc.desktop/all/autoexec @@ -1,22 +1,66 @@ -#!/bin/sh +#!/usr/bin/env bash ENABLED=yes -[ "$ENABLED" != "yes" ] && exit 0 +[[ ${ENABLED} != yes ]] && exit 0 . /usr/lib/ublinux/functions . /usr/lib/ublinux/os-config -SOURCE=${SYSCONF}/config; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null +SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +SOURCE=${SYSCONF}/desktop; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null -DE=$(detectDE) -cd $HOME +# 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 +} -EXEC=$(cmdline_value exec) -[ "$EXEC" != "" -a "$AUTOEXEC" != "" ] && DELIM=, +# ARG1: AUTOEXEC[superadmin]= +exec_autoexec_remove(){ + PARAM="$@" + [[ -n ${PARAM} ]] && ITEM_UNIT=${PARAM#*[} && ITEM_UNIT=${ITEM_UNIT%%]*} || return 0 + [[ -n ${ITEM_UNIT} ]] || return 0 +} -echo "$AUTOEXEC$DELIM$EXEC" | tr ',;' \\n | while read a ;do - NEEDDE=$(echo $a | grep : | awk -F: '{print $1}' | tr A-Z a-z) - PROGRAM=${a/*:/} - [ "$NEEDDE" -a "$NEEDDE" != "$DE" ] && continue - [ -z "$PROGRAM" ] || bash -c "$PROGRAM" & -done +################ +##### 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 diff --git a/ublinux/templates/ublinux-data.ini b/ublinux/templates/ublinux-data.ini index e8f93ae..127bd0c 100644 --- a/ublinux/templates/ublinux-data.ini +++ b/ublinux/templates/ublinux-data.ini @@ -68,13 +68,12 @@ NEEDEDUSERS='superadmin:1000:x:Администратор' ## extra_groups # Дополнительные группы пользователя ## optional # Дополнительные опции, например: '--shell /usr/bin/bash --create-home --no-create-home --no-user-group --non-unique' ## -s, --shell /usr/bin/bash # Регистрационная оболочка новой учётной записи -## -m, --create-home # Создать домашний каталог пользователя ## -M, --no-create-home # Не создавать домашний каталог пользователя ## -N, --no-user-group # Не создавать группу с тем же именем что и у пользователя ## -o, --non-unique # Разрешить создание пользователей с повторяющимися (не уникальными) UID ## password_hash|x # Хеш пароля пользователя, если выбрано 'x', то 'password_hash=DEFAULTPASSWD' -## ADDUSER[superadmin:1000:Администратор:]=x -## ADDUSER[user-1:x:Пользователь-1::vboxusers,libvirt]='$6$E7stRhRS8fCKk7UU$Qoqw62AUaUa5uLIc2KC7WV3MUThhrR8kjXtCODmnKCzKe2zHu1/wmsiWBHZEIk/IQnk/aELQYbUK93OUtrwg60' +## ADDUSER[superadmin:1000:Администратор]=x +## ADDUSER[user-1:x:Пользователь-1:x:vboxusers,libvirt:-s /usr/bin/bash -o]='$6$E7stRhRS8fCKk7UU$Qoqw62AUaUa5uLIc2KC7WV3MUThhrR8kjXtCODmnKCzKe2zHu1/wmsiWBHZEIk/IQnk/aELQYbUK93OUtrwg60' ## Добавить пользователя с ID 1000 в группу Администраторов 'whell' ## ADDADM=*yes|no @@ -156,7 +155,6 @@ MACHINEID=hardware ## Режим работы клавиатуры Num Lock (yes|no). По умолчанию включено, если нет тачпада. #NUMLOCK=no - ## Настройка принтера ## PRINTERADD=manual (default) #PRINTERADD=auto @@ -174,9 +172,6 @@ DEPMOD=yes #TMPFS=no #VARTMPFS=no -## Перечень программ для автозагрузки под пользователем -#AUTOEXEC="xbindkeys;kde:yakuake;gnome:guake;lxde:guake;xfce:plank" - ## Включение pulseaudio (yes, no) #PULSEAUDIO=yes @@ -719,6 +714,13 @@ NSSWITCHWINBIND=yes #DESKTOP=xfce #DISPLAYMANAGER_DEFAULTUSER=user-1 +## Перечень программ для автозагрузки под указанным пользователем или группой +## AUTOEXEC[user1,usern,%group1,%groupn]="%cmd1%;%de1%:%cmd2%;%de2%:%cmd3%,%cmd4%" +## user,%group # Пользователи и группы, если не указан, то применяется для всех пользователей +## %de% # Среда рабочего стола (Desktop environment): kde,gnome,xfce,lxde,lxqt. Не обязательный параметр. +## %cmd% # Команда запуска +#AUTOEXEC[user-1,%wheel]="xbindkeys;kde:yakuake;gnome:guake;lxde:guake;xfce:plank" + ## Простой режим мульти рабочего места MultiSeat, когда в ПК установлено два независимых графических контроллера ## Посмотреть все устройства loginctl seat-status seat0 ## lsusb lspci @@ -795,7 +797,7 @@ NSSWITCHWINBIND=yes ## =none # Отключить сборку векторных фирменных обоев /usr/share/backgrounds/background.jpg ## =%файл% # Выбранный файл установить как обою ## =%путь_до_каталога% # Из каталога, выбрать случайную картинку для обоев -## =#002d55 # Установить сплошным цветом выбранный шестнадцатеричный код цвета +## ='#002d55' # Установить сплошным цветом выбранный шестнадцатеричный код цвета ## Если параметр не задан, то фирменная обоя по умолчанию собирается в /usr/share/backgrounds/background.jpg #BACKGROUND_DE=/mnt/livedata/ublinux-data/backgrounds/wallpapers/ @@ -810,7 +812,7 @@ NSSWITCHWINBIND=yes ## =none # Отключить сборку векторных фирменных обоев /usr/share/backgrounds/dm.jpg ## =%файл% # Выбранный файл установить как обою ## =%путь_до_каталога% # Из каталога, выбрать случайную картинку для обоев -## =#002d55 # Установить сплошным цветом выбранный шестнадцатеричный код цвета +## ='#002d55' # Установить сплошным цветом выбранный шестнадцатеричный код цвета ## Если параметр не задан, то фирменная обоя по умолчанию собирается в /usr/share/backgrounds/dm.jpg #BACKGROUND_DM=/mnt/livedata/ublinux-data/backgrounds/wallpapers/ diff --git a/ublinux/templates/ublinux-data_ru.ini b/ublinux/templates/ublinux-data_ru.ini index e8f93ae..127bd0c 100644 --- a/ublinux/templates/ublinux-data_ru.ini +++ b/ublinux/templates/ublinux-data_ru.ini @@ -68,13 +68,12 @@ NEEDEDUSERS='superadmin:1000:x:Администратор' ## extra_groups # Дополнительные группы пользователя ## optional # Дополнительные опции, например: '--shell /usr/bin/bash --create-home --no-create-home --no-user-group --non-unique' ## -s, --shell /usr/bin/bash # Регистрационная оболочка новой учётной записи -## -m, --create-home # Создать домашний каталог пользователя ## -M, --no-create-home # Не создавать домашний каталог пользователя ## -N, --no-user-group # Не создавать группу с тем же именем что и у пользователя ## -o, --non-unique # Разрешить создание пользователей с повторяющимися (не уникальными) UID ## password_hash|x # Хеш пароля пользователя, если выбрано 'x', то 'password_hash=DEFAULTPASSWD' -## ADDUSER[superadmin:1000:Администратор:]=x -## ADDUSER[user-1:x:Пользователь-1::vboxusers,libvirt]='$6$E7stRhRS8fCKk7UU$Qoqw62AUaUa5uLIc2KC7WV3MUThhrR8kjXtCODmnKCzKe2zHu1/wmsiWBHZEIk/IQnk/aELQYbUK93OUtrwg60' +## ADDUSER[superadmin:1000:Администратор]=x +## ADDUSER[user-1:x:Пользователь-1:x:vboxusers,libvirt:-s /usr/bin/bash -o]='$6$E7stRhRS8fCKk7UU$Qoqw62AUaUa5uLIc2KC7WV3MUThhrR8kjXtCODmnKCzKe2zHu1/wmsiWBHZEIk/IQnk/aELQYbUK93OUtrwg60' ## Добавить пользователя с ID 1000 в группу Администраторов 'whell' ## ADDADM=*yes|no @@ -156,7 +155,6 @@ MACHINEID=hardware ## Режим работы клавиатуры Num Lock (yes|no). По умолчанию включено, если нет тачпада. #NUMLOCK=no - ## Настройка принтера ## PRINTERADD=manual (default) #PRINTERADD=auto @@ -174,9 +172,6 @@ DEPMOD=yes #TMPFS=no #VARTMPFS=no -## Перечень программ для автозагрузки под пользователем -#AUTOEXEC="xbindkeys;kde:yakuake;gnome:guake;lxde:guake;xfce:plank" - ## Включение pulseaudio (yes, no) #PULSEAUDIO=yes @@ -719,6 +714,13 @@ NSSWITCHWINBIND=yes #DESKTOP=xfce #DISPLAYMANAGER_DEFAULTUSER=user-1 +## Перечень программ для автозагрузки под указанным пользователем или группой +## AUTOEXEC[user1,usern,%group1,%groupn]="%cmd1%;%de1%:%cmd2%;%de2%:%cmd3%,%cmd4%" +## user,%group # Пользователи и группы, если не указан, то применяется для всех пользователей +## %de% # Среда рабочего стола (Desktop environment): kde,gnome,xfce,lxde,lxqt. Не обязательный параметр. +## %cmd% # Команда запуска +#AUTOEXEC[user-1,%wheel]="xbindkeys;kde:yakuake;gnome:guake;lxde:guake;xfce:plank" + ## Простой режим мульти рабочего места MultiSeat, когда в ПК установлено два независимых графических контроллера ## Посмотреть все устройства loginctl seat-status seat0 ## lsusb lspci @@ -795,7 +797,7 @@ NSSWITCHWINBIND=yes ## =none # Отключить сборку векторных фирменных обоев /usr/share/backgrounds/background.jpg ## =%файл% # Выбранный файл установить как обою ## =%путь_до_каталога% # Из каталога, выбрать случайную картинку для обоев -## =#002d55 # Установить сплошным цветом выбранный шестнадцатеричный код цвета +## ='#002d55' # Установить сплошным цветом выбранный шестнадцатеричный код цвета ## Если параметр не задан, то фирменная обоя по умолчанию собирается в /usr/share/backgrounds/background.jpg #BACKGROUND_DE=/mnt/livedata/ublinux-data/backgrounds/wallpapers/ @@ -810,7 +812,7 @@ NSSWITCHWINBIND=yes ## =none # Отключить сборку векторных фирменных обоев /usr/share/backgrounds/dm.jpg ## =%файл% # Выбранный файл установить как обою ## =%путь_до_каталога% # Из каталога, выбрать случайную картинку для обоев -## =#002d55 # Установить сплошным цветом выбранный шестнадцатеричный код цвета +## ='#002d55' # Установить сплошным цветом выбранный шестнадцатеричный код цвета ## Если параметр не задан, то фирменная обоя по умолчанию собирается в /usr/share/backgrounds/dm.jpg #BACKGROUND_DM=/mnt/livedata/ublinux-data/backgrounds/wallpapers/