diff --git a/ublinux/default b/ublinux/default index 8ac270d..0b91d9a 100644 --- a/ublinux/default +++ b/ublinux/default @@ -18,6 +18,8 @@ declare -A AUTOUPDATE declare -A UBPILE declare -A AUTOINSTALL declare -A UPDATEHOME +declare -A XKBMODEL XKBLAYOUT XKBVARIANT +declare -A CONSOLE_FONT CONSOLE_FONT_MAP CONSOLE_FONT_UNIMAP CONSOLE_KEYMAP CONSOLE_KEYMAP_TOGGLE ##/rc.desktop/all/* is launching when desktop is ready @@ -39,7 +41,7 @@ UBINSTALL_DESKTOP="ubinstall-gtk,ubinstall.cli" # set keyboard layout when system start #RESETKBMODE=yes # set on/off/autoset numlock kbd mode -#NUMLOCK +#NUMLOCK=on #/rc.desktop/all/ublinuxupdate UBLINUXUPDATE=ask @@ -129,22 +131,58 @@ BACKGROUND_DM=/usr/share/backgrounds/dm.jpg # for help "man xkeyboard-config" #/rc.post.d/11-xorg -HARDCONF=etc/ublinux/service.conf +HARDCONF=/etc/ublinux/service.conf # make /etc/X11/xorg.conf.d/00-keyboard.conf #SETXORGRES=yes -#MKKBDFXORG=yes +# Отключить глобально настройку раскладки из параметров конфигурации +#MKKBDFXORG=no -# options (only if its not specified in /etc/ublinux/keyboard ) -#/rc.desktop/all/keyboard +# Настройка параметров раскладки +#/rc.post.d/11-xorg #/rc.xorg/10-fixkeyboard_layout -XKBMODEL=pc105 -XKBLAYOUT=us,ru -XKBVARIANT=ru +XKBMODEL[ar]=pc105 +XKBMODEL[fr]=pc105 +XKBMODEL[de]=pc105 +XKBMODEL[ru]=pc105 +#XKBMODEL=pc105 +XKBLAYOUT[ar]=us,ara +XKBLAYOUT[fr]=us,fr +XKBLAYOUT[de]=us,de +XKBLAYOUT[ru]=us,ru +#XKBLAYOUT=us,ru,fr,de +#XKBVARIANT[ar]= +#XKBVARIANT[fr]= +#XKBVARIANT[de]= +#XKBVARIANT[ru]= +#XKBVARIANT= XKBOPTIONS=grp:lctrl_lshift_toggle,grp_led:scroll,compose:rwin -KEYBOARD=ru -KEYTABLE=ru4 -#STEAMNODPMS=yes +# Настройка раскладки консоли +#/rc.preinit.d/53-language +CONSOLE_FONT[ar]="latarcyrheb-sun16" +CONSOLE_FONT[fr]="eurlatgr" +CONSOLE_FONT[de]="eurlatgr" +CONSOLE_FONT[ru]="latarcyrheb-sun16" +CONSOLE_FONT="latarcyrheb-sun16" +CONSOLE_KEYMAP[ar]="fa" +CONSOLE_KEYMAP[fr]="fr-latin9" +CONSOLE_KEYMAP[de]="de-latin1" +CONSOLE_KEYMAP[ru]="ruwin_ct_sh-UTF-8" +#CONSOLE_KEYMAP="us" +#CONSOLE_KEYMAP_TOGGLE[ar]= +#CONSOLE_KEYMAP_TOGGLE[fr]= +#CONSOLE_KEYMAP_TOGGLE[de]= +#CONSOLE_KEYMAP_TOGGLE[ru]= +#CONSOLE_KEYMAP_TOGGLE= + +# Настройка локализации +#/rc.preinit.d/53-language +# Всегда принудительно генерироваль локализацию +#FORCE_LOCARCHIVE=no +#LOCALE="en_US.UTF-8,ru_RU.UTF-8" +#LOCALE="en_US.UTF-8" +#LANG="ru_RU.UTF-8" +#LANG="en_US.UTF-8" #/rc.preinit/10-accounts DEFAULTPASSWD='$6$E7stRhRS8fCKk7UU$Qoqw62AUaUa5uLIc2KC7WV3MUThhrR8kjXtCODmnKCzKe2zHu1/wmsiWBHZEIk/IQnk/aELQYbUK93OUtrwg60' @@ -173,15 +211,6 @@ STEAMAPP=/mnt/livedata/ublinux-data/steam #/rc.preinit.d/30-network-hostname HOSTNAME=ublinux-install -#/rc.preinit.d/53-language -#FORCE_LOCARCHIVE=no -LOCALE="en_US.UTF-8,ru_RU.UTF-8" -LANG="ru_RU.UTF-8" -CONSOLE_FONT=cyr-sun16 -CONSOLE_KEYMAP=ru -CONSOLE_KEYMAP_TOGGLE="grp:lctrl_lshift_toggle" -#CONSOLE_KEYMAP_TOGGLE=ruwin_ct_sh-UTF-8 - #/rc.preinit.d/10-system MACHINEID=hardware diff --git a/ublinux/functions b/ublinux/functions index b061b6d..78e12c3 100755 --- a/ublinux/functions +++ b/ublinux/functions @@ -837,11 +837,12 @@ get_conf_useradd_from_system(){ local FILE_PASSWD="${ROOTFS}/etc/passwd" local FILE_SHADOW="${ROOTFS}/etc/shadow" local FILE_LOGINDEFS="${ROOTFS}/etc/login.defs" + local FILE_DEFAULT_USERADD="${ROOTFS}/etc/default/useradd" [[ -r ${FILE_PASSWD} ]] && local DATA_FILE_PASSWD=$(< ${FILE_PASSWD}) [[ -r ${FILE_SHADOW} ]] && local DATA_FILE_SHADOW=$(< ${FILE_SHADOW}) - local DEFAULT_HOME="/home" - local DEFAULT_SHELL="/bin/bash" - + local DATA_FILE_DEFAULT_USERADD=$(< ${FILE_DEFAULT_USERADD}) + [[ ${DATA_FILE_DEFAULT_USERADD} =~ ($'\n'|^)+[[:blank:]]*HOME=([^$'\n']+)($'\n'|$)+ ]] && local DEFAULT_HOME=${BASH_REMATCH[2]:-/home} + [[ ${DATA_FILE_DEFAULT_USERADD} =~ ($'\n'|^)+[[:blank:]]*SHELL=([^$'\n']+)($'\n'|$)+ ]] && local DEFAULT_SHELL=${BASH_REMATCH[2]:-/usr/bin/bash} show_user(){ local SELECT_USER="$1" local SELECT_PLAINPASSWORD SELECT_UID SELECT_GROUP SELECT_GECOS SELECT_HOME SELECT_SHELL @@ -876,6 +877,7 @@ get_conf_useradd_from_system(){ SELECT_EXTRAGROUPS="${USER_EXTRAGROUPS//$'\n'/,}" [[ -n ${SELECT_HOME} && ${SELECT_HOME} != "${DEFAULT_HOME}/${SELECT_USER}" ]] && SELECT_OPTIONAL+=" --home-dir ${SELECT_HOME}" [[ -n ${SELECT_SHELL} && ${SELECT_SHELL} != ${DEFAULT_SHELL} ]] && SELECT_OPTIONAL+=" --shell ${SELECT_SHELL}" + [[ -r ${SELECT_HOME}/.config/locale.conf && $(< ${SELECT_HOME}/.config/locale.conf) =~ (^|$'\n')[[:blank:]]*LANG=([^$|$'\n']+)[[:blank:]]*($|$'\n') ]] && SELECT_OPTIONAL+=" --lang ${BASH_REMATCH[2]}" if [[ -z ${NOT_ONLY_CHANGES} && ${SELECT_PASSWORD} == @("!*"|"!"|"*") ]]; then local DATA_SYSUSERS_GROUP DATA_SYSUSERS_GECOS DATA_SYSUSERS_HOME DATA_SYSUSERS_SHELL # Выриант1: u vault 319 "Vault daemon" /var/lib/vault @@ -1572,16 +1574,6 @@ ubconfig_exec_system(){ *) NO_FIND_EXCUTE=1 ;; esac ;; - "[${SYSCONF}/clock]"|"[clock]") - case "${NAME_VAR}" in - ZONE) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/10-system exec_timezone ;; - HWCLOCK_SYNC) - ${ROOTFS}/usr/lib/ublinux/rc.halt/20-timesave - ${ROOTFS}/usr/lib/ublinux/rc.post.d/02-hwclock - ;; - *) NO_FIND_EXCUTE=1 ;; - esac - ;; "[${SYSCONF}/server]"|"[server]") case "${NAME_VAR}" in STORAGE_CONTAINERS_PATH) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/80-server-storage exec_storage_containers_path ;; @@ -1668,6 +1660,41 @@ ubconfig_exec_system(){ *) NO_FIND_EXCUTE=1 ;; esac ;; + "[${SYSCONF}/clock]"|"[clock]") + case "${NAME_VAR}" in + ZONE) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/10-system exec_timezone ;; + HWCLOCK_SYNC) + ${ROOTFS}/usr/lib/ublinux/rc.halt/20-timesave + ${ROOTFS}/usr/lib/ublinux/rc.post.d/02-hwclock + ;; + *) NO_FIND_EXCUTE=1 ;; + esac + ;; + "[${SYSCONF}/locale]"|"[locale]") + case "${NAME_VAR}" in + LOCALE) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/53-language exec_01_set_locale ;; + LANG) + ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/53-language exec_01_set_locale + ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/53-language exec_02_set_lang + ;; + *) NO_FIND_EXCUTE=1 ;; + esac + ;; + "[${SYSCONF}/keyboard]"|"[keyboard]") + case "${NAME_VAR}" in + NUMLOCK) ${ROOTFS}/usr/lib/ublinux/rc.xorg/10-fixkeyboard_layout ;; + XKBMODEL) ${ROOTFS}/usr/lib/ublinux/rc.post.d/11-xorg exec_mkkbdfxorg ;; + XKBLAYOUT) ${ROOTFS}/usr/lib/ublinux/rc.post.d/11-xorg exec_mkkbdfxorg ;; + XKBVARIANT) ${ROOTFS}/usr/lib/ublinux/rc.post.d/11-xorg exec_mkkbdfxorg ;; + XKBOPTIONS) ${ROOTFS}/usr/lib/ublinux/rc.post.d/11-xorg exec_mkkbdfxorg ;; + CONSOLE_FONT) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/53-language exec_03_set_vconsole ;; + CONSOLE_FONT_MAP) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/53-language exec_03_set_vconsole ;; + CONSOLE_FONT_UNIMAP) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/53-language exec_03_set_vconsole ;; + CONSOLE_KEYMAP) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/53-language exec_03_set_vconsole ;; + CONSOLE_KEYMAP_TOGGLE) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/53-language exec_03_set_vconsole ;; + *) NO_FIND_EXCUTE=1 ;; + esac + ;; \[*\]) case "${NAME_VAR}" in *) NO_FIND_EXCUTE=1 ;; diff --git a/ublinux/rc.d/rc.xorg b/ublinux/rc.d/rc.xorg index 7942b48..4302563 100755 --- a/ublinux/rc.d/rc.xorg +++ b/ublinux/rc.d/rc.xorg @@ -8,7 +8,7 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || exit 0 for SCRIPT in /usr/lib/ublinux/rc.xorg/*; do - [ -x ${SCRIPT} ] && ${SCRIPT} 2>/dev/null + [[ -x ${SCRIPT} ]] && . ${SCRIPT} 2>/dev/null done true diff --git a/ublinux/rc.desktop/all/keyboard b/ublinux/rc.desktop/all/keyboard deleted file mode 100755 index 0c54253..0000000 --- a/ublinux/rc.desktop/all/keyboard +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash - -ENABLED=yes -[[ ${ENABLED} == yes ]] || exit 0 - -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || 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 - -SYSCONF="${ROOTFS}${SYSCONF}" -SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null -SOURCE=${SYSCONF}/keyboard; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null - -[[ ${RESETKBMODE} != @(no|disable) ]] && setxkbmap ${XKBLAYOUT} -model ${XKBMODEL} -option ${XKBOPTIONS} - -# Automatic detection PC/notebooks -if [[ -z ${NUMLOCK} ]]; then - if xinput list | grep -qi touchpad ; then - NUMLOCK=no - else - NUMLOCK=yes - fi -fi - -[[ ${NUMLOCK} == @(yes|on) ]] && numlockx on -[[ ${NUMLOCK} == @(no|off) ]] && numlockx off diff --git a/ublinux/rc.halt.pre/20-grub b/ublinux/rc.halt.pre/20-grub index 821a799..ead0e30 100755 --- a/ublinux/rc.halt.pre/20-grub +++ b/ublinux/rc.halt.pre/20-grub @@ -15,6 +15,7 @@ debug_mode "$0" "$@" SYSCONF="${ROOTFS}${SYSCONF}" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +SOURCE=${SYSCONF}/locale; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/boot; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null get_path_grub2(){ @@ -40,6 +41,12 @@ control_grub_var_cfg(){ sed "/^\s*${STR_SET}.*/d; /^\s*${STR_EXPORT}\s*$/d" -i ${FILE_GRUB_VAR_USER} fi } +exec_grub_lang(){ + [[ -n $@ ]] && STR_SET_VALUE="${@%%_*}" || STR_SET_VALUE="${LANG%%_*}" + STR_SET="set lang=" + STR_EXPORT="export lang" + [[ -n $(cmdline_value lang) ]] || control_grub_var_cfg +} exec_grub_timeout(){ [[ -n $@ ]] && STR_SET_VALUE="$@" || STR_SET_VALUE="${GRUB_TIMEOUT}" STR_SET="set timeout=" @@ -56,8 +63,8 @@ saved_entry=${GRUB_DEFAULT} EOF ) LC_ALL=C -# echo -e "${DATA_GRUBENV}$(yes "" | head -n $((1024-"${#DATA_GRUBENV}")) | tr \\n '#')" > "${PATH_GRUB}/grubenv" - echo -ne "${DATA_GRUBENV}\n$(printf -- '#'%.s $(seq -s ' ' $((1023-"${#DATA_GRUBENV}"))))" > "${PATH_GRUB}/grubenv" +# echo -e "${DATA_GRUBENV}$(yes "" | head -n $((1024-"${#DATA_GRUBENV}")) | tr \\n '#')" > "${FILE_GRUBENV}/" + echo -ne "${DATA_GRUBENV}\n$(printf -- '#'%.s $(seq -s ' ' $((1023-"${#DATA_GRUBENV}"))))" > "${FILE_GRUBENV}" fi } exec_grub_superusers(){ diff --git a/ublinux/rc.halt.pre/71-kernel b/ublinux/rc.halt.pre/71-kernel index a528cc1..045888e 100755 --- a/ublinux/rc.halt.pre/71-kernel +++ b/ublinux/rc.halt.pre/71-kernel @@ -31,11 +31,7 @@ remove_oldkernel_from_boot(){ exec_prepare_menu_kernel(){ # Сформировать меню выбора версии ядра mountpoint --quiet "${PATH_BOOT}" || return 0 - FILE_LANG=${LANG%_*} - FILE_BOOTMENU_KERNEL="/memory/data/from/0/boot/grub/ublinux/grub_${FILE_LANG}_settings_kernel.cfg" - TXT_RETURN="Return"; TXT_SELECTKERNEL="Select kernel version" - TXT_RU_RETURN="Возврат"; TXT_RU_SELECTKERNEL="Выбрать версию ядра" - [[ ${FILE_LANG} == "ru" ]] && TXT_RETURN=${TXT_RU_RETURN} && TXT_SELECTKERNEL=${TXT_RU_SELECTKERNEL} + FILE_BOOTMENU_KERNEL="/memory/data/from/0/boot/grub/ublinux/grub_settings_kernel.cfg" local DATA_BOOTMENU_KERNEL= for VMLINUZ_FILES in ${PATH_BOOT}/vmlinuz-*; do [[ -f "${VMLINUZ_FILES}" ]] || continue @@ -46,7 +42,7 @@ exec_prepare_menu_kernel(){ UBLINUX_FILE="ublinux-\${VMLINUZ_VER}" [[ -f ${PATH_BOOT}/addon-${VMLINUZ_VER} ]] && ADDON_FILE="addon-\${VMLINUZ_VER}" || ADDON_FILE="" DATA_BOOTMENU_KERNEL+=\ -" menuentry \"${TXT_SELECTKERNEL}: ${VMLINUZ_VER}\" --unrestricted { +" menuentry \$\"Change the kernel version\"\": ${VMLINUZ_VER}\" --unrestricted { VMLINUZ_VER=\"${VMLINUZ_VER}\" VMLINUZ_FILE=\"${VMLINUZ_FILE}\" UBLINUX_FILE=\"${UBLINUX_FILE}\" @@ -55,16 +51,16 @@ exec_prepare_menu_kernel(){ export VMLINUZ_FILE export UBLINUX_FILE export ADDON_FILE - configfile \${prefix}/ublinux/grub_${FILE_LANG}.cfg + configfile \${prefix}/ublinux/grub_main.cfg } " fi done if [[ -n ${DATA_BOOTMENU_KERNEL} ]]; then DATA_BOOTMENU_KERNEL+=\ -" if [ -f \${prefix}/ublinux/grub_${FILE_LANG}.cfg ]; then - menuentry \"${TXT_RETURN}\" --unrestricted { - configfile \${prefix}/ublinux/grub_${FILE_LANG}.cfg +" if [ -f \${prefix}/ublinux/grub_main.cfg ]; then + menuentry \$\"Return\" --unrestricted { + configfile \${prefix}/ublinux/grub_main.cfg } fi" [[ -f ${FILE_BOOTMENU_KERNEL} ]] && [[ "$(< ${FILE_BOOTMENU_KERNEL})" == "${DATA_BOOTMENU_KERNEL}" ]] || echo "${DATA_BOOTMENU_KERNEL}" > "${FILE_BOOTMENU_KERNEL}" diff --git a/ublinux/rc.local.d/20-pwgr-check b/ublinux/rc.local.d/20-pwgr-check index 403349d..f4a8176 100755 --- a/ublinux/rc.local.d/20-pwgr-check +++ b/ublinux/rc.local.d/20-pwgr-check @@ -22,7 +22,7 @@ exec_check_user_group(){ # Вывести только предупреждение, если файл passwd или shadow повреждён # /usr/bin/pwck -r # Вывести предупреждение и исправить, если файл passwd или shadow повреждён - yes | /usr/bin/pwck -q + yes 2>/dev/null | /usr/bin/pwck -q fi fi if [[ ${CHECK_MODE} =~ "group" ]]; then @@ -33,7 +33,7 @@ exec_check_user_group(){ # Вывести предупреждение, если файл group или gshadow повреждён # /usr/bin/grpck -r # Вывести предупреждение и исправить, если файл group или gshadow повреждён - yes | /usr/bin/grpck -q + yes 2>/dev/null | /usr/bin/grpck -q fi fi } diff --git a/ublinux/rc.local.d/43-repository b/ublinux/rc.local.d/43-repository index b1642e8..67613dd 100755 --- a/ublinux/rc.local.d/43-repository +++ b/ublinux/rc.local.d/43-repository @@ -312,6 +312,26 @@ exec_03_repopublic_web(){ fi } +# TODO +#BusyBox v1.32.0-nethunter (2020-12-28 12:01:33 AEDT) multi-call binary. +#Usage: ftpd [-wvS] [-a USER] [-t N] [-T N] [DIR] +#FTP server. Chroots to DIR, if this fails (run by non-root), cds to it. +#Should be used as inetd service, inetd.conf line: +# 21 stream tcp nowait root ftpd ftpd /files/to/serve +#Can be run from tcpsvd: +# tcpsvd -vE 0.0.0.0 21 ftpd /files/to/serve +# -w Allow upload +# -A No login required, client access occurs under ftpd's UID +# -a USER Enable 'anonymous' login and map it to USER +# -v Log errors to stderr. -vv: verbose log +# -S Log errors to syslog. -SS: verbose log +# -t,-T N Idle and absolute timeout +# busybox tcpsvd -vE 0.0.0.0 21 ftpd -A /data/data/com.termux/files/home +exec_03_repopublic_ftp(){ +#REPOPUBLIC_WEB + true +} + ## pacoloco (https://github.com/anatol/pacoloco) ## Опубликовать ленивое зеркало подключенных репозиториев в виде локального WEB ресурса. ## Получая запрос от пользователя, загружает с удалённого репозитория пакет и сохраняет в кеше передавая его пользователю. diff --git a/ublinux/rc.local.d/52-consolesetup b/ublinux/rc.local.d/52-consolesetup index 70034ee..f162315 100755 --- a/ublinux/rc.local.d/52-consolesetup +++ b/ublinux/rc.local.d/52-consolesetup @@ -1,22 +1,31 @@ #!/usr/bin/env bash +# +# Author: Dmitry Razumov +# Copyright (c) 2021-2025 UBLinux +# ENABLED=yes [[ ${ENABLED} == yes ]] || exit 0 +DEBUGMODE=no unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. -#SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 +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 SYSCONF="${ROOTFS}${SYSCONF}" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/keyboard; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null - debug_mode "$0" "$@" - [[ ${NUMLOCK} == @(yes|on) ]] && for tty in /dev/tty[1-8]; do setleds -D +num < ${tty}; done - [[ ${NUMLOCK} == @(no|off) ]] && for tty in /dev/tty[1-8]; do setleds -D -num < ${tty}; done + # Установить NUMLOCK только для tty + [[ ${NUMLOCK} == @(yes|on|enable) ]] && for tty in /dev/tty[1-8]; do setleds -D +num < ${tty}; done + [[ ${NUMLOCK} == @(no|off|disable) ]] && for tty in /dev/tty[1-8]; do setleds -D -num < ${tty}; done # kill -RTMIN+21 1 || busybox kill -RTMIN+21 1 [[ -x /usr/bin/plymouth ]] && /usr/bin/plymouth --wait quit + + # Настроить шрифт и раскладку клавиатуры виртуальной консоли из /etc/vconsole.conf использует loadkeys setfont [[ -x /usr/lib/systemd/systemd-vconsole-setup ]] && /usr/lib/systemd/systemd-vconsole-setup + + # Если запускается multi-user.target то терминал переключить на tty 2 readlink -f /etc/systemd/system/default.target 2>/dev/null | grep -q multi-user.target && chvt 2 diff --git a/ublinux/rc.pamsession.d/04-user-locale b/ublinux/rc.pamsession.d/04-user-locale new file mode 100755 index 0000000..9fd3b44 --- /dev/null +++ b/ublinux/rc.pamsession.d/04-user-locale @@ -0,0 +1,124 @@ +#!/usr/bin/env bash +# +# Author: Dmitry Razumov +# Copyright (c) 2021-2025 UBLinux +# + +ENABLED=yes +[[ ${ENABLED} == yes ]] || exit 0 + +DEFAULT_CONF=$(< /usr/lib/ublinux/default) +[[ ${DEFAULT_CONF} =~ (^|$'\n')[[:blank:]]*SYSCONF=([^$|$'\n']+)[[:blank:]]*($|$'\n') ]] && SYSCONF=${BASH_REMATCH[2]} || SYSCONF="/etc/sysconf" + +SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +SOURCE=${SYSCONF}/users; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null + +# Extended pattern matching: https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html#Pattern-Matching +shopt -s extglob + +## Назначение модулей: +## 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_USERNAME="${PAM_USER}" +fi + +declare -A USERADD + +# По сокращённому имени, вернуть полное имя, пример 'get_fullname_lang en' : en_US.UTF-8 +get_fullname_lang(){ + local NEWLANG=$1 + local SUPPORTED=$(< ${ROOTFS}/usr/share/i18n/SUPPORTED) + # Из за того, что нет en_EN, а через груб прилетает просто en, то выбираем en_US.UTF-8 + [[ ${NEWLANG} == "en" ]] && NEWLANG="en_US.UTF-8" + if [[ ${SUPPORTED} =~ ($'\n'|^)"${NEWLANG} ".*($'\n'|$) ]]; then + echo "${NEWLANG}" + elif [[ ${SUPPORTED} =~ ($'\n'|^)"${NEWLANG,,}_${NEWLANG^^}.UTF-8 ".*($'\n'|$) ]]; then + echo "${NEWLANG,,}_${NEWLANG^^}.UTF-8" + elif [[ ${SUPPORTED} =~ ($'\n'|^)"${NEWLANG,,}_${NEWLANG^^} ".*($'\n'|$) ]]; then + echo "${NEWLANG,,}_${NEWLANG^^}" + elif [[ ${SUPPORTED} =~ ($'\n'|^)"${NEWLANG}.UTF-8 ".*($'\n'|$) ]]; then + echo "${NEWLANG}.UTF-8" + elif [[ ${SUPPORTED} =~ ($'\n'|^)("${NEWLANG,,}_"[:A-Z:]+".UTF-8")" ".*($'\n'|$) ]]; then + echo "${BASH_REMATCH[2]}" + elif [[ ${SUPPORTED} =~ ($'\n'|^)("${NEWLANG,,}_"[:A-Z:]+)" ".*($'\n'|$) ]]; then + echo "${BASH_REMATCH[2]}" + else + echo "en_US.UTF-8" + fi +} + +## При после авторизации пользователя проверяем праметр в USERADD[*] --land у текужего пользователя, если задан, +## то под указанную локал создаём файл "${HOME}/.config/locale.conf" +exec_01_user_locale(){ + [[ -n $1 ]] && SELECT_USERNAME="$1" + if [[ -n ${SELECT_USERNAME} && -n ${USERADD[${SELECT_USERNAME}]} ]]; then + local SELECT_GECOS SELECT_UID SELECT_GROUP SELECT_EXTRAGROUP SELECT_OPTIONAL SELECT_PASSWORD NULL + local LANG= + IFS=: read -r SELECT_GECOS SELECT_UID SELECT_GROUP SELECT_EXTRAGROUPS SELECT_OPTIONAL SELECT_PASSWORD NULL <<< "${USERADD[${SELECT_USERNAME}]}" + [[ ${SELECT_OPTIONAL} =~ ("--lang ")([^' ']+)(' '|$) ]] && LANG="${BASH_REMATCH[2]}" + if [[ ${LANG} == "system" ]]; then + rm -f ${HOME}/.config/locale.conf + elif [[ -n ${LANG} ]]; then + LANG=$(get_fullname_lang ${LANG}) + # Проверка выбранного языка в системе, и если не совпадает, то устанавливаем + local LOCALE_FILE=$(< /etc/locale.conf) + LOCALEDEF_LIST="$(localedef --list-archive)" + LOW_LOCALEDEF_LIST="${LOCALEDEF_LIST,,}" + LOW_LANG=${LANG,,} + if [[ ${LOCALE_FILE} =~ (^|$'\n')[[:blank:]]*LANG=([^$|$'\n']+)[[:blank:]]*($|$'\n') && ! "${BASH_REMATCH[2]}" == "${LANG}" ]] \ + && [[ ${LOW_LOCALEDEF_LIST//-/} =~ (^|$'\n')"${LOW_LANG//-/}"($|$'\n') ]]; then + # Устанавливаем локаль + env LANG="${LANG}" LANGUAGE="${LANG}" LC_CTYPE="${LANG}" LC_NUMERIC="${LANG}" \ + LC_TIME="${LANG}" LC_COLLATE="${LANG}" LC_MONETARY="${LANG}" LC_MESSAGES="${LANG}" LC_PAPER="${LANG}" \ + LC_NAME="${LANG}" LC_ADDRESS="${LANG}" LC_TELEPHONE="${LANG}" LC_MEASUREMENT="${LANG}" \ + LC_IDENTIFICATION="${LANG}" locale > ${HOME}/.config/locale.conf 2>/dev/null + chown ${SELECT_USERNAME}:${SELECT_USERNAME} "${HOME}/.config/locale.conf" 2>/dev/null + fi + fi + fi +} + +################ +##### 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}'"; } + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || + declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'" + shift + done + eval ${FUNCTION#*; } + fi + true diff --git a/ublinux/rc.post.d/11-xorg b/ublinux/rc.post.d/11-xorg index 1297bc0..ffef98d 100755 --- a/ublinux/rc.post.d/11-xorg +++ b/ublinux/rc.post.d/11-xorg @@ -8,16 +8,12 @@ SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" -#. $HARDCONF -#echo "$XDRIVER" | grep -q "nvidia" || rmmod nvidia -#STEAMNODPMS=yes - SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/video; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/desktop; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/keyboard; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null - [[ ${DISPLAYMANAGER} == "none" ]] && exit + [[ ${DISPLAYMANAGER} == "none" ]] && exit 0 #[ ! -z "$VGAID" ] && grep -q $VGAID /usr/share/ublinux/hwdata/deleteconf && rm -f /etc/X11/xorg.conf [[ -n "${DELETE_XORG_CONF}" ]] && rm -f /etc/X11/xorg.conf @@ -63,15 +59,13 @@ EOF } exec_xorg_ext(){ - #[ ! -z "$VGAID" ] && grep -q $VGAID /usr/share/ublinux/hwdata/deleteconf && rm -f /etc/X11/xorg.conf - [[ -n "${DELETE_XORG_CONF}" ]] && rm -f /etc/X11/xorg.conf rm -f /etc/X11/xorg.conf.d/110-xorg-ext-*-ubconfig.conf ## Управление дополнительными возможностями XORG if [[ -n ${XORG_EXT} ]]; then [[ -d /etc/X11/xorg.conf.d ]] || install -Dm755 /etc/X11/xorg.conf.d while read I_EXT; do XORG_FILE_EXT="/etc/X11/xorg.conf.d/110-xorg-ext-${I_EXT}-ubconfig.conf" - if grep -Eiq "^nodpms$" <<< "${I_EXT}"; then + if [[ ${I_EXT} =~ (^"nodpms"|",nodpms"|";nodpms"|" nodpms") ]]; then cat > ${XORG_FILE_EXT} < ${XORG_FILE_EXT} </dev/null) =~ "declare -A" ]] || declare -A XKBMODEL + [[ $(declare -p XKBLAYOUT 2>/dev/null) =~ "declare -A" ]] || declare -A XKBLAYOUT + [[ $(declare -p XKBVARIANT 2>/dev/null) =~ "declare -A" ]] || declare -A XKBVARIANT XORG_FILE_KEYBOARD="/etc/X11/xorg.conf.d/130-mkkbdfxorg-ubconfig.conf" - rm -f "${XORG_FILE_KEYBOARD}" - if [[ ${MKKBDFXORG} != "no" ]] ;then - [[ -d /etc/X11/xorg.conf.d ]] || install -Dm755 /etc/X11/xorg.conf.d - if ! grep -sqi XkbOptions /etc/X11/xorg.conf; then - cat > ${XORG_FILE_KEYBOARD} </dev/null + else + local SET_SECTION= DATA_XORG_FILE_KEYBOARD= + if [[ -n ${XKBMODEL} ]]; then + SET_SECTION+=$'\t'"Option \"XkbModel\" \"${XKBMODEL}\""$'\n' + elif [[ -n ${XKBMODEL[${LANG%%_*}]} ]]; then + SET_SECTION+=$'\t'"Option \"XkbModel\" \"${XKBMODEL[${LANG%%_*}]}\""$'\n' + [[ -f ${SYSCONF}/keyboard ]] && sed "/^XKBMODEL=/d" -i "${SYSCONF}/keyboard" + echo "XKBMODEL=${XKBMODEL[${LANG%%_*}]}" >> "${SYSCONF}/keyboard" + fi + if [[ -n ${XKBLAYOUT} ]]; then + SET_SECTION+=$'\t'"Option \"XkbLayout\" \"${XKBLAYOUT}\""$'\n' + elif [[ -n ${XKBLAYOUT[${LANG%%_*}]} ]]; then + SET_SECTION+=$'\t'"Option \"XkbLayout\" \"${XKBLAYOUT[${LANG%%_*}]}\""$'\n' + [[ -f ${SYSCONF}/keyboard ]] && sed "/^XKBLAYOUT=/d" -i "${SYSCONF}/keyboard" + echo "XKBLAYOUT=${XKBLAYOUT[${LANG%%_*}]}" >> "${SYSCONF}/keyboard" + fi + if [[ -n ${XKBVARIANT} ]]; then + SET_SECTION+=$'\t'"Option \"XkbVariant\" \"${XKBVARIANT}\""$'\n' + elif [[ -n ${XKBVARIANT[${LANG%%_*}]} ]]; then + SET_SECTION+=$'\t'"Option \"XkbVariant\" \"${XKBVARIANT[${LANG%%_*}]}\""$'\n' + [[ -f ${SYSCONF}/keyboard ]] && sed "/^XKBVARIANT=/d" -i "${SYSCONF}/keyboard" + echo "XKBVARIANT=${XKBVARIANT[${LANG%%_*}]}" >> "${SYSCONF}/keyboard" + fi + if [[ -n ${XKBOPTIONS} ]]; then + SET_SECTION+=$'\t'"Option \"XkbOptions\" \"${XKBOPTIONS}\""$'\n' + fi + if [[ -n "${XKBMODEL}${XKBLAYOUT}${XKBVARIANT}${XKBOPTIONS}" ]]; then + SET_SECTION="\ +# Written by /ublinux/rc.post.d/11-xorg, read by manual. +# Use 'ubconfig set [locale] XKBLAYOUT= XKBMODEL= XKBVARIANT= XKBOPTIONS=' to update this file. +Section \"InputClass\" + Identifier \"system-keyboard\" + MatchIsKeyboard \"on\" +${SET_SECTION}EndSection +" + [[ -f ${XORG_FILE_KEYBOARD} ]] && DATA_XORG_FILE_KEYBOARD=$(< ${XORG_FILE_KEYBOARD}) + if [[ ! ${DATA_XORG_FILE_KEYBOARD} == ${SET_SECTION} ]]; then + [[ -d /etc/X11/xorg.conf.d ]] || install -Dm755 /etc/X11/xorg.conf.d + # Если задана раскладка от утилиты localectl, то удалим + [[ -f ${XORG_FILE_LOCALECTL} ]] && rm -f "${XORG_FILE_LOCALECTL}" 2>/dev/null +# if ! grep -sqi XkbOptions /etc/X11/xorg.conf; then + echo -n "${SET_SECTION}" > "${XORG_FILE_KEYBOARD}" + fi + else + [[ ! -f ${XORG_FILE_KEYBOARD} ]] || rm -f "${XORG_FILE_KEYBOARD}" 2>/dev/null fi fi } diff --git a/ublinux/rc.preinit.d/53-language b/ublinux/rc.preinit.d/53-language index 68b1b3d..ac7cd0e 100755 --- a/ublinux/rc.preinit.d/53-language +++ b/ublinux/rc.preinit.d/53-language @@ -21,29 +21,191 @@ debug_mode "$0" "$@" SYSCONF="${ROOTFS}${SYSCONF}" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null -SOURCE=${SYSCONF}/keyboard; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null -SOURCE=${SYSCONF}/locale; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null +SOURCE=${SYSCONF}/locale; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +SOURCE=${SYSCONF}/keyboard; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null -NEWLANG=$(cmdline_value lang) -[[ -z ${NEWLANG} ]] || { LOCALE+=",${NEWLANG}"; LANG="${NEWLANG}"; } +shopt -s extglob -for I_LOCALE in ${LOCALE//,/ }; do - sed -i "s/^#${I_LOCALE} /${I_LOCALE} /g" ${ROOTFS}/etc/locale.gen -done +# По сокращённому имени, вернуть полное имя, пример 'get_fullname_lang en' : en_US.UTF-8 +get_fullname_lang(){ + local NEWLANG=$1 + [[ -r ${ROOTFS}/usr/share/i18n/SUPPORTED ]] && local SUPPORTED=$(< ${ROOTFS}/usr/share/i18n/SUPPORTED) + # Из за того, что нет en_EN, а через груб прилетает просто en, то выбираем en_US.UTF-8 + [[ ${NEWLANG} == "en" ]] && NEWLANG="en_US.UTF-8" + if [[ ${SUPPORTED} =~ ($'\n'|^)"${NEWLANG} ".*($'\n'|$) ]]; then + echo "${NEWLANG}" + elif [[ ${SUPPORTED} =~ ($'\n'|^)"${NEWLANG,,}_${NEWLANG^^}.UTF-8 ".*($'\n'|$) ]]; then + echo "${NEWLANG,,}_${NEWLANG^^}.UTF-8" + elif [[ ${SUPPORTED} =~ ($'\n'|^)"${NEWLANG,,}_${NEWLANG^^} ".*($'\n'|$) ]]; then + echo "${NEWLANG,,}_${NEWLANG^^}" + elif [[ ${SUPPORTED} =~ ($'\n'|^)"${NEWLANG}.UTF-8 ".*($'\n'|$) ]]; then + echo "${NEWLANG}.UTF-8" + elif [[ ${SUPPORTED} =~ ($'\n'|^)("${NEWLANG,,}_"[:A-Z:]+".UTF-8")" ".*($'\n'|$) ]]; then + echo "${BASH_REMATCH[2]}" + elif [[ ${SUPPORTED} =~ ($'\n'|^)("${NEWLANG,,}_"[:A-Z:]+)" ".*($'\n'|$) ]]; then + echo "${BASH_REMATCH[2]}" + else + echo "en_US.UTF-8" + fi +} -${CMD_CHROOT} env LANG=${LANG} locale > ${ROOTFS}/etc/locale.conf 2>/dev/null +exec_01_set_locale(){ + local NEWLANG=$(cmdline_value lang) + if [[ -n ${NEWLANG} && -n ${ROOTFS} ]]; then + LANG="$(get_fullname_lang ${NEWLANG})" + [[ ${LOCALE} =~ (^|,)${LANG}(,|$) ]] || LOCALE+=",${LANG}" + [[ -f ${SYSCONF}/locale ]] && sed "/^LOCALE=/d" -i "${SYSCONF}/locale" + echo "LOCALE=${LOCALE}" >> "${SYSCONF}/locale" + else + LANG=$(get_fullname_lang ${LANG}) + [[ ${LOCALE} =~ (^|,)${LANG}(,|$) ]] || LOCALE+=",${LANG}" + fi + # Проверка локалий в системе, и если не совпадают, то генерация + [[ -n ${FORCE_LOCARCHIVE} ]] && FORCEGEN=1 + [[ -f ${ROOTFS}/usr/lib/locale/locale-archive ]] || FORCEGEN=1 + LOCALE_CONF=${LOCALE//-/}; LOCALE_CONF=${LOCALE_CONF,,}; LOCALE_CONF=${LOCALE_CONF//,/$'\n'}; LOCALE_CONF=$(sort -fu <<< ${LOCALE_CONF}) + LOCALE_SYSTEM=$(${CMD_CHROOT} localedef --list-archive | sort -fu); LOCALE_SYSTEM=${LOCALE_SYSTEM,,} + [[ "${LOCALE_CONF}" == "${LOCALE_SYSTEM}" ]] || FORCEGEN=1 + if [[ -n ${FORCEGEN} ]]; then + # Комментируем все локализации + sed -E "s/^([^#]+)/#\1/g" -i ${ROOTFS}/etc/locale.gen + # Открываем комменарии нужных локалий + for SELECT_LOCALE in ${LOCALE//@(,|;)/ }; do + [[ -n ${SELECT_LOCALE} ]] || continue + sed -E "s/^#${SELECT_LOCALE} /${SELECT_LOCALE} /g" -i ${ROOTFS}/etc/locale.gen + done + # Генерируем локаль + ${CMD_CHROOT} locale-gen &>/dev/null + fi +} -[[ -n ${FORCE_LOCARCHIVE} ]] && FORCEGEN=1 -[[ ! -f ${ROOTFS}/usr/lib/locale/locale-archive ]] && FORCEGEN=1 -LOCALE_CONF=${LOCALE//-/}; LOCALE_CONF=${LOCALE_CONF,,}; LOCALE_CONF=${LOCALE_CONF//,/$'\n'}; LOCALE_CONF=$(sort -fu <<< ${LOCALE_CONF}) -LOCALE_SYSTEM=$(${CMD_CHROOT} localedef --list-archive | sort -fu); LOCALE_SYSTEM=${LOCALE_SYSTEM,,} -[[ "${LOCALE_CONF}" == "${LOCALE_SYSTEM}" ]] || FORCEGEN=1 -[[ -n ${FORCEGEN} ]] && ${CMD_CHROOT} locale-gen &>/dev/null -#; unset LANG; source /etc/profile.d/locale.sh" +exec_02_set_lang(){ + SOURCE=${SYSCONF}/locale; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null + local NEWLANG=$(cmdline_value lang) + if [[ -n ${NEWLANG} && -n ${ROOTFS} ]]; then + LANG="$(get_fullname_lang ${NEWLANG})" + [[ -f ${SYSCONF}/locale ]] && sed "/^LANG=/d" -i "${SYSCONF}/locale" + echo "LANG=${LANG}" >> "${SYSCONF}/locale" + else + LANG=$(get_fullname_lang ${LANG}) + fi + # Проверка выбранного языка в системе, и если не совпадает, то устанавливаем + if [[ -r ${ROOTFS}/etc/locale.conf && ! $(< ${ROOTFS}/etc/locale.conf) =~ (^|$'\n')"LANG=${LANG}"($'\n'|$) ]]; then + # Устанавливаем локаль + ${CMD_CHROOT} env LANG="${LANG}" LANGUAGE="${LANG}" LC_CTYPE="${LANG}" LC_NUMERIC="${LANG}" \ + LC_TIME="${LANG}" LC_COLLATE="${LANG}" LC_MONETARY="${LANG}" LC_MESSAGES="${LANG}" LC_PAPER="${LANG}" \ + LC_NAME="${LANG}" LC_ADDRESS="${LANG}" LC_TELEPHONE="${LANG}" LC_MEASUREMENT="${LANG}" \ + LC_IDENTIFICATION="${LANG}" locale > ${ROOTFS}/etc/locale.conf 2>/dev/null -# Если имеются языкозависимые файлы, то копируем в корень -[[ -d ${ROOTFS}/usr/share/ublinux/langs/${LANG} ]] && cp -pfr ${ROOTFS}/usr/share/ublinux/langs/${LANG}/* ${ROOTFS}/ + [[ -n ${ROOTFS} ]] || set_lang_live + fi + #; unset LANG; source /etc/profile.d/locale.sh" -[[ -z ${CONSOLE_FONT} ]] || echo FONT=${CONSOLE_FONT} > ${ROOTFS}/etc/vconsole.conf -[[ -z ${CONSOLE_KEYMAP} ]] || echo KEYMAP=${CONSOLE_KEYMAP} >> ${ROOTFS}/etc/vconsole.conf -[[ -z ${CONSOLE_KEYMAP_TOGGLE} ]] || echo KEYMAP_TOGGLE="${CONSOLE_KEYMAP_TOGGLE}" >> ${ROOTFS}/etc/vconsole.conf + # Если имеются языкозависимые файлы, то копируем в корень + [[ -d ${ROOTFS}/usr/share/ublinux/langs/${LANG} ]] && cp -pfr ${ROOTFS}/usr/share/ublinux/langs/${LANG}/* ${ROOTFS}/ +} + +set_lang_live(){ + if [[ $(readlink -fq /usr/bin/init 2>/dev/null) =~ "lib/systemd/systemd"$ ]]; then + systemctl daemon-reexec + fi +} + +exec_03_set_vconsole(){ + SOURCE=${SYSCONF}/locale; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null + LANG=$(get_fullname_lang ${LANG}) + [[ $(declare -p CONSOLE_FONT 2>/dev/null) =~ "declare -A" ]] || declare -A CONSOLE_FONT + [[ $(declare -p CONSOLE_FONT_MAP 2>/dev/null) =~ "declare -A" ]] || declare -A CONSOLE_FONT_MAP + [[ $(declare -p CONSOLE_FONT_UNIMAP 2>/dev/null) =~ "declare -A" ]] || declare -A CONSOLE_FONT_UNIMAP + [[ $(declare -p CONSOLE_KEYMAP 2>/dev/null) =~ "declare -A" ]] || declare -A CONSOLE_KEYMAP + [[ $(declare -p CONSOLE_KEYMAP_TOGGLE 2>/dev/null) =~ "declare -A" ]] || declare -A CONSOLE_KEYMAP_TOGGLE + # Зададим /etc/vconsole.conf + local SET_VCONSOLE="\ +# Written by /ublinux/rc.preinit.d/53-language, read by manual. +# Use 'ubconfig set [locale] CONSOLE_FONT= CONSOLE_KEYMAP= CONSOLE_KEYMAP_TOGGLE=' to update this file. +" + local VCONSOLE_FILE="${ROOTFS}/etc/vconsole.conf" + if [[ -n ${CONSOLE_FONT} ]]; then + SET_VCONSOLE+="FONT=${CONSOLE_FONT}"$'\n' + elif [[ -n ${CONSOLE_FONT[${LANG%%_*}]} ]]; then + SET_VCONSOLE+="FONT=${CONSOLE_FONT[${LANG%%_*}]}"$'\n' + [[ -f ${SYSCONF}/keyboard ]] && sed "/^CONSOLE_FONT=/d" -i "${SYSCONF}/keyboard" + echo "CONSOLE_FONT=${CONSOLE_FONT[${LANG%%_*}]}" >> "${SYSCONF}/keyboard" + fi + if [[ -n ${CONSOLE_FONT_MAP} ]]; then + SET_VCONSOLE+="FONT_MAP=${CONSOLE_FONT_MAP}"$'\n' + elif [[ -n ${CONSOLE_FONT_MAP[${LANG%%_*}]} ]]; then + SET_VCONSOLE+="FONT_MAP=${CONSOLE_FONT_MAP[${LANG%%_*}]}"$'\n' + [[ -f ${SYSCONF}/keyboard ]] && sed "/^CONSOLE_FONT_MAP=/d" -i "${SYSCONF}/keyboard" + echo "CONSOLE_FONT_MAP=${CONSOLE_FONT_MAP[${LANG%%_*}]}" >> "${SYSCONF}/keyboard" + fi + if [[ -n ${CONSOLE_FONT_UNIMAP} ]]; then + SET_VCONSOLE+="FONT_UNIMAP=${CONSOLE_FONT_UNIMAP}"$'\n' + elif [[ -n ${CONSOLE_FONT_UNIMAP[${LANG%%_*}]} ]]; then + SET_VCONSOLE+="FONT_UNIMAP=${CONSOLE_FONT_UNIMAP[${LANG%%_*}]}"$'\n' + [[ -f ${SYSCONF}/keyboard ]] && sed "/^CONSOLE_FONT_UNIMAP=/d" -i "${SYSCONF}/keyboard" + echo "CONSOLE_FONT_UNIMAP=${CONSOLE_FONT_UNIMAP[${LANG%%_*}]}" >> "${SYSCONF}/keyboard" + fi + if [[ -n ${CONSOLE_KEYMAP} ]]; then + SET_VCONSOLE+="KEYMAP=${CONSOLE_KEYMAP}"$'\n' + elif [[ -n ${CONSOLE_KEYMAP[${LANG%%_*}]} ]]; then + SET_VCONSOLE+="KEYMAP=${CONSOLE_KEYMAP[${LANG%%_*}]}"$'\n' + [[ -f ${SYSCONF}/keyboard ]] && sed "/^CONSOLE_KEYMAP=/d" -i "${SYSCONF}/keyboard" + echo "CONSOLE_KEYMAP=${CONSOLE_KEYMAP[${LANG%%_*}]}" >> "${SYSCONF}/keyboard" + fi + if [[ -n ${CONSOLE_KEYMAP_TOGGLE} ]]; then + SET_VCONSOLE+="KEYMAP_TOGGLE=${CONSOLE_KEYMAP_TOGGLE}"$'\n' + elif [[ -n ${CONSOLE_KEYMAP_TOGGLE[${LANG%%_*}]} ]]; then + SET_VCONSOLE+="KEYMAP_TOGGLE=${CONSOLE_KEYMAP_TOGGLE[${LANG%%_*}]}"$'\n' + [[ -f ${SYSCONF}/keyboard ]] && sed "/^CONSOLE_KEYMAP_TOGGLE=/d" -i "${SYSCONF}/keyboard" + echo "CONSOLE_KEYMAP_TOGGLE=${CONSOLE_KEYMAP_TOGGLE[${LANG%%_*}]}" >> "${SYSCONF}/keyboard" + fi + [[ -z ${XKBLAYOUT} ]] || SET_VCONSOLE+="XKBLAYOUT=${XKBLAYOUT}"$'\n' + [[ -z ${XKBMODEL} ]] || SET_VCONSOLE+="XKBMODEL=${XKBMODEL}"$'\n' + [[ -z ${XKBVARIANT} ]] || SET_VCONSOLE+="XKBVARIANT=${XKBVARIANT}"$'\n' + [[ -z ${XKBOPTIONS} ]] || SET_VCONSOLE+="XKBOPTIONS=${XKBOPTIONS}"$'\n' + if [[ -n "${CONSOLE_FONT}${CONSOLE_KEYMAP}${CONSOLE_KEYMAP_TOGGLE}" ]]; then + if [[ -f "${VCONSOLE_FILE}" ]]; then + if [[ ! "$(< ${VCONSOLE_FILE})" == "${SET_VCONSOLE}" ]]; then + echo -n "${SET_VCONSOLE}" > "${VCONSOLE_FILE}" + [[ -n ${ROOTFS} ]] || set_vconsole_live + fi + else + echo -n "${SET_VCONSOLE}" > "${VCONSOLE_FILE}" + [[ -n ${ROOTFS} ]] || set_vconsole_live + fi + fi +} + +set_vconsole_live(){ + if [[ $(readlink -fq /usr/bin/init 2>/dev/null) =~ "lib/systemd/systemd"$ ]]; then + #systemctl --quiet start systemd-vconsole-setup.service + /usr/lib/systemd/systemd-vconsole-setup + else + #setfont ? + #loadkeys ? + true + fi +} + +################ +##### 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}'"; } + # Что-бы передавать пустые параметры как аргументы, нужно для соблюдения очередности и кол-ва, отключил [[ -z ${1} ]] || + declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'" + shift + done + eval ${FUNCTION#*; } + fi + true diff --git a/ublinux/rc.xorg/00-envvars b/ublinux/rc.xorg/00-envvars index 88c043c..f10609f 100755 --- a/ublinux/rc.xorg/00-envvars +++ b/ublinux/rc.xorg/00-envvars @@ -3,15 +3,18 @@ # Author: Dmitry Razumov # Copyright (c) 2021-2025 UBLinux # +# Used as a source ENABLED=yes -[[ ${ENABLED} == "yes" ]] || exit 0 +[[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } -set -a -eval "$(systemctl --user show-environment)" -set +a - -systemctl --user import-environment DISPLAY XAUTHORITY +if [[ $(readlink -fq /usr/bin/init 2>/dev/null) =~ "lib/systemd/systemd"$ ]]; then + set -a + eval "$(systemctl --user show-environment)" + set +a + + systemctl --user import-environment DISPLAY XAUTHORITY +fi if command -v dbus-update-activation-environment >/dev/null 2>&1; then dbus-update-activation-environment DISPLAY XAUTHORITY fi diff --git a/ublinux/rc.xorg/01-de-background b/ublinux/rc.xorg/01-de-background index 40e964e..199dadd 100755 --- a/ublinux/rc.xorg/01-de-background +++ b/ublinux/rc.xorg/01-de-background @@ -3,17 +3,18 @@ # Author: Dmitry Razumov # Copyright (c) 2021-2025 UBLinux # +# Used as a source ENABLED=yes -[[ ${ENABLED} != yes ]] && exit 0 +[[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } -SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 -SOURCE=${SYSCONF}/config; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null +DEFAULT_CONF=$(< /usr/lib/ublinux/default) +[[ ${DEFAULT_CONF} =~ (^|$'\n')[[:blank:]]*SYSCONF=([^$|$'\n']+)[[:blank:]]*($|$'\n') ]] && SYSCONF=${BASH_REMATCH[2]} || SYSCONF="/etc/sysconf" + +SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/desktop; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/theme; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null - [[ ${DISPLAYMANAGER} == @(none|no|disable) ]] && exit - xfce4_background(){ [[ -x /usr/bin/startxfce4 ]] || return 0 #Получить типы мониторов без xrandr: xfconf-query -c xfce4-desktop -l | grep "/backdrop/screen0/monitor.*/workspace0/last-image @@ -90,6 +91,10 @@ cinammon_background(){ [[ -x /usr/bin/startmate ]] || return 0 } +################ +##### MAIN ##### +################ + if [[ -n ${BACKGROUND_DE} && ${BACKGROUND_DE} != @(none|no|disable) ]]; then if [[ -d ${BACKGROUND_DE} ]]; then BACKGROUND_DE=$(ls -p ${BACKGROUND_DE} | grep -v / | shuf -n 1) @@ -110,52 +115,51 @@ cinammon_background(){ cinammon_background fi -exit 0 # Для фоновой картинки устанавливаемой feh - -FEHOPTIONS="-B black -x -Z --scale-down" -WPDEFFILE=/usr/share/ublinux/wallpapers/default.jpg -FEHKILLSWITCH="while ! ps -A | grep -Eq 'splash|panel|xbindkeys|lightdm-gtk-gr|polybar' ;do sleep 1 ;done ; sleep 7 ; killall feh" -[ "$BACKGROUND_DE_MODE" = "2" ] && FEHOPTIONS="-F --zoom fill" - -# get resolution of primary (or first) monitor -XORG_RES=$(LC_ALL=C /usr/bin/xrandr | awk -F" connected primary " '{print $2}' | sed s/+.*// | grep -m1 .) -[ -z "$XORG_RES" ] && XORG_RES=$(LC_ALL=C /usr/bin/xrandr | awk -F" connected " '{print $2}' | sed s/+.*// | grep -m1 .) -[ -z "$XORG_RES" ] && XORG_RES=1920x1080 - -# show wallpaper -[ -x /usr/bin/feh ] && /usr/bin/feh $FEHOPTIONS -g "$XORG_RES" $(dirname $WPDEFFILE)/default.orig.jpg & -# killswitch for feh -[ -x /usr/bin/feh ] && bash -c "$FEHKILLSWITCH" & - -if [ -x /usr/bin/convert ] ;then - # resizing wallpaper for monitor resolution (default is proportional on black background) - RESIZEOPT="-resize $XORG_RES -background black -gravity center -extent $XORG_RES" - [ "$BACKGROUND_DE_MODE" = "1" ] && RESIZEOPT="-resize $XORG_RES!" - [ "$BACKGROUND_DE_MODE" = "2" ] && RESIZEOPT="-resize $XORG_RES^ -gravity center -extent $XORG_RES" - convert $RESIZEOPT $(dirname $WPDEFFILE)/default.orig.jpg /tmp/background.jpg - # Graffiti effects - if [ "$GRAFFITI" = "yes" ] ;then - [ "$(cmdline_value changes)$(cmdline_value ub.changes)" ] && LABEL=ublinux.png || LABEL=clean.png - convert -resize x$(expr $(echo $XORG_RES | awk -Fx '{ print $2 }') / 10) /usr/share/ublinux/graffiti/$LABEL /tmp/logo.png - composite -gravity SouthWest /tmp/logo.png /tmp/background.jpg /tmp/background2.jpg - mv -f /tmp/background2.jpg /tmp/background.jpg - rm -f /tmp/logo.png - fi - # placing warning about default passwords - if [ "$GRAFFITI" != "no" -a -x /usr/bin/composite ] ;then - . /usr/lib/ublinux/default - A=0 - [[ -n ${DM_HINT_PASSWORD} ]] && A=1 - [ "$A" = "1" ] && composite -gravity NorthWest /usr/share/ublinux/graffiti/warning.png /tmp/background.jpg /tmp/background2.jpg - [ -f /tmp/background2.jpg ] && mv -f /tmp/background2.jpg /tmp/background.jpg - fi - # replacing default wallpaper - [ -f /tmp/background.jpg ] && mv -f /tmp/background.jpg "$WPDEFFILE" - [ -d /usr/share/apps/ksplash ] && mkdir -p "/usr/share/apps/ksplash/Themes/Default/$XORG_RES" - [ -d /usr/share/apps/ksplash ] && convert "$WPDEFFILE" "/usr/share/apps/ksplash/Themes/Default/$XORG_RES/background.png" -fi +# +#FEHOPTIONS="-B black -x -Z --scale-down" +#WPDEFFILE=/usr/share/ublinux/wallpapers/default.jpg +#FEHKILLSWITCH="while ! ps -A | grep -Eq 'splash|panel|xbindkeys|lightdm-gtk-gr|polybar' ;do sleep 1 ;done ; sleep 7 ; killall feh" +#[ "$BACKGROUND_DE_MODE" = "2" ] && FEHOPTIONS="-F --zoom fill" +# +## get resolution of primary (or first) monitor +#XORG_RES=$(LC_ALL=C /usr/bin/xrandr | awk -F" connected primary " '{print $2}' | sed s/+.*// | grep -m1 .) +#[ -z "$XORG_RES" ] && XORG_RES=$(LC_ALL=C /usr/bin/xrandr | awk -F" connected " '{print $2}' | sed s/+.*// | grep -m1 .) +#[ -z "$XORG_RES" ] && XORG_RES=1920x1080 +# +## show wallpaper +#[ -x /usr/bin/feh ] && /usr/bin/feh $FEHOPTIONS -g "$XORG_RES" $(dirname $WPDEFFILE)/default.orig.jpg & +## killswitch for feh +#[ -x /usr/bin/feh ] && bash -c "$FEHKILLSWITCH" & +# +#if [ -x /usr/bin/convert ] ;then +# # resizing wallpaper for monitor resolution (default is proportional on black background) +# RESIZEOPT="-resize $XORG_RES -background black -gravity center -extent $XORG_RES" +# [ "$BACKGROUND_DE_MODE" = "1" ] && RESIZEOPT="-resize $XORG_RES!" +# [ "$BACKGROUND_DE_MODE" = "2" ] && RESIZEOPT="-resize $XORG_RES^ -gravity center -extent $XORG_RES" +# convert $RESIZEOPT $(dirname $WPDEFFILE)/default.orig.jpg /tmp/background.jpg +# # Graffiti effects +# if [ "$GRAFFITI" = "yes" ] ;then +# [ "$(cmdline_value changes)$(cmdline_value ub.changes)" ] && LABEL=ublinux.png || LABEL=clean.png +# convert -resize x$(expr $(echo $XORG_RES | awk -Fx '{ print $2 }') / 10) /usr/share/ublinux/graffiti/$LABEL /tmp/logo.png +# composite -gravity SouthWest /tmp/logo.png /tmp/background.jpg /tmp/background2.jpg +# mv -f /tmp/background2.jpg /tmp/background.jpg +# rm -f /tmp/logo.png +# fi +# # placing warning about default passwords +# if [ "$GRAFFITI" != "no" -a -x /usr/bin/composite ] ;then +# . /usr/lib/ublinux/default +# A=0 +# [[ -n ${DM_HINT_PASSWORD} ]] && A=1 +# [ "$A" = "1" ] && composite -gravity NorthWest /usr/share/ublinux/graffiti/warning.png /tmp/background.jpg /tmp/background2.jpg +# [ -f /tmp/background2.jpg ] && mv -f /tmp/background2.jpg /tmp/background.jpg +# fi +# # replacing default wallpaper +# [ -f /tmp/background.jpg ] && mv -f /tmp/background.jpg "$WPDEFFILE" +# [ -d /usr/share/apps/ksplash ] && mkdir -p "/usr/share/apps/ksplash/Themes/Default/$XORG_RES" +# [ -d /usr/share/apps/ksplash ] && convert "$WPDEFFILE" "/usr/share/apps/ksplash/Themes/Default/$XORG_RES/background.png" +#fi diff --git a/ublinux/rc.xorg/02-xrandr b/ublinux/rc.xorg/02-xrandr index f214aae..29d1d2a 100755 --- a/ublinux/rc.xorg/02-xrandr +++ b/ublinux/rc.xorg/02-xrandr @@ -3,21 +3,18 @@ # Author: Dmitry Razumov # Copyright (c) 2021-2025 UBLinux # +# Used as a source ENABLED=yes -[[ ${ENABLED} == "yes" ]] || exit 0 -DEBUGMODE=no +[[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } -. /usr/lib/ublinux/functions -. /usr/lib/ublinux/default -debug_mode "$0" "$@" +DEFAULT_CONF=$(< /usr/lib/ublinux/default) +[[ ${DEFAULT_CONF} =~ (^|$'\n')[[:blank:]]*SYSCONF=([^$|$'\n']+)[[:blank:]]*($|$'\n') ]] && SYSCONF=${BASH_REMATCH[2]} || SYSCONF="/etc/sysconf" SOURCE=${SYSCONF}/config; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/video; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/desktop; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null - [[ ${DISPLAYMANAGER} == "none" ]] && exit 0 - ## Parametrs: ## cvt , gtf , reduced|r , auto , preferred , off , primary , mode:1920x1080 ## lo|LeftOf:{name} , ro|RightOf:{name} , ab|Above:{name} , be|Below:{name} , rotate:normal|left|right|invert diff --git a/ublinux/rc.xorg/03-profile-locale b/ublinux/rc.xorg/03-profile-locale new file mode 100755 index 0000000..4090d0b --- /dev/null +++ b/ublinux/rc.xorg/03-profile-locale @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +# +# Author: Dmitry Razumov +# Copyright (c) 2021-2025 UBLinux +# +# Used as a source + +ENABLED=yes +[[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } + +## Если в профиле пользователя имеется файл "${XDG_CONFIG_HOME}/locale.conf" или "${HOME}/.config/locale.conf", +## то установить указанною локаль на терущую сессию и обновить пути XDG каталогов под локаль +set_user_locale(){ + [[ -n $1 ]] && LOCALE_USER_FILE=$1 || return 0 + [[ $(< "${LOCALE_USER_FILE}") =~ (^|$'\n')LANG=([^$|$'\n']+)($|$'\n') ]] && LANG_USER=${BASH_REMATCH[2],,} + LOCALEDEF_LIST="$(localedef --list-archive)" + LOW_LOCALEDEF_LIST="${LOCALEDEF_LIST,,}" + if [[ "${LOW_LOCALEDEF_LIST//-/}" =~ (^|$'\n')"${LANG_USER//-/}"($|$'\n') ]]; then + unset LANG + source /etc/profile.d/locale.sh + command -v xdg-user-dirs-update &>/dev/null && xdg-user-dirs-update --force + fi +} + +if [[ -n "${XDG_CONFIG_HOME}" && -r "${XDG_CONFIG_HOME}/locale.conf" ]]; then + set_user_locale "${XDG_CONFIG_HOME}/locale.conf" +elif [[ -n "${HOME}" && -r "${HOME}/.config/locale.conf" ]]; then + set_user_locale "${HOME}/.config/locale.conf" +fi diff --git a/ublinux/rc.xorg/10-fixkeyboard_layout b/ublinux/rc.xorg/10-fixkeyboard_layout index 7fe24e5..740804b 100755 --- a/ublinux/rc.xorg/10-fixkeyboard_layout +++ b/ublinux/rc.xorg/10-fixkeyboard_layout @@ -3,28 +3,22 @@ # Author: Dmitry Razumov # Copyright (c) 2021-2025 UBLinux # +# Used as a source ENABLED=yes -[[ ${ENABLED} == yes ]] || exit 0 +[[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || 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 +DEFAULT_CONF=$(< /usr/lib/ublinux/default) +[[ ${DEFAULT_CONF} =~ (^|$'\n')[[:blank:]]*SYSCONF=([^$|$'\n']+)[[:blank:]]*($|$'\n') ]] && SYSCONF=${BASH_REMATCH[2]} || SYSCONF="/etc/sysconf" +[[ ${DEFAULT_CONF} =~ (^|$'\n')[[:blank:]]*NUMLOCK=([^$|$'\n']+)[[:blank:]]*($|$'\n') ]] && NUMLOCK=${BASH_REMATCH[2]} -SYSCONF="${ROOTFS}${SYSCONF}" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/keyboard; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null -[[ ${RESETKBMODE} != @(no|disable) ]] && setxkbmap ${XKBLAYOUT} -model ${XKBMODEL} -option ${XKBOPTIONS} +#Disable 2025-10-25 +#[[ ${RESETKBMODE} != @(no|disable) ]] && setxkbmap ${XKBLAYOUT} -model ${XKBMODEL} -option ${XKBOPTIONS} # Automatic detection PC/notebooks -if [[ -z ${NUMLOCK} ]]; then - if xinput list | grep -qi touchpad ; then - NUMLOCK=no - else - NUMLOCK=yes - fi -fi - -[[ ${NUMLOCK} == @(yes|on) ]] && numlockx on -[[ ${NUMLOCK} == @(no|off) ]] && numlockx off +[[ -z ${NUMLOCK} ]] && { xinput list 2>/dev/null | grep -qi "touchpad" && NUMLOCK=no || NUMLOCK=yes; } +[[ ${NUMLOCK} == @(yes|on|enable) ]] && numlockx on +[[ ${NUMLOCK} == @(no|off|disable) ]] && numlockx off diff --git a/ublinux/rc.xorg/20-video-xorg-dpi b/ublinux/rc.xorg/20-video-xorg-dpi index be41f08..5d88577 100755 --- a/ublinux/rc.xorg/20-video-xorg-dpi +++ b/ublinux/rc.xorg/20-video-xorg-dpi @@ -3,17 +3,17 @@ # Author: Dmitry Razumov # Copyright (c) 2021-2025 UBLinux # +# Used as a source ENABLED=yes -[[ ${ENABLED} == yes ]] || exit 0 +[[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || 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 +DEFAULT_CONF=$(< /usr/lib/ublinux/default) +[[ ${DEFAULT_CONF} =~ (^|$'\n')[[:blank:]]*SYSCONF=([^$|$'\n']+)[[:blank:]]*($|$'\n') ]] && SYSCONF=${BASH_REMATCH[2]} || SYSCONF="/etc/sysconf" -SYSCONF="${ROOTFS}${SYSCONF}" SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/video; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +SOURCE=${SYSCONF}/desktop; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null xfce4_hidpi(){ [[ -x /usr/bin/startxfce4 ]] || return 0 diff --git a/ublinux/rc.xorg/50-domain_join b/ublinux/rc.xorg/50-domain_join index 5924a66..eb9a7b9 100755 --- a/ublinux/rc.xorg/50-domain_join +++ b/ublinux/rc.xorg/50-domain_join @@ -3,17 +3,19 @@ # Author: Dmitry Razumov # Copyright (c) 2021-2025 UBLinux # -# to be sourced +# Used as a source ENABLED=yes -[[ ${ENABLED} == "yes" ]] || exit 0 +[[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } + +DEFAULT_CONF=$(< /usr/lib/ublinux/default) +[[ ${DEFAULT_CONF} =~ (^|$'\n')[[:blank:]]*SYSCONF=([^$|$'\n']+)[[:blank:]]*($|$'\n') ]] && SYSCONF=${BASH_REMATCH[2]} || SYSCONF="/etc/sysconf" -SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/network; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null -if [ ! -z "$ADSERVER" ] ;then +if [[ ! -z "$ADSERVER" ]]; then export PATH=$PATH:/usr/lib/ublinux/scripts:/opt/secretnet/sbin:/opt/secretnet/bin:/usr/lib/qt4/bin diff --git a/ublinux/rc.xorg/60-checknet b/ublinux/rc.xorg/60-checknet index 1494278..d3f68f2 100755 --- a/ublinux/rc.xorg/60-checknet +++ b/ublinux/rc.xorg/60-checknet @@ -3,9 +3,13 @@ # Author: Dmitry Razumov # Copyright (c) 2021-2025 UBLinux # +# Used as a source ENABLED=no -[[ ${ENABLED} == "yes" ]] || exit 0 +[[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } + +DEFAULT_CONF=$(< /usr/lib/ublinux/default) +[[ ${DEFAULT_CONF} =~ (^|$'\n')[[:blank:]]*SYSCONF=([^$|$'\n']+)[[:blank:]]*($|$'\n') ]] && SYSCONF=${BASH_REMATCH[2]} || SYSCONF="/etc/sysconf" SOURCE=${SYSCONF}/config; [ -f "${SOURCE}" ] && . ${SOURCE} 2>/dev/null SOURCE=${SYSCONF}/desktop; [ -f "${SOURCE}" ] && . ${SOURCE} 2>/dev/null @@ -17,9 +21,7 @@ STARTNWTOOL=/usr/share/ublinux/i3term/zenWIFI WM=marco TESTINDE=i3term -. /usr/lib/ublinux/default - -[ -f /run/$(basename $0)_started ] && exit 0 +[ -f /run/$(basename $0)_started ] && return 0 if [ "$DESKTOP" = "$TESTINDE" ] ;then if [ "$TESTNETWORK" = "yes" ] ;then diff --git a/ublinux/rc.xorg/90-secretnet b/ublinux/rc.xorg/90-secretnet index f8110f0..26e5ab6 100755 --- a/ublinux/rc.xorg/90-secretnet +++ b/ublinux/rc.xorg/90-secretnet @@ -3,18 +3,20 @@ # Author: Dmitry Razumov # Copyright (c) 2021-2025 UBLinux # +# Used as a source ENABLED=yes -[[ ${ENABLED} == "yes" ]] || exit 0 +[[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; } SNLIBS=/opt/secretnet/lib -[ -d "$SNLIBS" ] || exit 0 -getent group snlogger || addgroup snlogger -getent group snadmin || addgroup snadmin -ldconfig $SNLIBS -systemctl is-active sn >/dev/null || systemctl restart sn +if [[ -d "${SNLIBS}" ]]; then + getent group snlogger || addgroup snlogger + getent group snadmin || addgroup snadmin + ldconfig $SNLIBS + systemctl is-active sn >/dev/null || systemctl restart sn -export PATH=$PATH:/usr/lib/ublinux/scripts:/opt/secretnet/sbin:/opt/secretnet/bin:/usr/lib/qt4/bin -/opt/secretnet/bin/snaidectl -i -/opt/secretnet/sbin/snunblock + export PATH=$PATH:/usr/lib/ublinux/scripts:/opt/secretnet/sbin:/opt/secretnet/bin:/usr/lib/qt4/bin + /opt/secretnet/bin/snaidectl -i + /opt/secretnet/sbin/snunblock +fi diff --git a/ublinux/scripts/grub-functions b/ublinux/scripts/grub-functions index 62cf04b..8aff71f 100755 --- a/ublinux/scripts/grub-functions +++ b/ublinux/scripts/grub-functions @@ -8,63 +8,120 @@ SELF_NAME="grub-functions" PATH_GRUB="/memory/data/from/0/boot/grub/" exec_get_all_menuentry(){ -## Показать все варианты загрузки из grub_*.cfg grub_*_addon.cfg grub_*_boothdd.cfg - FILE_OSRELEASE="/usr/lib/os-release" - NAME_DISTRIB=$(sed -En "/VARIANT=/{s/VARIANT=\"(.*)\"/\1/p}" ${FILE_OSRELEASE}) - VER_DISTRIB=$(sed -En "/VERSION_ID=/{s/VERSION_ID=(.*)/\1/p}" ${FILE_OSRELEASE}) +## Показать все варианты загрузки из grub_main.cfg grub_addon.cfg grub_boothdd.cfg grub_recovery.cfg + echo "\ +Full_save_to_HDD +Sandbox_in_RAM_with_save_user_profile_on_HDD +Full_sandbox_in_RAM +Saving_to_the_HDD_module +Menu_of_the_second_system +Additional_Menu>Sandbox_on_HDD_with_saving_user_profile_on_HDD +Additional_Menu>Full_sandbox_on_HDD +Recovery_Menu>Boot_base_modules_on_HDD_without_user_settings +Recovery_Menu>Boot_base_modules_in_RAM_without_user_settings +Boot_menu_for_other_OS>Boot_Windows_bootmgr +Boot_menu_for_other_OS>Boot_Windows_ntldr +Boot_menu_for_other_OS>Boot_Windows_BIOS_MBR +Boot_menu_for_other_OS>Boot_Windows_EFI_MBR +Boot_menu_for_other_OS>Boot_from_storage_1_Windows_EFI_MBR +Boot_menu_for_other_OS>Boot_from_storage_2_Windows_EFI_MBR +Boot_menu_for_other_OS>Boot_from_storage_3_Windows_EFI_MBR +Boot_menu_for_other_OS>Boot_from_storage_4_Windows_EFI_MBR +Boot_menu_for_other_OS>Boot_Windows_EFI_GPT +Boot_menu_for_other_OS>Boot_from_storage_1_Windows_EFI_GPT +Boot_menu_for_other_OS>Boot_from_storage_2_Windows_EFI_GPT +Boot_menu_for_other_OS>Boot_from_storage_3_Windows_EFI_GPT +Boot_menu_for_other_OS>Boot_from_storage_4_Windows_EFI_GPT +Boot_menu_for_other_OS>Boot_from_storage_2_masking +Boot_menu_for_other_OS>Boot_from_storage_3_masking +Boot_menu_for_other_OS>Boot_from_storage_4_masking +Boot_menu_for_other_OS>Boot_from_storage_2_without_masking +Boot_menu_for_other_OS>Boot_from_storage_3_without_masking +Boot_menu_for_other_OS>Boot_from_storage_4_without_masking" - FILE_GRUB_MAIN="${PATH_GRUB}/ublinux/grub_${LANG%_*}.cfg" - if [[ -f ${FILE_GRUB_MAIN} ]]; then - sed -En "/menuentry/{ - /(ISO|Install|Установка)/!{ - s/^[ \t]*// - s/\\$\{NAME_DISTRIB\}/${NAME_DISTRIB}/ - s/\\$\{VER_DISTRIB\}/${VER_DISTRIB}/ - s/menuentry \"(.*${NAME_DISTRIB}.*${VER_DISTRIB}.*)\" .*/\1/p - } - }" ${FILE_GRUB_MAIN} - fi - - - FILE_GRUB_ADDON="${PATH_GRUB}/ublinux/grub_${LANG%_*}_addon.cfg" - if [[ -f ${FILE_GRUB_ADDON} ]]; then - NAME_MENU_GRUB_ADDON=$(sed -En "/${FILE_GRUB_ADDON##*/}/{x;{s/menuentry \"(.*)\" .*/\1/p};d;}; x" ${FILE_GRUB_MAIN}) - sed -En "/menuentry/{ - /(ISO|Install|Установка)/!{ - s/^[ \t]*/${NAME_MENU_GRUB_ADDON}>/ - s/\\$\{NAME_DISTRIB\}/${NAME_DISTRIB}/ - s/\\$\{VER_DISTRIB\}/${VER_DISTRIB}/ - s/menuentry \"(.*${NAME_DISTRIB}.*${VER_DISTRIB}.*)\" .*/\1/p - } - }" ${FILE_GRUB_ADDON} - #" - fi +#Старые пункт: +#UBLinux Desktop Enterprise 2405 - Полное сохранение HDD +#UBLinux Desktop Enterprise 2405 - Песочница в RAM с сохранением профиля пользователя HDD +#UBLinux Desktop Enterprise 2405 - Полная песочница в RAM +#UBLinux Desktop Enterprise 2405 - Сохранение в модуль HDD +#Меню дополнительное>UBLinux Desktop Enterprise 2405 - Песочница на HDD с сохранением профиля пользователя HDD +#Меню дополнительное>UBLinux Desktop Enterprise 2405 - Полная песочница на HDD +#Меню выбора загрузки других ОС>Загрузка Windows используя bootmgr (7, 8, 8.1, 10, 11, 12) +#Меню выбора загрузки других ОС>Загрузка Windows используя ntldr (XP) +#Меню выбора загрузки других ОС>Загрузка Windows BIOS MBR +#Меню выбора загрузки других ОС>Загрузка Windows EFI boot раздел MBR +#Меню выбора загрузки других ОС>Загрузка с диска №1, Windows EFI boot раздел MBR +#Меню выбора загрузки других ОС>Загрузка с диска №2, Windows EFI boot раздел MBR +#Меню выбора загрузки других ОС>Загрузка с диска №3, Windows EFI boot раздел MBR +#Меню выбора загрузки других ОС>Загрузка с диска №4, Windows EFI boot раздел MBR +#Меню выбора загрузки других ОС>Загрузка Windows EFI boot раздел GPT +#Меню выбора загрузки других ОС>Загрузка с диска №1, Windows EFI boot раздел GPT +#Меню выбора загрузки других ОС>Загрузка с диска №2, Windows EFI boot раздел GPT +#Меню выбора загрузки других ОС>Загрузка с диска №3, Windows EFI boot раздел GPT +#Меню выбора загрузки других ОС>Загрузка с диска №4, Windows EFI boot раздел GPT +#Меню выбора загрузки других ОС>Загрузка с диска №2, маскируем диск под первый загрузочный +#Меню выбора загрузки других ОС>Загрузка с диска №3, маскируем диск под первый загрузочный +#Меню выбора загрузки других ОС>Загрузка с диска №4, маскируем диск под первый загрузочный +#Меню выбора загрузки других ОС>Загрузка с диска №2, без маскировки +#Меню выбора загрузки других ОС>Загрузка с диска №3, без маскировки +#Меню выбора загрузки других ОС>Загрузка с диска №4, без маскировки - FILE_GRUB_BOOTHDD="${PATH_GRUB}/ublinux/grub_${LANG%_*}_boothdd.cfg" - if [[ -f ${FILE_GRUB_BOOTHDD} ]]; then - NAME_MENU_GRUB_BOOTHDD=$(sed -En "/${FILE_GRUB_BOOTHDD##*/}/{x;{s/menuentry \"(.*)\" .*/\1/p};d;}; x" ${FILE_GRUB_MAIN}) - sed -En "/menuentry/{ - /(Back|Возврат)/!{ - s/^[ \t]*/${NAME_MENU_GRUB_BOOTHDD}>/ - s/\\$\{VER_DISTRIB\}/${VER_DISTRIB}/ - s/menuentry \"(.*)\" .*/\1/p - } - }" ${FILE_GRUB_BOOTHDD} - #" - fi - - FILE_GRUB_LOCAL="${PATH_GRUB}/ublinux/grub_local.cfg" - if [[ -f ${FILE_GRUB_LOCAL} ]]; then - NAME_MENU_GRUB_LOCAL=$(sed -En "/${FILE_GRUB_LOCAL##*/}/{x;{s/menuentry \"(.*)\" .*/\1/p};d;}; x" ${FILE_GRUB_MAIN} | sed -E "s/^[[:blank:]]//") - sed -En "/menuentry/{ - /(Back|Возврат)/!{ - s/^[ \t]*/${NAME_MENU_GRUB_LOCAL}>/ - s/\\$\{VER_DISTRIB\}/${VER_DISTRIB}/ - s/menuentry \"(.*)\" .*/\1/p - } - }" ${FILE_GRUB_LOCAL} - #" - fi +# FILE_OSRELEASE="/usr/lib/os-release" +# NAME_DISTRIB=$(sed -En "/VARIANT=/{s/VARIANT=\"(.*)\"/\1/p}" ${FILE_OSRELEASE}) +# VER_DISTRIB=$(sed -En "/VERSION_ID=/{s/VERSION_ID=(.*)/\1/p}" ${FILE_OSRELEASE}) +# +# FILE_GRUB_MAIN="${PATH_GRUB}/ublinux/grub_main.cfg" +# if [[ -f ${FILE_GRUB_MAIN} ]]; then +# sed -En "/menuentry/{ +# /(ISO|Install|Установка)/!{ +# s/^[ \t]*// +# s/\\$\{NAME_DISTRIB\}/${NAME_DISTRIB}/ +# s/\\$\{VER_DISTRIB\}/${VER_DISTRIB}/ +# s/menuentry \"(.*${NAME_DISTRIB}.*${VER_DISTRIB}.*)\" .*/\1/p +# } +# }" ${FILE_GRUB_MAIN} +# fi +# +# +# FILE_GRUB_ADDON="${PATH_GRUB}/ublinux/grub_addon.cfg" +# if [[ -f ${FILE_GRUB_ADDON} ]]; then +# NAME_MENU_GRUB_ADDON=$(sed -En "/${FILE_GRUB_ADDON##*/}/{x;{s/menuentry \"(.*)\" .*/\1/p};d;}; x" ${FILE_GRUB_MAIN}) +# sed -En "/menuentry/{ +# /(ISO|Install|Установка)/!{ +# s/^[ \t]*/${NAME_MENU_GRUB_ADDON}>/ +# s/\\$\{NAME_DISTRIB\}/${NAME_DISTRIB}/ +# s/\\$\{VER_DISTRIB\}/${VER_DISTRIB}/ +# s/menuentry \"(.*${NAME_DISTRIB}.*${VER_DISTRIB}.*)\" .*/\1/p +# } +# }" ${FILE_GRUB_ADDON} +# #" +# fi +# +# FILE_GRUB_BOOTHDD="${PATH_GRUB}/ublinux/grub_boothdd.cfg" +# if [[ -f ${FILE_GRUB_BOOTHDD} ]]; then +# NAME_MENU_GRUB_BOOTHDD=$(sed -En "/${FILE_GRUB_BOOTHDD##*/}/{x;{s/menuentry \"(.*)\" .*/\1/p};d;}; x" ${FILE_GRUB_MAIN}) +# sed -En "/menuentry/{ +# /(Back|Возврат)/!{ +# s/^[ \t]*/${NAME_MENU_GRUB_BOOTHDD}>/ +# s/\\$\{VER_DISTRIB\}/${VER_DISTRIB}/ +# s/menuentry \"(.*)\" .*/\1/p +# } +# }" ${FILE_GRUB_BOOTHDD} +# #" +# fi +# +# FILE_GRUB_LOCAL="${PATH_GRUB}/ublinux/grub_local.cfg" +# if [[ -f ${FILE_GRUB_LOCAL} ]]; then +# NAME_MENU_GRUB_LOCAL=$(sed -En "/${FILE_GRUB_LOCAL##*/}/{x;{s/menuentry \"(.*)\" .*/\1/p};d;}; x" ${FILE_GRUB_MAIN} | sed -E "s/^[[:blank:]]//") +# sed -En "/menuentry/{ +# /(Back|Возврат)/!{ +# s/^[ \t]*/${NAME_MENU_GRUB_LOCAL}>/ +# s/\\$\{VER_DISTRIB\}/${VER_DISTRIB}/ +# s/menuentry \"(.*)\" .*/\1/p +# } +# }" ${FILE_GRUB_LOCAL} +# #" +# fi } exec_get_last_menuentry(){ @@ -81,13 +138,10 @@ exec_get_last_menuentry(){ return 0 2>/dev/null && return 0 if [[ -z $@ ]]; then true -# 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//\'/}'"; } + declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'" shift done eval ${FUNCTION#*; } diff --git a/ublinux/templates/ublinux-data.ini b/ublinux/templates/ublinux-data.ini index a1dad7c..40443b5 100644 --- a/ublinux/templates/ublinux-data.ini +++ b/ublinux/templates/ublinux-data.ini @@ -240,13 +240,14 @@ VERSION= ## # Дополнительные группы пользователя. Дополнительные к USERGROUPS ## # Если группа отсутствует или 'x', то 'extra_groups=users'. Если группа не существует, то будет создана. Перечисление через запятую. ## # Дополнительные параметры, например: '--shell /bin/bash --create-home --no-create-home --no-user-group --non-unique' -## --home-dir <ДОМ_КАТ> # Домашний каталог новой учётной записи -## -s, --shell /bin/bash # Регистрационная оболочка новой учётной записи -## -r, --system # Создать системного пользователя -## -M, --no-create-home # Не создавать домашний каталог пользователя -## -N, --no-user-group # Не создавать группу с тем же именем что и у пользователя -## -o, --non-unique # Разрешить создание пользователей с повторяющимися (не уникальными) UID, использовать только совместно с параметром -## --badnames # Не проверять имя на несоответствие правилам использования символов +## --home-dir # Домашний каталог новой учётной записи +## --lang # Язык системы для пользователя +## -s, --shell /bin/bash # Регистрационная оболочка новой учётной записи +## -r, --system # Создать системного пользователя +## -M, --no-create-home # Не создавать домашний каталог пользователя +## -N, --no-user-group # Не создавать группу с тем же именем что и у пользователя +## -o, --non-unique # Разрешить создание пользователей с повторяющимися (не уникальными) UID, использовать только совместно с параметром +## --badnames # Не проверять имя на несоответствие правилам использования символов ## # Хеш пароля пользователя ## # Если пароль пустой или состоит из символа 'x', то 'password=${DEFAULTPASSWD}' ## # Если user_name=root, то пароль не применяется, а используется password=${DEFAULTROOTPASSWD} @@ -439,6 +440,19 @@ VERSION= ## REPOPUBLIC_WEB[/home/storage:repo-1,repo-2]=enable:listing::ublinux:sha512:123 ## REPOPUBLIC_WEB[/home/storage:repo-1,repo-2]=enable:listing::ublinux:sha256:a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 +## Опубликовать хранилище или репозиторий в виде локального FTP ресурса +## Если необходимо опубликовать выборочные репозитории, то создать новый каталог хранилища в который переместить симлинки выбранных репозиториев. Опубликовать новый каталог хранилища. +## REPOPUBLIC_FTP[|:,,<...>]=enable|yes|disable|no|none:: +## # Путь до каталога хранилища, который будет опубликован +## :repo1,repo2 # Путь до каталога хранилища и выбранные репозитории из хранилища которые будут опубликованы +## enable|yes # Включить публикацию +## disable|no|none # Выключить публикацию +## # Порт по которому доступен репозиторий. По умолчанию: 21. Не обязательный +## # Пользователь от которого будет работать анонимный пользователь. Не обязательный. +## REPOPUBLIC_FTP[/home/storage]=enable +## REPOPUBLIC_FTP[/home/storage:repo-1,repo-2]=enable:21 +## REPOPUBLIC_FTP[/home/storage:repo-1,repo-2]=enable:21:ftp + ## Опубликовать ленивое зеркало подключенных репозиториев в виде локального WEB ресурса. ## Получая запрос от пользователя, загружает с удалённого репозитория пакет и сохраняет в кеше передавая его пользователю. ## REPOPUBLIC_CACHE=enable|yes|disable|no|none @@ -535,8 +549,8 @@ VERSION= ## # Если не указан, то без пароля ## # Имя домена. Пример: ubdomain.ru ## # Опции подключения. Пример: 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[/media/cifs:share]='cifs://192.168.103.55/share:login:password_base64:domain:noperm,vers=1.0' +#AUTOMOUNT_SHARE[/media/share2]='cifs://192.168.103.55/share2:login:password_base64:domain:noperm,vers=1.0' ## ## AUTOMOUNT_SHARE[]='direct::[]:[]:[]' ## # Точка монтирования. Пример: /media/direct:sdb1 @@ -810,8 +824,37 @@ VERSION= ## GRUB_TIMEOUT=3 ## Выбор варианта загрузки GRUB по умолчанию -## GRUB_DEFAULT= -## GRUB_DEFAULT="UBLinux Desktop Basic 2204 - Песочница в RAM с сохранением профиля пользователя HDD" +## GRUB_DEFAULT= +## = # Меню загрузки GRUB +## Full_save_to_HDD # Полное сохранение HDD +## Sandbox_in_RAM_with_save_user_profile_on_HDD # Песочница в RAM с сохранением профиля пользователя HDD +## Full_sandbox_in_RAM # Полная песочница в RAM +## Saving_to_the_HDD_module # Сохранение в модуль HDD +## Menu_of_the_second_system # Меню второй системы +## Additional_Menu>Sandbox_on_HDD_with_saving_user_profile_on_HDD # Меню дополнительное>Песочница на HDD с сохранением профиля пользователя HDD +## Additional_Menu>Full_sandbox_on_HDD # Меню дополнительное>Полная песочница на HDD +## Recovery_Menu>Boot_base_modules_on_HDD_without_user_settings # Меню восстановления>Загрузка базовых модулей на HDD без пользовательских настроек +## Recovery_Menu>Boot_base_modules_in_RAM_without_user_settings # Меню восстановления>Загрузка базовых модулей в RAM без пользовательских настроек +## Boot_menu_for_other_OS>Boot_Windows_bootmgr # Меню выбора загрузки других ОС>Загрузка Windows используя bootmgr (7, 8, 8.1, 10, 11, 12) +## Boot_menu_for_other_OS>Boot_Windows_ntldr # Меню выбора загрузки других ОС>Загрузка Windows используя ntldr (XP) +## Boot_menu_for_other_OS>Boot_Windows_BIOS_MBR # Меню выбора загрузки других ОС>Загрузка Windows BIOS MBR +## Boot_menu_for_other_OS>Boot_Windows_EFI_MBR # Меню выбора загрузки других ОС>Загрузка Windows EFI boot раздел MBR +## Boot_menu_for_other_OS>Boot_from_storage_1_Windows_EFI_MBR # Меню выбора загрузки других ОС>Загрузка с диска №1, Windows EFI boot раздел MBR +## Boot_menu_for_other_OS>Boot_from_storage_2_Windows_EFI_MBR # Меню выбора загрузки других ОС>Загрузка с диска №2, Windows EFI boot раздел MBR +## Boot_menu_for_other_OS>Boot_from_storage_3_Windows_EFI_MBR # Меню выбора загрузки других ОС>Загрузка с диска №3, Windows EFI boot раздел MBR +## Boot_menu_for_other_OS>Boot_from_storage_4_Windows_EFI_MBR # Меню выбора загрузки других ОС>Загрузка с диска №4, Windows EFI boot раздел MBR +## Boot_menu_for_other_OS>Boot_Windows_EFI_GPT # Меню выбора загрузки других ОС>Загрузка Windows EFI boot раздел GPT +## Boot_menu_for_other_OS>Boot_from_storage_1_Windows_EFI_GPT # Меню выбора загрузки других ОС>Загрузка с диска №1, Windows EFI boot раздел GPT +## Boot_menu_for_other_OS>Boot_from_storage_2_Windows_EFI_GPT # Меню выбора загрузки других ОС>Загрузка с диска №2, Windows EFI boot раздел GPT +## Boot_menu_for_other_OS>Boot_from_storage_3_Windows_EFI_GPT # Меню выбора загрузки других ОС>Загрузка с диска №3, Windows EFI boot раздел GPT +## Boot_menu_for_other_OS>Boot_from_storage_4_Windows_EFI_GPT # Меню выбора загрузки других ОС>Загрузка с диска №4, Windows EFI boot раздел GPT +## Boot_menu_for_other_OS>Boot_from_storage_2_masking # Меню выбора загрузки других ОС>Загрузка с диска №2, маскируем диск под первый загрузочный +## Boot_menu_for_other_OS>Boot_from_storage_3_masking # Меню выбора загрузки других ОС>Загрузка с диска №3, маскируем диск под первый загрузочный +## Boot_menu_for_other_OS>Boot_from_storage_4_masking # Меню выбора загрузки других ОС>Загрузка с диска №4, маскируем диск под первый загрузочный +## Boot_menu_for_other_OS>Boot_from_storage_2_without_masking # Меню выбора загрузки других ОС>Загрузка с диска №2, без маскировки +## Boot_menu_for_other_OS>Boot_from_storage_3_without_masking # Меню выбора загрузки других ОС>Загрузка с диска №3, без маскировки +## Boot_menu_for_other_OS>Boot_from_storage_4_without_masking # Меню выбора загрузки других ОС>Загрузка с диска №4, без маскировки +## GRUB_DEFAULT="Sandbox_in_RAM_with_save_user_profile_on_HDD" ## Пользователь GRUB для входа в режим редактирования конфигурации загрузки ## GRUB_SUPERUSERS=,, @@ -982,14 +1025,17 @@ VERSION= ## Настройка сохранений ################################################################################ ## Сохранять кэши при перезагрузке/выключении, ускоряет загрузку системы +## SAVE_ALL_CACHE=rootcopy|modules +## rootcopy # Сохранить изменения кэша в каталог загружаемый в ОЗУ при загрузке +## modules # Сохранить изменения кэша в модуль подключаемый при загрузке ## SAVE_ALL_CACHE=rootcopy ## Работает только в режимах песочницы. Не работает в режиме полного сохранения. ## При перезагрузке/выключении, сохранить/перезаписать указанные каталоги/файлы и , кроме в /ublinux-data/rootcopy/ ## Примечание: При загрузке весь каталог /ublinux-data/rootcopy копируется в корень. В режиме песочницы потребляет свободное ОЗУ. В режиме сохранения заменяет файлы в корне. -## SAVE_ROOTCOPY_INCLUDE= # Каталоги и файлы которые будут сохранены в rootcopy -## SAVE_ROOTCOPY_CHANGES= # Каталоги и файлы изменений которые будут сохранены в rootcopy -## SAVE_ROOTCOPY_EXCLUDE= # Каталоги и файлы которые будут исключены из сохранения в rootcopy +## SAVE_ROOTCOPY_INCLUDE=,, # Каталоги и файлы которые будут сохранены в rootcopy +## SAVE_ROOTCOPY_CHANGES=,, # Каталоги и файлы изменений которые будут сохранены в rootcopy +## SAVE_ROOTCOPY_EXCLUDE=,, # Каталоги и файлы которые будут исключены из сохранения в rootcopy #SAVE_ROOTCOPY_CHANGES="/etc" #SAVE_ROOTCOPY_INCLUDE="/etc/pacman.d/gnupg,/etc/NetworkManager/system-connections" #SAVE_ROOTCOPY_EXCLUDE="/etc/ublinux" @@ -1861,19 +1907,21 @@ VERSION= #HWCLOCK_SYNC=localtime ## Установка часового пояса * =UTC -## ZONE=... -## * =Etc/UTC # Time zone for UTC MSK-3 -## =Europe/Kaliningrad # Time zone for UTC+2 MSK-1 -## =Europe/Moscow # Time zone for UTC+3 MSK -## =Europe/Samara # Time zone for UTC+4 MSK+1 -## =Asia/Yekaterinburg # Time zone for UTC+5 MSK+2 -## =Asia/Omsk # Time zone for UTC+6 MSK+3 -## =Asia/Krasnoyarsk # Time zone for UTC+7 MSK+4 -## =Asia/Irkutsk # Time zone for UTC+8 MSK+5 -## =Asia/Chita # Time zone for UTC+9 MSK+6 -## =Asia/Yakutsk # Time zone for UTC+10 MSK+7 -## =Asia/Vladivostok # Time zone for UTC+11 MSK+8 -## =Asia/Magadan # Time zone for UTC+12 MSK+9 +## ZONE= +## # Time zone +## =Etc/UTC # Time zone for UTC MSK-3 +## =Europe/Kaliningrad # Time zone for UTC+2 MSK-1 +## =Europe/Moscow # Time zone for UTC+3 MSK +## =Europe/Samara # Time zone for UTC+4 MSK+1 +## =Asia/Yekaterinburg # Time zone for UTC+5 MSK+2 +## =Asia/Omsk # Time zone for UTC+6 MSK+3 +## =Asia/Krasnoyarsk # Time zone for UTC+7 MSK+4 +## =Asia/Irkutsk # Time zone for UTC+8 MSK+5 +## =Asia/Chita # Time zone for UTC+9 MSK+6 +## =Asia/Yakutsk # Time zone for UTC+10 MSK+7 +## =Asia/Vladivostok # Time zone for UTC+11 MSK+8 +## =Asia/Magadan # Time zone for UTC+12 MSK+9 +## = # Time zone manual #ZONE=Europe/Moscow [/etc/ublinux/locale] @@ -1887,11 +1935,6 @@ VERSION= ## LANG= ## # Основная локаль системы #LANG="ru_RU.UTF-8" -# -## Шрифт консоли tty -## CONSOLE_FONT= -## # Шрифт, примеры: cyr-sun16 lat0-16 eurlatgr -## CONSOLE_FONT="cyr-sun16" [/etc/ublinux/keyboard] ################################################################################ @@ -1926,14 +1969,26 @@ VERSION= ## compose:rwin # Режим compose #XKBOPTIONS=grp:lalt_lshift_toggle,grp_led:scroll,compose:rwin -## Раскладка клавиатуры для TTY -## CONSOLE_KEYMAP= -## # Указывается одна дополнительная раскладка -#CONSOLE_KEYMAP="ru" +## Шрифт консоли TTY VT +## CONSOLE_FONT= +## # Шрифт /usr/share/kbd/consolefonts +## # Примеры: latarcyrheb-sun16, cyr-sun16, lat0-16, eurlatgr +## CONSOLE_FONT="latarcyrheb-sun16" + +## Карта шрифта консоли TTY VT +## CONSOLE_FONT_MAP= + +## Карта шрифта Unicode консоли TTY VT +## CONSOLE_FONT_UNIMAP= + +## Карта клавиш и вариант переключения раскладки TTY VT +## CONSOLE_KEYMAP= +## # Вариант из известных: /usr/share/kbd/keymaps/*.map.* +#CONSOLE_KEYMAP="ruwin_ct_sh-UTF-8" -## Настройка второй раскладки клавишь в TTY -## CONSOLE_KEYMAP_TOGGLE= -## # Вариант переключения, например: ruwin_ct_sh-UTF-8 +## Дополнительная карта клавиш и вариант переключения раскладки TTY VT +## CONSOLE_KEYMAP_TOGGLE= +## # Вариант из известных: /usr/share/kbd/keymaps/*.map.* #CONSOLE_KEYMAP_TOGGLE="ruwin_ct_sh-UTF-8" [/etc/ublinux/ubm]