Fix Locale and Lang parametrs

master
Dmitry Razumov 1 month ago
parent baa9d4e054
commit a81aa05421
Signed by: asmeron
GPG Key ID: 50BC1DB583B79706

@ -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

@ -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 ;;

@ -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

@ -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

@ -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(){

@ -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}"

@ -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
}

@ -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 ресурса.
## Получая запрос от пользователя, загружает с удалённого репозитория пакет и сохраняет в кеше передавая его пользователю.

@ -1,22 +1,31 @@
#!/usr/bin/env bash
#
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#
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

@ -0,0 +1,124 @@
#!/usr/bin/env bash
#
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#
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

@ -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} <<EOF
Section "Extensions"
Option "DPMS" "Disable"
@ -84,7 +78,7 @@ Section "ServerFlags"
Option "BlankTime" "0"
EndSection
EOF
elif grep -Eiq "^dpms$" <<< "${I_EXT}"; then
elif [[ ${I_EXT} =~ (^"dpms"|",dpms"|";dpms"|" dpms") ]]; then
cat > ${XORG_FILE_EXT} <<EOF
Section "Extensions"
Option "DPMS" "Enable"
@ -168,21 +162,58 @@ exec_xorg_monitor(){
}
exec_mkkbdfxorg(){
[[ $(declare -p XKBMODEL 2>/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} <<EOF
Section "InputClass"
Identifier "system-keyboard"
MatchIsKeyboard "on"
Option "XkbLayout" "${XKBLAYOUT}"
Option "XkbModel" "${XKBMODEL}"
Option "XkbVariant" "${XKBVARIANT}"
Option "XkbOptions" "${XKBOPTIONS}"
EndSection
EOF
XORG_FILE_LOCALECTL="/etc/X11/xorg.conf.d/00-keyboard.conf"
if [[ ${MKKBDFXORG} =~ @("no"|"disable"|"off") ]]; then
[[ ! -f ${XORG_FILE_KEYBOARD} ]] || rm -f "${XORG_FILE_KEYBOARD}" 2>/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
}

@ -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

@ -3,15 +3,18 @@
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#
# 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
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
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

@ -3,17 +3,18 @@
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#
# 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

@ -3,21 +3,18 @@
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#
# 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

@ -0,0 +1,29 @@
#!/usr/bin/env bash
#
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#
# 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

@ -3,28 +3,22 @@
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#
# 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

@ -3,17 +3,17 @@
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#
# 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

@ -3,17 +3,19 @@
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#
# 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

@ -3,9 +3,13 @@
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#
# 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

@ -3,18 +3,20 @@
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#
# 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

@ -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#*; }

@ -240,13 +240,14 @@ VERSION=
## <extra_groups> # Дополнительные группы пользователя. Дополнительные к USERGROUPS
## # Если группа отсутствует или 'x', то 'extra_groups=users'. Если группа не существует, то будет создана. Перечисление через запятую.
## <optional> # Дополнительные параметры, например: '--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, использовать только совместно с параметром <uid>
## --badnames # Не проверять имя на несоответствие правилам использования символов
## --home-dir <HOMEDIR> # Домашний каталог новой учётной записи
## --lang <LANG> # Язык системы для пользователя
## -s, --shell /bin/bash # Регистрационная оболочка новой учётной записи
## -r, --system # Создать системного пользователя
## -M, --no-create-home # Не создавать домашний каталог пользователя
## -N, --no-user-group # Не создавать группу с тем же именем что и у пользователя
## -o, --non-unique # Разрешить создание пользователей с повторяющимися (не уникальными) UID, использовать только совместно с параметром <uid>
## --badnames # Не проверять имя на несоответствие правилам использования символов
## <password|x> # Хеш пароля пользователя
## # Если пароль пустой или состоит из символа '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[<path>|<path>:<repo1>,<repo2>,<...>]=enable|yes|disable|no|none:<port>:<map_username>
## <path> # Путь до каталога хранилища, который будет опубликован
## <path>:repo1,repo2 # Путь до каталога хранилища и выбранные репозитории из хранилища которые будут опубликованы
## enable|yes # Включить публикацию
## disable|no|none # Выключить публикацию
## <port> # Порт по которому доступен репозиторий. По умолчанию: 21. Не обязательный
## <map_username> # Пользователь от которого будет работать анонимный пользователь. Не обязательный.
## 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=
## # Если не указан, то без пароля
## <domain> # Имя домена. Пример: ubdomain.ru
## <opt> # Опции подключения. Пример: 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[<mountpoint>]='direct:<device>:[<group>]:[<mode>]:[<opt>]'
## <mountpoint> # Точка монтирования. Пример: /media/direct:sdb1
@ -810,8 +824,37 @@ VERSION=
## GRUB_TIMEOUT=3
## Выбор варианта загрузки GRUB по умолчанию
## GRUB_DEFAULT=<name_menu>
## GRUB_DEFAULT="UBLinux Desktop Basic 2204 - Песочница в RAM с сохранением профиля пользователя HDD"
## GRUB_DEFAULT=<MENU_ENTRY>
## <MENU_ENTRY>= # Меню загрузки 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=<user_1>,<user_2>,<user_n>
@ -982,14 +1025,17 @@ VERSION=
## Настройка сохранений
################################################################################
## Сохранять кэши при перезагрузке/выключении, ускоряет загрузку системы
## SAVE_ALL_CACHE=rootcopy|modules
## rootcopy # Сохранить изменения кэша в каталог загружаемый в ОЗУ при загрузке
## modules # Сохранить изменения кэша в модуль подключаемый при загрузке
## SAVE_ALL_CACHE=rootcopy
## Работает только в режимах песочницы. Не работает в режиме полного сохранения.
## При перезагрузке/выключении, сохранить/перезаписать указанные каталоги/файлы <SAVE_ROOTCOPY_CHANGES> и <SAVE_ROOTCOPY_INCLUDE>, кроме <SAVE_ROOTCOPY_EXCLUDE> в /ublinux-data/rootcopy/
## Примечание: При загрузке весь каталог /ublinux-data/rootcopy копируется в корень. В режиме песочницы потребляет свободное ОЗУ. В режиме сохранения заменяет файлы в корне.
## SAVE_ROOTCOPY_INCLUDE=<path_1,path_2/file_1,path_n> # Каталоги и файлы которые будут сохранены в rootcopy
## SAVE_ROOTCOPY_CHANGES=<path_1,path_2/file_1,path_n> # Каталоги и файлы изменений которые будут сохранены в rootcopy
## SAVE_ROOTCOPY_EXCLUDE=<path_1,path_2/file_1,path_n> # Каталоги и файлы которые будут исключены из сохранения в rootcopy
## SAVE_ROOTCOPY_INCLUDE=<path_1>,<path_2/file_1>,<path_n> # Каталоги и файлы которые будут сохранены в rootcopy
## SAVE_ROOTCOPY_CHANGES=<path_1>,<path_2/file_1>,<path_n> # Каталоги и файлы изменений которые будут сохранены в rootcopy
## SAVE_ROOTCOPY_EXCLUDE=<path_1>,<path_2/file_1>,<path_n> # Каталоги и файлы которые будут исключены из сохранения в 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=<ZONE>
## <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
## =<MANUAL> # Time zone manual
#ZONE=Europe/Moscow
[/etc/ublinux/locale]
@ -1887,11 +1935,6 @@ VERSION=
## LANG=<locale>
## <locale> # Основная локаль системы
#LANG="ru_RU.UTF-8"
#
## Шрифт консоли tty
## CONSOLE_FONT=<FONT>
## <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=<layout>
## <layout> # Указывается одна дополнительная раскладка
#CONSOLE_KEYMAP="ru"
## Шрифт консоли TTY VT
## CONSOLE_FONT=<FONT>
## <FONT> # Шрифт /usr/share/kbd/consolefonts
## # Примеры: latarcyrheb-sun16, cyr-sun16, lat0-16, eurlatgr
## CONSOLE_FONT="latarcyrheb-sun16"
## Карта шрифта консоли TTY VT
## CONSOLE_FONT_MAP=<MAP>
## Карта шрифта Unicode консоли TTY VT
## CONSOLE_FONT_UNIMAP=<UNIMAP>
## Карта клавиш и вариант переключения раскладки TTY VT
## CONSOLE_KEYMAP=<KEYMAP>
## <KEYMAP> # Вариант из известных: /usr/share/kbd/keymaps/*.map.*
#CONSOLE_KEYMAP="ruwin_ct_sh-UTF-8"
## Настройка второй раскладки клавишь в TTY
## CONSOLE_KEYMAP_TOGGLE=<toggle>
## <toggle> # Вариант переключения, например: ruwin_ct_sh-UTF-8
## Дополнительная карта клавиш и вариант переключения раскладки TTY VT
## CONSOLE_KEYMAP_TOGGLE=<KEYMAP>
## <KEYMAP> # Вариант из известных: /usr/share/kbd/keymaps/*.map.*
#CONSOLE_KEYMAP_TOGGLE="ruwin_ct_sh-UTF-8"
[/etc/ublinux/ubm]

Loading…
Cancel
Save