From edaf7b7b14200d3ae396aec751f34d0e469640da Mon Sep 17 00:00:00 2001 From: s13bby Date: Sun, 6 Sep 2026 21:30:22 +0600 Subject: [PATCH] fix_ --- fix.sh | 273 +++++++++++++++++++-------------------------------------- 1 file changed, 88 insertions(+), 185 deletions(-) diff --git a/fix.sh b/fix.sh index ff31279..adf9866 100644 --- a/fix.sh +++ b/fix.sh @@ -1,54 +1,73 @@ #!/bin/sh # -# fix-sddm.sh -# Восстановление SDDM + LabWC на Alpine Linux/OpenRC. +# fix-sddm.sh — Alpine: SDDM + LabWC без getty-autologin # -# Запуск от root: +# Запуск: +# su - +# chmod +x fix-sddm.sh # ./fix-sddm.sh ivan # -set -u +set -eu USER_NAME="${1:-ivan}" HOME_DIR="/home/$USER_NAME" +PROFILE="$HOME_DIR/.profile" if [ "$(id -u)" -ne 0 ]; then - echo "[!] Запусти скрипт от root:" - echo " su -" - echo " ./fix-sddm.sh $USER_NAME" - exit 1 -fi - -if ! id "$USER_NAME" >/dev/null 2>&1; then - echo "[!] Пользователь не найден: $USER_NAME" + echo "[!] Запусти скрипт от root." exit 1 fi if [ ! -f /etc/alpine-release ]; then - echo "[!] Этот скрипт предназначен для Alpine Linux." + echo "[!] Нужен Alpine Linux." + exit 1 +fi + +if ! id "$USER_NAME" >/dev/null 2>&1; then + echo "[!] Пользователь не существует: $USER_NAME" exit 1 fi echo echo "==================================================" -echo " SDDM + LabWC recovery for Alpine Linux" +echo " Alpine: настройка SDDM + LabWC" echo "==================================================" -echo -echo "[*] User: $USER_NAME" -echo "[*] Home: $HOME_DIR" +echo "[*] Пользователь: $USER_NAME" echo -echo "[*] Проверка пакетов SDDM/OpenRC..." +# ------------------------------------------------------------ +# Пакеты +# ------------------------------------------------------------ + +echo "[*] Установка SDDM и OpenRC-скриптов..." apk update apk add sddm sddm-openrc -echo -echo "[*] Удаление старого неправильного конфига SDDM..." -rm -f /etc/sddm.conf.d/wayland.conf -rm -f /etc/sddm.conf.d/labwc.conf +# ------------------------------------------------------------ +# Удаление старого getty-autologin +# ------------------------------------------------------------ + +echo "[*] Удаление старого autologin-wrapper..." +rm -f /usr/local/sbin/autologin-login + +# ВАЖНО: +# /etc/inittab намеренно НЕ меняем. +# kill -HUP 1 намеренно НЕ вызываем. +# Текущий tty остаётся доступным до перезагрузки. + +# ------------------------------------------------------------ +# SDDM config +# ------------------------------------------------------------ + +echo "[*] Настройка SDDM..." mkdir -p /etc/sddm.conf.d +# Убираем созданные ранее ошибочные конфиги. +rm -f /etc/sddm.conf.d/wayland.conf +rm -f /etc/sddm.conf.d/labwc.conf + cat > /etc/sddm.conf.d/00-general.conf << 'EOF' [General] DisplayServer=x11 @@ -59,100 +78,31 @@ EOF chmod 644 /etc/sddm.conf.d/00-general.conf -echo "[+] Создан базовый конфиг SDDM." -echo "[+] Автологин выключен." +# ------------------------------------------------------------ +# Группы +# ------------------------------------------------------------ -echo -echo "[*] Удаление старого autologin-wrapper..." -rm -f /usr/local/sbin/autologin-login - -echo -echo "[*] Восстановление tty1 в /etc/inittab..." - -if [ -f /etc/inittab ]; then - - if [ ! -f /etc/inittab.before-sddm-fix.bak ]; then - cp /etc/inittab /etc/inittab.before-sddm-fix.bak - echo "[+] Создана резервная копия: /etc/inittab.before-sddm-fix.bak" - fi - - # Удаляем строку, созданную старым скриптом. - sed -i '\|/usr/local/sbin/autologin-login|d' /etc/inittab - - # Для SDDM tty1 лучше не занимать agetty. - # Оставляем tty2+ как аварийные консоли. - sed -i 's|^tty1::respawn:|#tty1::respawn:|' /etc/inittab - - kill -HUP 1 2>/dev/null || true - - echo "[+] Старый getty-autologin удалён." - echo "[+] tty1 освобождён для display manager." -else - echo "[!] /etc/inittab отсутствует; пропускаю." -fi - -echo -echo "[*] Удаление автозапуска LabWC из .profile..." - -PROFILE="$HOME_DIR/.profile" - -if [ -f "$PROFILE" ]; then - - if grep -qF '# LABWC-AUTOSTART' "$PROFILE"; then - - if [ ! -f "$PROFILE.before-sddm-fix.bak" ]; then - cp "$PROFILE" "$PROFILE.before-sddm-fix.bak" - fi - - # Удаляет блок до конца файла. - # Это безопасно, если LABWC-AUTOSTART является последним блоком, - # как в исходном setup-скрипте. - sed -i '/^# LABWC-AUTOSTART$/,$d' "$PROFILE" - - echo "[+] Блок LABWC-AUTOSTART удалён из $PROFILE." - else - echo "[+] В $PROFILE нет старого блока LABWC-AUTOSTART." - fi - -else - echo "[!] $PROFILE отсутствует; пропускаю." -fi - -echo -echo "[*] Удаление ручного XDG_RUNTIME_DIR из .profile..." - -if [ -f "$PROFILE" ] && grep -qF '# XDG-RUNTIME-DIR' "$PROFILE"; then - - if [ ! -f "$PROFILE.before-runtime-fix.bak" ]; then - cp "$PROFILE" "$PROFILE.before-runtime-fix.bak" - fi - - sed -i '/^# XDG-RUNTIME-DIR$/,/^fi$/d' "$PROFILE" - - echo "[+] Старый блок XDG-RUNTIME-DIR удалён." -fi - -echo -echo "[*] Настройка групп пользователя..." +echo "[*] Проверка групп пользователя..." for GROUP_NAME in wheel seat video input; do - if ! getent group "$GROUP_NAME" >/dev/null 2>&1; then - echo "[*] Создаю группу: $GROUP_NAME" + echo "[*] Создание группы: $GROUP_NAME" addgroup "$GROUP_NAME" fi if id -nG "$USER_NAME" | tr ' ' '\n' | grep -qx "$GROUP_NAME"; then - echo "[+] $USER_NAME уже состоит в группе $GROUP_NAME." + echo "[+] $USER_NAME уже в группе $GROUP_NAME." else - echo "[*] Добавляю $USER_NAME в группу $GROUP_NAME..." + echo "[*] Добавление $USER_NAME в $GROUP_NAME..." addgroup "$USER_NAME" "$GROUP_NAME" fi - done -echo -echo "[*] Создание desktop-файла LabWC..." +# ------------------------------------------------------------ +# LabWC desktop session +# ------------------------------------------------------------ + +echo "[*] Создание пункта сессии LabWC для SDDM..." mkdir -p /usr/share/wayland-sessions @@ -168,10 +118,11 @@ EOF chmod 644 /usr/share/wayland-sessions/labwc.desktop -echo "[+] Создан: /usr/share/wayland-sessions/labwc.desktop" +# ------------------------------------------------------------ +# LabWC environment +# ------------------------------------------------------------ -echo -echo "[*] Исправление LabWC environment..." +echo "[*] Настройка LabWC..." mkdir -p "$HOME_DIR/.config/labwc" @@ -187,11 +138,6 @@ SDL_VIDEODRIVER=wayland LIBSEAT_BACKEND=seatd EOF -echo "[+] environment создан." - -echo -echo "[*] Исправление LabWC autostart..." - cat > "$HOME_DIR/.config/labwc/autostart" << 'EOF' #!/bin/sh @@ -221,113 +167,70 @@ fi EOF chmod 755 "$HOME_DIR/.config/labwc/autostart" - chown -R "$USER_NAME:$USER_NAME" "$HOME_DIR/.config" -echo "[+] autostart создан." -echo "[+] Ручное создание XDG_RUNTIME_DIR в autostart удалено." +# ------------------------------------------------------------ +# Удаление автозапуска LabWC из профиля +# ------------------------------------------------------------ -echo -echo "[*] Остановка старых процессов SDDM..." +echo "[*] Отключение старого запуска LabWC из .profile..." -rc-service sddm stop 2>/dev/null || true -sleep 2 +if [ -f "$PROFILE" ] && grep -qF '# LABWC-AUTOSTART' "$PROFILE"; then + cp "$PROFILE" "$PROFILE.before-sddm-fix.bak" -echo "[*] Найденные процессы до очистки:" -ps -eo pid,ppid,user,stat,comm,args | - grep -E '[s]ddm|[s]upervise-daemon' || true + # Удаляет блок, начиная с маркера до конца файла. + # В исходном setup.sh этот блок был последним. + sed -i '/^# LABWC-AUTOSTART$/,$d' "$PROFILE" -# Останавливаем сам SDDM и supervisor, если тот был запущен -# специально для SDDM. -pkill -TERM -f '/usr/bin/sddm' 2>/dev/null || true -pkill -TERM -f 'supervise-daemon.*sddm' 2>/dev/null || true -sleep 3 + chown "$USER_NAME:$USER_NAME" "$PROFILE" + echo "[+] Старый блок LABWC-AUTOSTART удалён." +else + echo "[+] Старого блока LABWC-AUTOSTART нет." +fi -pkill -KILL -f '/usr/bin/sddm' 2>/dev/null || true -pkill -KILL -f 'supervise-daemon.*sddm' 2>/dev/null || true -sleep 2 +# ------------------------------------------------------------ +# OpenRC autostart +# ------------------------------------------------------------ -echo "[*] Проверка процессов после очистки:" -ps -eo pid,ppid,user,stat,comm,args | - grep -E '[s]ddm|[s]upervise-daemon' || true - -echo -echo "[*] Очистка stale PID-файлов SDDM..." - -rm -f /run/sddm.pid -rm -f /run/sddm/sddm.pid -rm -f /run/openrc/started/sddm -rm -f /run/openrc/daemons/sddm - -echo -echo "[*] Включение служб OpenRC..." +echo "[*] Добавление служб в OpenRC..." rc-update add dbus default 2>/dev/null || true rc-update add seatd default 2>/dev/null || true rc-update add sddm default 2>/dev/null || true -echo -echo "[*] Запуск dbus..." -rc-service dbus start 2>/dev/null || true - -echo "[*] Запуск seatd..." -rc-service seatd start 2>/dev/null || true - echo echo "==================================================" -echo " Проверка перед запуском SDDM" +echo " Проверка" echo "==================================================" -echo -echo "[*] DRM:" -ls -la /dev/dri 2>&1 || true - -echo -echo "[*] SDDM init script:" -ls -l /etc/init.d/sddm 2>&1 || true - echo echo "[*] Пакеты:" -apk info -e sddm sddm-openrc 2>&1 || true +apk info -e sddm sddm-openrc || true echo -echo "[*] Группы пользователя:" +echo "[*] Пользователь:" id "$USER_NAME" echo -echo "==================================================" -echo " Попытка запуска SDDM" -echo "==================================================" - -rc-service sddm start || true +echo "[*] LabWC session:" +ls -l /usr/share/wayland-sessions/labwc.desktop echo -echo "[*] Статус SDDM:" -rc-service sddm status || true - -echo -echo "[*] Процессы SDDM:" -ps -eo pid,ppid,user,stat,comm,args | - grep -E '[s]ddm|[s]upervise-daemon' || true +echo "[*] DRM-устройства:" +ls -la /dev/dri 2>&1 || true echo echo "==================================================" echo " Готово" echo "==================================================" echo -echo "[*] Перезагрузи виртуальную машину:" +echo "[!] SDDM НЕ запускается в этом скрипте специально." +echo "[!] Он будет запущен чисто после перезагрузки." +echo +echo "Выполни:" echo echo " reboot" echo -echo "[*] После перезагрузки:" -echo " 1. Должен появиться экран SDDM." -echo " 2. Войди как: $USER_NAME" -echo " 3. В меню сессий выбери LabWC." -echo -echo "[!] Если SDDM снова не покажет графический экран," -echo "[!] скопируй вывод этого скрипта и результат:" -echo -echo " ls -la /dev/dri" -echo " lspci -nn | grep -Ei 'vga|3d|display'" -echo " logread | tail -150" +echo "После перезагрузки SDDM должен показать окно входа." +echo "В меню сессий выбери: LabWC" echo