From b206449ebd647180192ae59c7dc441d7c5e533a6 Mon Sep 17 00:00:00 2001 From: s13bby Date: Mon, 17 Aug 2026 20:26:07 +0600 Subject: [PATCH] =?UTF-8?q?=D0=B5=D1=89=D0=B5=20=D0=BE=D0=B4=D0=B8=D0=BD?= =?UTF-8?q?=20=D0=B0=D0=BF=D0=B4=D0=B5=D0=B9=D1=82=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?void?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VOID/xbps_install.sh | 723 ++++++++++++++++++++++++++----------------- 1 file changed, 439 insertions(+), 284 deletions(-) diff --git a/VOID/xbps_install.sh b/VOID/xbps_install.sh index d3deb1c..ee99be9 100644 --- a/VOID/xbps_install.sh +++ b/VOID/xbps_install.sh @@ -1,26 +1,52 @@ #!/bin/sh # ============================================================================= -# Void Linux + Labwc + SDDM installer +# Void Linux + SDDM + Labwc +# ============================================================================= +# +# Целевая схема: +# +# BIOS/UEFI +# | +# v +# runit +# | +# +---- dbus +# | +# +---- seatd +# | +# +---- elogind +# | +# +---- sddm +# | +# +---- Xorg +# | +# v +# SDDM +# | +# v +# Labwc (Wayland) +# +# Подходит для: +# - чистой установки Void Linux +# - KVM/QEMU + QXL +# - KVM/QEMU + VirtIO GPU +# - Intel +# - AMD +# +# NVIDIA намеренно НЕ настраивается автоматически. # # Запуск: -# sudo sh void-labwc-install.sh # -# Цель: -# - Wayland -# - Labwc -# - SDDM -# - seatd -# - elogind -# - D-Bus -# - PipeWire/WirePlumber в пользовательской сессии +# sudo sh void-labwc-install.sh # -# ВАЖНО: -# Скрипт НЕ устанавливает NVIDIA-драйвер автоматически. -# Драйвер GPU лучше определить отдельно. # ============================================================================= set -eu +# ============================================================================= +# Цвета / вывод +# ============================================================================= + RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' @@ -44,21 +70,18 @@ error() { exit 1 } -run() { - "$@" || error "Команда завершилась с ошибкой: $*" -} - # ============================================================================= # Проверка root # ============================================================================= if [ "$(id -u)" -ne 0 ]; then - error "Запусти скрипт через sudo: + error "Скрипт необходимо запускать через sudo: + sudo sh $0" fi # ============================================================================= -# Определение пользователя +# Определение обычного пользователя # ============================================================================= REAL_USER="${SUDO_USER:-}" @@ -66,77 +89,122 @@ REAL_USER="${SUDO_USER:-}" if [ -z "$REAL_USER" ] || [ "$REAL_USER" = "root" ]; then error "Не удалось определить обычного пользователя. -Запусти так: +Запусти скрипт так: sudo sh $0 -а не через обычный root shell." +а не из root shell." fi if ! id "$REAL_USER" >/dev/null 2>&1; then - error "Пользователь $REAL_USER не существует." + error "Пользователь '$REAL_USER' не существует." fi +USER_UID="$(id -u "$REAL_USER")" +USER_GID="$(id -g "$REAL_USER")" +USER_GROUP="$(id -gn "$REAL_USER")" USER_HOME="$(getent passwd "$REAL_USER" | cut -d: -f6)" if [ -z "$USER_HOME" ] || [ ! -d "$USER_HOME" ]; then - error "Не удалось определить HOME пользователя $REAL_USER." + error "Не удалось определить HOME пользователя '$REAL_USER'." fi echo "" echo "============================================================" -echo " Void Linux + Labwc + SDDM installer" +echo " Void Linux + SDDM + Labwc installer" echo "============================================================" echo "" -echo "Пользователь: $REAL_USER" -echo "HOME: $USER_HOME" +echo "Пользователь : $REAL_USER" +echo "UID : $USER_UID" +echo "HOME : $USER_HOME" echo "" # ============================================================================= -# ЭТАП 1. Репозитории +# Проверка архитектуры # ============================================================================= -log "Этап 1/7: настройка репозиториев..." +info "Архитектура системы: $(uname -m)" + +# ============================================================================= +# ЭТАП 1 — Репозитории +# ============================================================================= + +echo "" +log "Этап 1/8: настройка репозиториев..." + +# Nonfree нужен для части firmware/драйверов и некоторых пакетов. +if xbps-query -Rs '^void-repo-nonfree$' 2>/dev/null | \ + grep -q 'void-repo-nonfree'; then + + log "void-repo-nonfree доступен." -if ! xbps-query -Rs '^void-repo-nonfree$' 2>/dev/null | grep -q void-repo-nonfree; then - xbps-install -Sy void-repo-nonfree || \ - warn "Не удалось установить void-repo-nonfree." else - log "void-repo-nonfree уже доступен." + info "Устанавливаю void-repo-nonfree..." + xbps-install -Sy void-repo-nonfree fi # ============================================================================= -# ЭТАП 2. Обновление системы +# ЭТАП 2 — Обновление системы # ============================================================================= -log "Этап 2/7: обновление системы..." +echo "" +log "Этап 2/8: обновление системы..." -run xbps-install -Syu +xbps-install -Syu # ============================================================================= -# ЭТАП 3. Основные пакеты +# ЭТАП 3 — Базовые пакеты # ============================================================================= -log "Этап 3/7: установка графического стека..." +echo "" +log "Этап 3/8: установка базовой системы..." -PACKAGES=" -labwc -sddm -seatd -elogind +BASE_PACKAGES=" +base-system dbus +elogind +seatd +sudo +ca-certificates +curl +wget +tar +unzip +zip +p7zip +unar +fuse +fuse-common +xdg-utils +" -xorg-minimal +for pkg in $BASE_PACKAGES; do + info "Установка: $pkg" + xbps-install -y "$pkg" || warn "Не удалось установить $pkg" +done + +# ============================================================================= +# ЭТАП 4 — Графический стек +# ============================================================================= + +echo "" +log "Этап 4/8: установка графического стека..." + +GRAPHICS_PACKAGES=" +xorg xorg-server-xwayland - mesa-dri +sddm +labwc + waybar +wofi +mako swaylock swayidle swaybg -mako -wofi + wl-clipboard cliphist grim @@ -146,10 +214,6 @@ xdg-desktop-portal xdg-desktop-portal-wlr xdg-desktop-portal-gtk -pipewire -wireplumber -alsa-pipewire - polkit polkit-gnome @@ -158,35 +222,9 @@ qt6-wayland qt5ct qt6ct -dolphin -kate -firefox -kitty -mpv -ristretto -pavucontrol -easyeffects -gparted -htop -qdirstat - -curl -wget -tar -unar -unzip -zip -p7zip - -nodejs -npm - -ffmpeg -libnotify -xdg-utils -fuse -fuse-common -ca-certificates +pipewire +wireplumber +alsa-pipewire fontconfig noto-fonts-ttf @@ -200,62 +238,123 @@ adwaita-icon-theme linux-firmware " -# Установка по одному. -# -# Это специально сделано вместо одного xargs: -# если один необязательный пакет отсутствует в репозитории, -# это не должно ломать весь графический стек. - -for pkg in $PACKAGES; do - if xbps-query -Rs "^${pkg}$" 2>/dev/null | grep -q "$pkg"; then - if xbps-query -p pkgver "$pkg" >/dev/null 2>&1; then - log "Уже установлен: $pkg" - else - info "Устанавливаю: $pkg" - xbps-install -y "$pkg" || warn "Не удалось установить $pkg" - fi - else - warn "Пакет отсутствует в репозиториях: $pkg" - fi +for pkg in $GRAPHICS_PACKAGES; do + info "Установка: $pkg" + xbps-install -y "$pkg" || warn "Не удалось установить $pkg" done # ============================================================================= -# ЭТАП 4. Пользователь и группы +# QXL / KVM # ============================================================================= -log "Этап 4/7: настройка пользователя..." +echo "" +info "Проверка виртуальной/физической видеокарты..." + +if command -v lspci >/dev/null 2>&1; then + + GPU_INFO="$(lspci | grep -Ei 'VGA|3D|Display' || true)" + + if [ -n "$GPU_INFO" ]; then + echo "" + echo "$GPU_INFO" + echo "" + + case "$GPU_INFO" in + + *QXL*|*Red\ Hat*QXL*) + info "Обнаружена QXL GPU — устанавливаю Xorg QXL driver." + xbps-install -y xf86-video-qxl || \ + warn "xf86-video-qxl недоступен." + ;; + + *Virtio*) + info "Обнаружена VirtIO GPU." + ;; + + *AMD*|*ATI*|*Radeon*) + info "Обнаружена AMD/ATI GPU." + ;; + + *Intel*) + info "Обнаружена Intel GPU." + ;; + + *NVIDIA*) + warn "Обнаружена NVIDIA GPU." + warn "NVIDIA driver намеренно НЕ устанавливается автоматически." + ;; + + *) + info "Неизвестный GPU — используются Mesa/Xorg по умолчанию." + ;; + esac + else + warn "Не удалось определить GPU через lspci." + fi -# seatd -if getent group _seatd >/dev/null 2>&1; then - usermod -aG _seatd "$REAL_USER" - log "$REAL_USER добавлен в группу _seatd" else - warn "Группа _seatd не найдена." -fi - -# audio -if getent group audio >/dev/null 2>&1; then - usermod -aG audio "$REAL_USER" - log "$REAL_USER добавлен в группу audio" -fi - -# video -if getent group video >/dev/null 2>&1; then - usermod -aG video "$REAL_USER" - log "$REAL_USER добавлен в группу video" -fi - -# wheel -if getent group wheel >/dev/null 2>&1; then - usermod -aG wheel "$REAL_USER" - log "$REAL_USER добавлен в группу wheel" + warn "lspci не найден." fi # ============================================================================= -# ЭТАП 5. Системные сервисы +# Дополнительные пользовательские приложения # ============================================================================= -log "Этап 5/7: настройка runit..." +echo "" +log "Установка пользовательских приложений..." + +OPTIONAL_PACKAGES=" +dolphin +kate +firefox +kitty +mpv +ristretto +pavucontrol +easyeffects +gparted +htop +qdirstat +ffmpeg +libnotify +nodejs +npm +" + +for pkg in $OPTIONAL_PACKAGES; do + info "Установка: $pkg" + xbps-install -y "$pkg" || warn "Пропущен пакет: $pkg" +done + +# ============================================================================= +# ЭТАП 5 — Пользовательские группы +# ============================================================================= + +echo "" +log "Этап 5/8: настройка групп пользователя..." + +add_group() { + group="$1" + + if getent group "$group" >/dev/null 2>&1; then + usermod -aG "$group" "$REAL_USER" + log "$REAL_USER -> $group" + else + warn "Группа '$group' отсутствует." + fi +} + +add_group "_seatd" +add_group "audio" +add_group "video" +add_group "wheel" + +# ============================================================================= +# ЭТАП 6 — Runit services +# ============================================================================= + +echo "" +log "Этап 6/8: настройка системных сервисов runit..." enable_service() { svc="$1" @@ -266,45 +365,92 @@ enable_service() { fi if [ -L "/var/service/$svc" ]; then - log "Сервис уже включён: $svc" + log "Уже включён: $svc" return 0 fi ln -s "/etc/sv/$svc" "/var/service/$svc" - log "Включён сервис: $svc" + log "Включён: $svc" } -# Системный D-Bus enable_service dbus - -# Seat management для wlroots/Labwc enable_service seatd - -# Session management / XDG_RUNTIME_DIR enable_service elogind - -# Display manager enable_service sddm +# ============================================================================= +# ВАЖНО: +# # НЕ включаем: # # pipewire # wireplumber # -# Они должны работать в пользовательской графической сессии, -# а не как обычные system-wide runit services. - -# ============================================================================= -# ЭТАП 6. Wayland session для SDDM +# как system-wide runit services. +# +# Они должны работать в пользовательской сессии. # ============================================================================= -log "Этап 6/7: настройка Labwc + SDDM..." +if [ -L "/var/service/pipewire" ]; then + warn "Обнаружен system-wide pipewire service." + warn "Отключаю его — PipeWire будет работать в user session." + rm -f /var/service/pipewire +fi + +if [ -L "/var/service/wireplumber" ]; then + warn "Обнаружен system-wide wireplumber service." + warn "Отключаю его — WirePlumber будет работать в user session." + rm -f /var/service/wireplumber +fi + +# ============================================================================= +# elogind vs acpid +# ============================================================================= +# +# elogind сам занимается session/power management. +# Поэтому не включаем acpid. +# ============================================================================= + +if [ -L "/var/service/acpid" ]; then + warn "Отключаю acpid, поскольку используется elogind." + rm -f /var/service/acpid +fi + +# ============================================================================= +# ЭТАП 7 — SDDM +# ============================================================================= + +echo "" +log "Этап 7/8: настройка SDDM..." + +mkdir -p /etc/sddm.conf.d + +# ------------------------------------------------------------------------- +# ВАЖНО: +# +# НЕ заставляем SDDM работать как Wayland compositor. +# +# SDDM использует Xorg для своего login screen. +# +# После авторизации SDDM запускает Labwc как Wayland session. +# ------------------------------------------------------------------------- + +rm -f /etc/sddm.conf.d/10-wayland.conf + +cat > /etc/sddm.conf.d/10-display.conf << 'EOF' +[General] +DisplayServer=x11 +EOF + +log "SDDM настроен на X11/Xorg." + +# ============================================================================= +# Labwc Wayland session +# ============================================================================= mkdir -p /usr/share/wayland-sessions -SESSION_FILE="/usr/share/wayland-sessions/labwc.desktop" - -cat > "$SESSION_FILE" << 'EOF' +cat > /usr/share/wayland-sessions/labwc.desktop << 'EOF' [Desktop Entry] Name=Labwc Comment=Wayland window-stacking compositor @@ -313,161 +459,144 @@ Type=Application DesktopNames=labwc EOF -chmod 644 "$SESSION_FILE" +chmod 644 /usr/share/wayland-sessions/labwc.desktop -log "Создана SDDM-сессия: $SESSION_FILE" +log "Создана Wayland-сессия Labwc." # ============================================================================= -# SDDM configuration +# SDDM autologin НЕ включаем. # ============================================================================= -mkdir -p /etc/sddm.conf.d - -cat > /etc/sddm.conf.d/10-wayland.conf << 'EOF' -[General] -DisplayServer=wayland - -[Wayland] -SessionDir=/usr/share/wayland-sessions -EOF - -log "SDDM настроен на Wayland." +# Пользователь сам выбирает Labwc на экране SDDM. # ============================================================================= -# PipeWire ALSA +# ЭТАП 8 — Labwc config # ============================================================================= -if [ -d /usr/share/alsa/alsa.conf.d ]; then +echo "" +log "Этап 8/8: создание базовой конфигурации Labwc..." - mkdir -p /etc/alsa/conf.d +LABWC_DIR="$USER_HOME/.config/labwc" - if [ -f /usr/share/alsa/alsa.conf.d/50-pipewire.conf ]; then - ln -sf \ - /usr/share/alsa/alsa.conf.d/50-pipewire.conf \ - /etc/alsa/conf.d/50-pipewire.conf - fi +mkdir -p "$LABWC_DIR" - if [ -f /usr/share/alsa/alsa.conf.d/99-pipewire-default.conf ]; then - ln -sf \ - /usr/share/alsa/alsa.conf.d/99-pipewire-default.conf \ - /etc/alsa/conf.d/99-pipewire-default.conf - fi +# ------------------------------------------------------------------------- +# autostart +# ------------------------------------------------------------------------- - log "ALSA/PipeWire настроен." -fi - -# ============================================================================= -# Пользовательский Labwc config -# ============================================================================= - -USER_CONFIG="$USER_HOME/.config/labwc" - -if [ ! -d "$USER_CONFIG" ]; then - mkdir -p "$USER_CONFIG" - chown -R "$REAL_USER":"$(id -gn "$REAL_USER")" \ - "$USER_HOME/.config" - - log "Создан $USER_CONFIG" -else - log "$USER_CONFIG уже существует." -fi - -# ============================================================================= -# Минимальный autostart -# ============================================================================= - -AUTOSTART="$USER_CONFIG/autostart" +AUTOSTART="$LABWC_DIR/autostart" if [ ! -f "$AUTOSTART" ]; then cat > "$AUTOSTART" << 'EOF' #!/bin/sh +# --------------------------------------------------------- +# Labwc autostart +# --------------------------------------------------------- + # Waybar -waybar & +if command -v waybar >/dev/null 2>&1; then + waybar & +fi # Notification daemon -mako & +if command -v mako >/dev/null 2>&1; then + mako & +fi # PolicyKit authentication agent -if command -v /usr/libexec/polkit-gnome-authentication-agent-1 >/dev/null 2>&1; then +if [ -x /usr/libexec/polkit-gnome-authentication-agent-1 ]; then /usr/libexec/polkit-gnome-authentication-agent-1 & elif command -v polkit-gnome-authentication-agent-1 >/dev/null 2>&1; then polkit-gnome-authentication-agent-1 & fi - -# PipeWire / WirePlumber -# Они обычно активируются через user/session environment. EOF chmod +x "$AUTOSTART" - chown "$REAL_USER":"$(id -gn "$REAL_USER")" "$AUTOSTART" + log "Создан Labwc autostart." - log "Создан минимальный Labwc autostart." else - log "Существующий autostart не изменён." + info "Существующий Labwc autostart не изменён." fi # ============================================================================= -# Права на конфигурацию +# ALSA / PipeWire # ============================================================================= -chown -R "$REAL_USER":"$(id -gn "$REAL_USER")" \ +info "Настройка ALSA → PipeWire..." + +mkdir -p /etc/alsa/conf.d + +if [ -f /usr/share/alsa/alsa.conf.d/50-pipewire.conf ]; then + ln -sf \ + /usr/share/alsa/alsa.conf.d/50-pipewire.conf \ + /etc/alsa/conf.d/50-pipewire.conf +fi + +if [ -f /usr/share/alsa/alsa.conf.d/99-pipewire-default.conf ]; then + ln -sf \ + /usr/share/alsa/alsa.conf.d/99-pipewire-default.conf \ + /etc/alsa/conf.d/99-pipewire-default.conf +fi + +log "ALSA/PipeWire настроен." + +# ============================================================================= +# Права пользователя +# ============================================================================= + +chown -R "$REAL_USER":"$USER_GROUP" \ "$USER_HOME/.config" # ============================================================================= -# НЕ устанавливаем NVIDIA автоматически +# Проверка установки # ============================================================================= echo "" -info "Проверяем GPU..." +log "Проверка установленного ПО..." -if command -v lspci >/dev/null 2>&1; then - - GPU="$(lspci | grep -Ei 'VGA|3D|Display' || true)" - - if [ -n "$GPU" ]; then - echo "$GPU" - echo "" - - case "$GPU" in - - *NVIDIA*) - warn "Обнаружена NVIDIA." - warn "NVIDIA-драйвер НЕ устанавливался автоматически." - warn "Сначала определите поколение GPU." - ;; - - *AMD*) - log "Обнаружена AMD GPU." - ;; - - *Intel*) - log "Обнаружена Intel GPU." - ;; - - *) - info "GPU не удалось определить автоматически." - ;; - esac +check_command() { + cmd="$1" + if command -v "$cmd" >/dev/null 2>&1; then + log "$cmd: $(command -v "$cmd")" else - warn "GPU через lspci определить не удалось." + warn "$cmd: НЕ НАЙДЕН" fi +} +check_command labwc +check_command sddm +check_command Xorg +check_command dbus-run-session +check_command pipewire +check_command wireplumber + +# ============================================================================= +# Проверка session file +# ============================================================================= + +if [ -f /usr/share/wayland-sessions/labwc.desktop ]; then + log "Labwc session file: OK" else - warn "lspci отсутствует." + warn "Labwc session file отсутствует!" fi +# ============================================================================= +# Ожидание запуска runit services +# ============================================================================= + +echo "" +info "Ожидание запуска сервисов..." + +sleep 3 + # ============================================================================= # Проверка сервисов # ============================================================================= -log "Этап 7/7: проверка сервисов..." - -sleep 2 - check_service() { svc="$1" @@ -476,46 +605,33 @@ check_service() { return 0 fi - if sv status "$svc" 2>/dev/null | grep -q "run:"; then + if sv status "$svc" 2>/dev/null | grep -q '^run:'; then log "$svc: RUNNING" else - warn "$svc: включён, но НЕ RUNNING" + warn "$svc: НЕ ЗАПУЩЕН" sv status "$svc" 2>&1 || true fi } +echo "" +info "Статус системных сервисов:" + check_service dbus check_service seatd check_service elogind check_service sddm # ============================================================================= -# Проверка Labwc +# Проверка Xorg # ============================================================================= echo "" -info "Проверка установки Labwc..." +info "Проверка Xorg..." -if command -v labwc >/dev/null 2>&1; then - log "labwc найден: $(command -v labwc)" +if [ -x /usr/bin/X ]; then + log "Xorg найден: /usr/bin/X" else - warn "Команда labwc не найдена." -fi - -if command -v sddm >/dev/null 2>&1; then - log "sddm найден: $(command -v sddm)" -else - warn "Команда sddm не найдена." -fi - -# ============================================================================= -# Проверка Wayland session -# ============================================================================= - -if [ -f "$SESSION_FILE" ]; then - log "Wayland session существует: $SESSION_FILE" -else - warn "Wayland session НЕ найдена." + warn "Xorg /usr/bin/X не найден!" fi # ============================================================================= @@ -524,57 +640,96 @@ fi echo "" echo "============================================================" -printf "${GREEN}Установка завершена.${NC}\n" +printf "${GREEN}✓ УСТАНОВКА ЗАВЕРШЕНА${NC}\n" echo "============================================================" echo "" +echo "Архитектура:" +echo " SDDM -> Xorg" +echo " SDDM -> Labwc" +echo " Labwc -> Wayland" +echo "" + echo "Сервисы:" -echo " dbus: /var/service/dbus" -echo " seatd: /var/service/seatd" -echo " elogind: /var/service/elogind" -echo " sddm: /var/service/sddm" +echo " dbus" +echo " seatd" +echo " elogind" +echo " sddm" echo "" -echo "Labwc session:" -echo " $SESSION_FILE" +echo "Labwc:" +echo " $LABWC_DIR" echo "" -echo "Конфигурация:" -echo " $USER_CONFIG" +echo "SDDM session:" +echo " /usr/share/wayland-sessions/labwc.desktop" echo "" echo "============================================================" -echo " ВАЖНО" +echo " ЧТО ДЕЛАТЬ ДАЛЬШЕ" echo "============================================================" echo "" -echo "1. Перезагрузите компьютер:" + +echo "1. Перезагрузиться:" echo "" -echo " reboot" +echo " sudo reboot" echo "" -echo "2. После перезагрузки должен появиться SDDM." + +echo "2. Дождаться экрана SDDM." echo "" -echo "3. В SDDM выберите:" + +echo "3. Выбрать сессию:" echo "" echo " Labwc" echo "" -echo "4. Если SDDM НЕ появился, войдите в TTY:" + +echo "4. Войти под пользователем:" echo "" -echo " Ctrl+Alt+F2" +echo " $REAL_USER" echo "" -echo " и выполните:" + +echo "============================================================" +echo " ЕСЛИ ЧТО-ТО НЕ ЗАПУСТИЛОСЬ" +echo "============================================================" +echo "" + +echo "Перейти в TTY:" +echo "" +echo " Ctrl + Alt + F2" +echo "" + +echo "Проверить сервисы:" echo "" echo " sudo sv status dbus" echo " sudo sv status seatd" echo " sudo sv status elogind" echo " sudo sv status sddm" echo "" -echo "5. Логи SDDM:" + +echo "Проверить SDDM:" echo "" -echo " sudo sv status sddm" -echo " sudo tail -100 /var/log/sddm/current" +echo " ps aux | grep -E 'sddm|Xorg' | grep -v grep" echo "" -echo "6. Проверка GPU:" + +echo "Проверить Xorg:" +echo "" +echo " sudo tail -100 /var/log/Xorg.0.log" +echo "" + +echo "Проверить GPU:" echo "" echo " lspci -k -d ::03xx" echo "" -echo "============================================================" \ No newline at end of file + +echo "Проверить XDG_RUNTIME_DIR после входа:" +echo "" +echo " echo \"\$XDG_RUNTIME_DIR\"" +echo "" + +echo "============================================================" +echo "" + +warn "После добавления пользователя в группы требуется новая" +warn "login-сессия. Поэтому после установки ОБЯЗАТЕЛЬНО reboot." + +echo "" \ No newline at end of file