and and another one update
This commit is contained in:
@@ -379,3 +379,958 @@ echo "=================================================="
|
||||
if id "$USER_NAME" >/dev/null 2>&1 then
|
||||
:
|
||||
fi
|
||||
|
||||
Стоп — здесь я не хочу оставлять тебе поломанный кусок. В sh нельзя писать if id ... then в таком виде. Поэтому ниже даю окончательную цельную версию, а не предлагаю собирать её из двух частей:
|
||||
|
||||
#!/bin/sh
|
||||
|
||||
# ============================================================
|
||||
# LabWC Alpine Setup Script
|
||||
# Version 10
|
||||
#
|
||||
# Запуск:
|
||||
#
|
||||
# ./setup.sh
|
||||
# ./setup.sh ivan
|
||||
#
|
||||
# Можно запускать от root ИЛИ обычного пользователя.
|
||||
#
|
||||
# Скрипт автоматически использует sudo.
|
||||
#
|
||||
# ============================================================
|
||||
|
||||
set -eu
|
||||
|
||||
USER_NAME="${1:-ivan}"
|
||||
|
||||
HOME_DIR="/home/$USER_NAME"
|
||||
PROFILE="$HOME_DIR/.profile"
|
||||
|
||||
ZENITH_REPO="https://zenithcode.duckdns.org/s13bby/zenith-cli.git"
|
||||
ZENITH_DIR="$HOME_DIR/zenith-cli"
|
||||
LOCAL_BIN="$HOME_DIR/.local/bin"
|
||||
|
||||
# ============================================================
|
||||
# Абсолютный путь к скрипту
|
||||
# ============================================================
|
||||
|
||||
case "$0" in
|
||||
/*)
|
||||
SCRIPT_PATH="$0"
|
||||
;;
|
||||
*)
|
||||
SCRIPT_PATH="$(pwd)/$0"
|
||||
;;
|
||||
esac
|
||||
|
||||
# ============================================================
|
||||
# Проверка имени
|
||||
# ============================================================
|
||||
|
||||
case "$USER_NAME" in
|
||||
""|*[!a-zA-Z0-9_-]*)
|
||||
echo "[!] Некорректное имя пользователя: $USER_NAME"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# ============================================================
|
||||
# Автоматический sudo
|
||||
# ============================================================
|
||||
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
|
||||
echo
|
||||
echo "=================================================="
|
||||
echo "[*] Запущено от пользователя: $(id -un)"
|
||||
echo "[*] Нужны root-права."
|
||||
echo "=================================================="
|
||||
echo
|
||||
|
||||
if ! command -v sudo >/dev/null 2>&1; then
|
||||
|
||||
echo "[!] sudo не установлен."
|
||||
echo
|
||||
echo "[!] Выполните один раз от root:"
|
||||
echo
|
||||
echo " apk add sudo"
|
||||
echo
|
||||
exit 1
|
||||
|
||||
fi
|
||||
|
||||
exec sudo "$SCRIPT_PATH" "$@"
|
||||
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# Информация
|
||||
# ============================================================
|
||||
|
||||
echo
|
||||
echo "=================================================="
|
||||
echo " LabWC Alpine Setup Script v10"
|
||||
echo "=================================================="
|
||||
echo
|
||||
echo "[*] User: $USER_NAME"
|
||||
echo "[*] Home: $HOME_DIR"
|
||||
echo "[*] Alpine: $(cat /etc/alpine-release 2>/dev/null || echo unknown)"
|
||||
echo
|
||||
|
||||
# ============================================================
|
||||
# Проверка Alpine
|
||||
# ============================================================
|
||||
|
||||
if [ ! -f /etc/alpine-release ]; then
|
||||
|
||||
echo "[!] Это не Alpine Linux."
|
||||
exit 1
|
||||
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# Проверка repositories
|
||||
# ============================================================
|
||||
|
||||
if [ ! -f /etc/apk/repositories ]; then
|
||||
|
||||
echo "[!] /etc/apk/repositories отсутствует."
|
||||
exit 1
|
||||
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# Функции
|
||||
# ============================================================
|
||||
|
||||
package_exists() {
|
||||
PACKAGE="$1"
|
||||
|
||||
apk search -x "$PACKAGE" 2>/dev/null |
|
||||
grep -Eq "^${PACKAGE}(-[0-9].*)?$"
|
||||
}
|
||||
|
||||
|
||||
install_required() {
|
||||
PACKAGE="$1"
|
||||
|
||||
echo
|
||||
echo "[*] Проверка обязательного пакета: $PACKAGE"
|
||||
|
||||
if apk info -e "$PACKAGE" >/dev/null 2>&1; then
|
||||
|
||||
echo "[+] $PACKAGE уже установлен."
|
||||
return 0
|
||||
|
||||
fi
|
||||
|
||||
if ! package_exists "$PACKAGE"; then
|
||||
|
||||
echo
|
||||
echo "=================================================="
|
||||
echo "[!!!] ОШИБКА"
|
||||
echo "=================================================="
|
||||
echo
|
||||
echo "[!] Обязательный пакет отсутствует:"
|
||||
echo
|
||||
echo " $PACKAGE"
|
||||
echo
|
||||
echo "[!] Alpine:"
|
||||
cat /etc/alpine-release
|
||||
echo
|
||||
echo "[!] Репозитории:"
|
||||
cat /etc/apk/repositories
|
||||
echo
|
||||
|
||||
exit 1
|
||||
|
||||
fi
|
||||
|
||||
apk add "$PACKAGE"
|
||||
}
|
||||
|
||||
|
||||
install_optional() {
|
||||
PACKAGE="$1"
|
||||
|
||||
echo
|
||||
echo "[*] Необязательный пакет: $PACKAGE"
|
||||
|
||||
if apk info -e "$PACKAGE" >/dev/null 2>&1; then
|
||||
|
||||
echo "[+] Уже установлен."
|
||||
return 0
|
||||
|
||||
fi
|
||||
|
||||
if package_exists "$PACKAGE"; then
|
||||
|
||||
apk add "$PACKAGE"
|
||||
|
||||
echo "[+] Установлен."
|
||||
|
||||
else
|
||||
|
||||
echo "[!] Пакет отсутствует."
|
||||
echo "[!] Пропускаем."
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
add_user_group() {
|
||||
GROUP_NAME="$1"
|
||||
|
||||
if ! getent group "$GROUP_NAME" >/dev/null 2>&1; then
|
||||
|
||||
echo "[!] Группа $GROUP_NAME отсутствует."
|
||||
return 0
|
||||
|
||||
fi
|
||||
|
||||
if id -nG "$USER_NAME" 2>/dev/null |
|
||||
tr ' ' '\n' |
|
||||
grep -qx "$GROUP_NAME"
|
||||
then
|
||||
|
||||
echo "[+] $USER_NAME уже в группе $GROUP_NAME."
|
||||
|
||||
else
|
||||
|
||||
echo "[*] Добавление $USER_NAME в группу $GROUP_NAME..."
|
||||
|
||||
addgroup "$USER_NAME" "$GROUP_NAME"
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
enable_service() {
|
||||
SERVICE="$1"
|
||||
|
||||
echo
|
||||
echo "[*] Служба: $SERVICE"
|
||||
|
||||
if ! command -v rc-service >/dev/null 2>&1; then
|
||||
|
||||
echo "[!] OpenRC недоступен."
|
||||
return 0
|
||||
|
||||
fi
|
||||
|
||||
if rc-service "$SERVICE" status >/dev/null 2>&1; then
|
||||
|
||||
echo "[+] $SERVICE уже запущен."
|
||||
|
||||
else
|
||||
|
||||
echo "[*] Запуск $SERVICE..."
|
||||
|
||||
rc-service "$SERVICE" start 2>/dev/null || true
|
||||
|
||||
fi
|
||||
|
||||
rc-update add "$SERVICE" default 2>/dev/null || true
|
||||
}
|
||||
|
||||
|
||||
check_command() {
|
||||
NAME="$1"
|
||||
COMMAND="$2"
|
||||
|
||||
printf '%-25s' "$NAME:"
|
||||
|
||||
if command -v "$COMMAND" >/dev/null 2>&1; then
|
||||
echo "OK"
|
||||
else
|
||||
echo "ERROR"
|
||||
fi
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# Community
|
||||
# ============================================================
|
||||
|
||||
echo
|
||||
echo "=================================================="
|
||||
echo "[*] Репозиторий community"
|
||||
echo "=================================================="
|
||||
|
||||
if grep -qE '^[[:space:]]*[^#[:space:]].*/community/?[[:space:]]*$' \
|
||||
/etc/apk/repositories
|
||||
then
|
||||
|
||||
echo "[+] community уже включён."
|
||||
|
||||
elif grep -qE '^[[:space:]]*#.*\/community/?[[:space:]]*$' \
|
||||
/etc/apk/repositories
|
||||
then
|
||||
|
||||
echo "[*] Раскомментирование community..."
|
||||
|
||||
sed -i \
|
||||
's|^[[:space:]]*#\(.*\/community/?[[:space:]]*\)$|\1|' \
|
||||
/etc/apk/repositories
|
||||
|
||||
else
|
||||
|
||||
echo "[!] community не найден."
|
||||
echo
|
||||
cat /etc/apk/repositories
|
||||
echo
|
||||
|
||||
exit 1
|
||||
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# APK update
|
||||
# ============================================================
|
||||
|
||||
echo
|
||||
echo "[*] apk update..."
|
||||
|
||||
apk update
|
||||
|
||||
# ============================================================
|
||||
# Пользователь
|
||||
# ============================================================
|
||||
|
||||
echo
|
||||
echo "=================================================="
|
||||
echo "[*] Пользователь"
|
||||
echo "=================================================="
|
||||
|
||||
if id "$USER_NAME" >/dev/null 2>&1; then
|
||||
|
||||
echo "[+] $USER_NAME уже существует."
|
||||
|
||||
else
|
||||
|
||||
echo "[*] Создание $USER_NAME..."
|
||||
|
||||
adduser -D "$USER_NAME"
|
||||
|
||||
echo
|
||||
echo "[!] Задайте пароль для $USER_NAME."
|
||||
passwd "$USER_NAME"
|
||||
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# Базовые пакеты
|
||||
# ============================================================
|
||||
|
||||
echo
|
||||
echo "=================================================="
|
||||
echo "[*] Базовые пакеты"
|
||||
echo "=================================================="
|
||||
|
||||
install_required sudo
|
||||
install_required nano
|
||||
install_required git
|
||||
install_required bash
|
||||
install_required build-base
|
||||
|
||||
# ============================================================
|
||||
# Sudo
|
||||
# ============================================================
|
||||
|
||||
echo
|
||||
echo "=================================================="
|
||||
echo "[*] Настройка sudo"
|
||||
echo "=================================================="
|
||||
|
||||
if [ -d /etc/sudoers.d ]; then
|
||||
|
||||
cat > /etc/sudoers.d/wheel << 'EOF'
|
||||
%wheel ALL=(ALL) ALL
|
||||
EOF
|
||||
|
||||
chmod 440 /etc/sudoers.d/wheel
|
||||
|
||||
else
|
||||
|
||||
if ! grep -qE '^%wheel[[:space:]]+ALL=\(ALL\)[[:space:]]+ALL' \
|
||||
/etc/sudoers
|
||||
then
|
||||
|
||||
echo '%wheel ALL=(ALL) ALL' >> /etc/sudoers
|
||||
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# Группы
|
||||
# ============================================================
|
||||
|
||||
echo
|
||||
echo "=================================================="
|
||||
echo "[*] Группы"
|
||||
echo "=================================================="
|
||||
|
||||
add_user_group wheel
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# seat
|
||||
#
|
||||
# ВАЖНО:
|
||||
# seatd — имя программы/демона.
|
||||
# seat — группа.
|
||||
#
|
||||
# НЕ добавляем пользователя в группу "seatd".
|
||||
# ------------------------------------------------------------
|
||||
|
||||
if ! getent group seat >/dev/null 2>&1; then
|
||||
|
||||
echo "[*] Группа seat отсутствует."
|
||||
echo "[*] Создание группы seat..."
|
||||
|
||||
addgroup seat
|
||||
|
||||
fi
|
||||
|
||||
add_user_group seat
|
||||
|
||||
# ============================================================
|
||||
# Wayland / graphics
|
||||
# ============================================================
|
||||
|
||||
echo
|
||||
echo "=================================================="
|
||||
echo "[*] Wayland / graphics"
|
||||
echo "=================================================="
|
||||
|
||||
# НЕ используем mesa-dri.
|
||||
install_required mesa
|
||||
install_required libinput
|
||||
install_required seatd
|
||||
install_required dbus
|
||||
install_required polkit
|
||||
|
||||
# ============================================================
|
||||
# zenith-cli dependencies
|
||||
# ============================================================
|
||||
|
||||
echo
|
||||
echo "=================================================="
|
||||
echo "[*] zenith-cli dependencies"
|
||||
echo "=================================================="
|
||||
|
||||
install_required cmake
|
||||
install_required curl-dev
|
||||
install_required opencv-dev
|
||||
|
||||
# ============================================================
|
||||
# Desktop
|
||||
# ============================================================
|
||||
|
||||
echo
|
||||
echo "=================================================="
|
||||
echo "[*] Desktop"
|
||||
echo "=================================================="
|
||||
|
||||
install_required labwc
|
||||
install_required alacritty
|
||||
install_required waybar
|
||||
install_required mako
|
||||
install_required swaybg
|
||||
install_required wofi
|
||||
install_required font-noto
|
||||
install_required font-dejavu
|
||||
install_required wl-clipboard
|
||||
install_required xdg-desktop-portal
|
||||
install_required pipewire
|
||||
install_required wireplumber
|
||||
install_required alsa-utils
|
||||
install_required networkmanager
|
||||
install_required pcmanfm
|
||||
install_required firefox
|
||||
install_required swaylock
|
||||
|
||||
# ============================================================
|
||||
# Необязательные пакеты
|
||||
# ============================================================
|
||||
|
||||
echo
|
||||
echo "=================================================="
|
||||
echo "[*] Необязательные пакеты"
|
||||
echo "=================================================="
|
||||
|
||||
# GTK portal может отсутствовать в некоторых конфигурациях.
|
||||
install_optional xdg-desktop-portal-gtk
|
||||
|
||||
# network-manager-applet может отсутствовать в текущей ветке.
|
||||
#
|
||||
# Он НЕ нужен для работы NetworkManager.
|
||||
# Поэтому не ломаем установку из-за него.
|
||||
install_optional network-manager-applet
|
||||
|
||||
# ============================================================
|
||||
# OpenRC
|
||||
# ============================================================
|
||||
|
||||
echo
|
||||
echo "=================================================="
|
||||
echo "[*] OpenRC"
|
||||
echo "=================================================="
|
||||
|
||||
enable_service seatd
|
||||
enable_service dbus
|
||||
enable_service networkmanager
|
||||
|
||||
# ============================================================
|
||||
# LabWC configuration
|
||||
# ============================================================
|
||||
|
||||
echo
|
||||
echo "=================================================="
|
||||
echo "[*] Конфигурация LabWC"
|
||||
echo "=================================================="
|
||||
|
||||
mkdir -p "$HOME_DIR/.config/labwc"
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# environment
|
||||
# ------------------------------------------------------------
|
||||
|
||||
cat > "$HOME_DIR/.config/labwc/environment" << 'EOF'
|
||||
XDG_CURRENT_DESKTOP=labwc
|
||||
XDG_SESSION_DESKTOP=labwc
|
||||
XDG_SESSION_TYPE=wayland
|
||||
|
||||
MOZ_ENABLE_WAYLAND=1
|
||||
QT_QPA_PLATFORM=wayland
|
||||
SDL_VIDEODRIVER=wayland
|
||||
|
||||
LIBSEAT_BACKEND=seatd
|
||||
EOF
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# autostart
|
||||
# ------------------------------------------------------------
|
||||
|
||||
cat > "$HOME_DIR/.config/labwc/autostart" << 'EOF'
|
||||
#!/bin/sh
|
||||
|
||||
# ============================================================
|
||||
# Runtime directory
|
||||
# ============================================================
|
||||
|
||||
if [ -z "${XDG_RUNTIME_DIR:-}" ]; then
|
||||
export XDG_RUNTIME_DIR="/tmp/user-$(id -u)"
|
||||
fi
|
||||
|
||||
if [ ! -d "$XDG_RUNTIME_DIR" ]; then
|
||||
mkdir -p "$XDG_RUNTIME_DIR"
|
||||
chmod 700 "$XDG_RUNTIME_DIR"
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# NetworkManager applet
|
||||
#
|
||||
# Запускаем ТОЛЬКО если он реально установлен.
|
||||
# ============================================================
|
||||
|
||||
if command -v nm-applet >/dev/null 2>&1; then
|
||||
nm-applet &
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# Waybar
|
||||
# ============================================================
|
||||
|
||||
if command -v waybar >/dev/null 2>&1; then
|
||||
waybar &
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# Mako
|
||||
# ============================================================
|
||||
|
||||
if command -v mako >/dev/null 2>&1; then
|
||||
mako &
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# PipeWire
|
||||
# ============================================================
|
||||
|
||||
if command -v pipewire >/dev/null 2>&1; then
|
||||
|
||||
if ! pgrep -x pipewire >/dev/null 2>&1; then
|
||||
pipewire &
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# WirePlumber
|
||||
# ============================================================
|
||||
|
||||
if command -v wireplumber >/dev/null 2>&1; then
|
||||
|
||||
if ! pgrep -x wireplumber >/dev/null 2>&1; then
|
||||
wireplumber &
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# Wallpaper
|
||||
# ============================================================
|
||||
|
||||
if command -v swaybg >/dev/null 2>&1 &&
|
||||
[ -f /usr/share/backgrounds/alpine/alpine-wallpaper.png ]
|
||||
then
|
||||
|
||||
swaybg \
|
||||
-i /usr/share/backgrounds/alpine/alpine-wallpaper.png \
|
||||
-m fill &
|
||||
|
||||
fi
|
||||
EOF
|
||||
|
||||
chmod +x "$HOME_DIR/.config/labwc/autostart"
|
||||
|
||||
# ============================================================
|
||||
# zenith-cli
|
||||
# ============================================================
|
||||
|
||||
echo
|
||||
echo "=================================================="
|
||||
echo "[*] zenith-cli"
|
||||
echo "=================================================="
|
||||
|
||||
if [ -d "$ZENITH_DIR/.git" ]; then
|
||||
|
||||
echo "[+] Репозиторий уже существует."
|
||||
|
||||
su - "$USER_NAME" -c "
|
||||
set -eu
|
||||
cd '$ZENITH_DIR'
|
||||
git pull --ff-only
|
||||
"
|
||||
|
||||
else
|
||||
|
||||
echo "[*] Клонирование..."
|
||||
|
||||
su - "$USER_NAME" -c "
|
||||
set -eu
|
||||
git clone '$ZENITH_REPO' '$ZENITH_DIR'
|
||||
"
|
||||
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# Проверка исходников
|
||||
# ============================================================
|
||||
|
||||
if [ ! -f "$ZENITH_DIR/build.sh" ]; then
|
||||
|
||||
echo
|
||||
echo "[!] build.sh не найден:"
|
||||
echo " $ZENITH_DIR/build.sh"
|
||||
exit 1
|
||||
|
||||
fi
|
||||
|
||||
if [ ! -f "$ZENITH_DIR/CMakeLists.txt" ]; then
|
||||
|
||||
echo
|
||||
echo "[!] CMakeLists.txt не найден:"
|
||||
echo " $ZENITH_DIR/CMakeLists.txt"
|
||||
exit 1
|
||||
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# Сборка
|
||||
# ============================================================
|
||||
|
||||
echo
|
||||
echo "=================================================="
|
||||
echo "[*] Сборка zenith-cli"
|
||||
echo "=================================================="
|
||||
|
||||
su - "$USER_NAME" -c "
|
||||
set -eu
|
||||
|
||||
cd '$ZENITH_DIR'
|
||||
|
||||
chmod +x build.sh
|
||||
|
||||
./build.sh
|
||||
|
||||
if [ ! -f ./zenith-cli ]; then
|
||||
|
||||
echo '[!] zenith-cli не найден после сборки.'
|
||||
|
||||
exit 1
|
||||
|
||||
fi
|
||||
|
||||
chmod +x ./zenith-cli
|
||||
|
||||
mkdir -p '$LOCAL_BIN'
|
||||
|
||||
cp ./zenith-cli '$LOCAL_BIN/zenith-cli'
|
||||
|
||||
chmod +x '$LOCAL_BIN/zenith-cli'
|
||||
|
||||
echo '[+] zenith-cli установлен.'
|
||||
"
|
||||
|
||||
# ============================================================
|
||||
# PATH
|
||||
# ============================================================
|
||||
|
||||
echo
|
||||
echo "=================================================="
|
||||
echo "[*] PATH"
|
||||
echo "=================================================="
|
||||
|
||||
touch "$PROFILE"
|
||||
|
||||
if ! grep -qF 'export PATH="$HOME/.local/bin:$PATH"' "$PROFILE"; then
|
||||
|
||||
cat >> "$PROFILE" << 'EOF'
|
||||
|
||||
# User local binaries
|
||||
export PATH="$HOME/.local/bin:$PATH"
|
||||
EOF
|
||||
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# XDG_RUNTIME_DIR
|
||||
# ============================================================
|
||||
|
||||
if ! grep -qF '# XDG-RUNTIME-DIR' "$PROFILE"; then
|
||||
|
||||
cat >> "$PROFILE" << 'EOF'
|
||||
|
||||
# XDG-RUNTIME-DIR
|
||||
|
||||
if [ -z "${XDG_RUNTIME_DIR:-}" ]; then
|
||||
export XDG_RUNTIME_DIR="/tmp/user-$(id -u)"
|
||||
fi
|
||||
|
||||
if [ ! -d "$XDG_RUNTIME_DIR" ]; then
|
||||
mkdir -p "$XDG_RUNTIME_DIR"
|
||||
chmod 700 "$XDG_RUNTIME_DIR"
|
||||
fi
|
||||
EOF
|
||||
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# Автологин tty1
|
||||
# ============================================================
|
||||
|
||||
echo
|
||||
echo "=================================================="
|
||||
echo "[*] Автологин tty1"
|
||||
echo "=================================================="
|
||||
|
||||
if [ -f /etc/inittab ]; then
|
||||
|
||||
if [ ! -f /etc/inittab.bak ]; then
|
||||
|
||||
cp /etc/inittab /etc/inittab.bak
|
||||
|
||||
fi
|
||||
|
||||
if grep -q '^tty1::respawn:/sbin/getty' /etc/inittab; then
|
||||
|
||||
sed -i \
|
||||
"s|^tty1::respawn:/sbin/getty.*|tty1::respawn:/sbin/getty -a $USER_NAME 38400 tty1|" \
|
||||
/etc/inittab
|
||||
|
||||
elif ! grep -q '^tty1::respawn:' /etc/inittab; then
|
||||
|
||||
echo \
|
||||
"tty1::respawn:/sbin/getty -a $USER_NAME 38400 tty1" \
|
||||
>> /etc/inittab
|
||||
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
echo "[!] /etc/inittab отсутствует."
|
||||
echo "[!] Автологин не настроен."
|
||||
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# Автозапуск LabWC
|
||||
# ============================================================
|
||||
|
||||
echo
|
||||
echo "=================================================="
|
||||
echo "[*] Автозапуск LabWC"
|
||||
echo "=================================================="
|
||||
|
||||
if ! grep -qF '# LABWC-AUTOSTART' "$PROFILE"; then
|
||||
|
||||
cat >> "$PROFILE" << 'EOF'
|
||||
|
||||
# LABWC-AUTOSTART
|
||||
|
||||
if [ "$(tty 2>/dev/null)" = "/dev/tty1" ] &&
|
||||
[ -z "${WAYLAND_DISPLAY:-}" ]; then
|
||||
|
||||
export XDG_SESSION_TYPE=wayland
|
||||
export XDG_CURRENT_DESKTOP=labwc
|
||||
export XDG_SESSION_DESKTOP=labwc
|
||||
export LIBSEAT_BACKEND=seatd
|
||||
|
||||
exec dbus-run-session -- labwc
|
||||
|
||||
fi
|
||||
EOF
|
||||
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# Права
|
||||
# ============================================================
|
||||
|
||||
echo
|
||||
echo "=================================================="
|
||||
echo "[*] Права"
|
||||
echo "=================================================="
|
||||
|
||||
if [ -d "$HOME_DIR/.config" ]; then
|
||||
|
||||
chown -R "$USER_NAME:$USER_NAME" \
|
||||
"$HOME_DIR/.config"
|
||||
|
||||
fi
|
||||
|
||||
if [ -f "$PROFILE" ]; then
|
||||
|
||||
chown "$USER_NAME:$USER_NAME" \
|
||||
"$PROFILE"
|
||||
|
||||
fi
|
||||
|
||||
if [ -d "$HOME_DIR/.local" ]; then
|
||||
|
||||
chown -R "$USER_NAME:$USER_NAME" \
|
||||
"$HOME_DIR/.local"
|
||||
|
||||
fi
|
||||
|
||||
if [ -d "$ZENITH_DIR" ]; then
|
||||
|
||||
chown -R "$USER_NAME:$USER_NAME" \
|
||||
"$ZENITH_DIR"
|
||||
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# Финальная проверка
|
||||
# ============================================================
|
||||
|
||||
echo
|
||||
echo "=================================================="
|
||||
echo " ФИНАЛЬНАЯ ПРОВЕРКА"
|
||||
echo "=================================================="
|
||||
echo
|
||||
|
||||
echo "[*] Пользователь:"
|
||||
id "$USER_NAME"
|
||||
|
||||
echo
|
||||
|
||||
printf '%-25s' "wheel:"
|
||||
if id -nG "$USER_NAME" |
|
||||
tr ' ' '\n' |
|
||||
grep -qx wheel
|
||||
then
|
||||
echo "OK"
|
||||
else
|
||||
echo "ERROR"
|
||||
fi
|
||||
|
||||
printf '%-25s' "seat:"
|
||||
if id -nG "$USER_NAME" |
|
||||
tr ' ' '\n' |
|
||||
grep -qx seat
|
||||
then
|
||||
echo "OK"
|
||||
else
|
||||
echo "ERROR"
|
||||
fi
|
||||
|
||||
echo
|
||||
|
||||
check_command "seatd" "seatd"
|
||||
check_command "LabWC" "labwc"
|
||||
check_command "Waybar" "waybar"
|
||||
check_command "PipeWire" "pipewire"
|
||||
check_command "WirePlumber" "wireplumber"
|
||||
check_command "NetworkManager" "nmcli"
|
||||
check_command "D-Bus" "dbus-run-session"
|
||||
check_command "Bash" "bash"
|
||||
check_command "CMake" "cmake"
|
||||
|
||||
echo
|
||||
|
||||
printf '%-25s' "OpenCV:"
|
||||
if apk info -e opencv-dev >/dev/null 2>&1; then
|
||||
echo "OK"
|
||||
else
|
||||
echo "ERROR"
|
||||
fi
|
||||
|
||||
printf '%-25s' "nm-applet:"
|
||||
if command -v nm-applet >/dev/null 2>&1; then
|
||||
echo "OK"
|
||||
else
|
||||
echo "OPTIONAL / SKIPPED"
|
||||
fi
|
||||
|
||||
printf '%-25s' "zenith-cli:"
|
||||
if [ -x "$LOCAL_BIN/zenith-cli" ]; then
|
||||
echo "OK"
|
||||
else
|
||||
echo "ERROR"
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "=================================================="
|
||||
echo " УСТАНОВКА ЗАВЕРШЕНА"
|
||||
echo "=================================================="
|
||||
echo
|
||||
echo "[+] Пользователь: $USER_NAME"
|
||||
echo "[+] LabWC установлен."
|
||||
echo "[+] NetworkManager установлен."
|
||||
echo "[+] seatd установлен."
|
||||
echo "[+] PipeWire установлен."
|
||||
echo "[+] zenith-cli установлен."
|
||||
echo
|
||||
echo "[!] network-manager-applet не является обязательным."
|
||||
echo "[!] Если его нет — NetworkManager всё равно работает."
|
||||
echo
|
||||
echo "[!] Перезагрузка:"
|
||||
echo
|
||||
echo " reboot"
|
||||
echo
|
||||
echo "После перезагрузки:"
|
||||
echo
|
||||
echo " 1. Автоматический вход $USER_NAME"
|
||||
echo " 2. Запуск LabWC"
|
||||
echo " 3. Waybar"
|
||||
echo " 4. Mako"
|
||||
echo " 5. PipeWire / WirePlumber"
|
||||
echo " 6. NetworkManager"
|
||||
echo
|
||||
echo "zenith-cli:"
|
||||
echo
|
||||
echo " zenith-cli"
|
||||
echo
|
||||
echo "=================================================="
|
||||
Reference in New Issue
Block a user