#!/bin/sh # # fix-sddm.sh — Alpine: SDDM + LabWC без getty-autologin # # Запуск: # su - # chmod +x fix-sddm.sh # ./fix-sddm.sh ivan # set -eu USER_NAME="${1:-ivan}" HOME_DIR="/home/$USER_NAME" PROFILE="$HOME_DIR/.profile" if [ "$(id -u)" -ne 0 ]; then echo "[!] Запусти скрипт от root." exit 1 fi if [ ! -f /etc/alpine-release ]; then echo "[!] Нужен Alpine Linux." exit 1 fi if ! id "$USER_NAME" >/dev/null 2>&1; then echo "[!] Пользователь не существует: $USER_NAME" exit 1 fi echo echo "==================================================" echo " Alpine: настройка SDDM + LabWC" echo "==================================================" echo "[*] Пользователь: $USER_NAME" echo # ------------------------------------------------------------ # Пакеты # ------------------------------------------------------------ echo "[*] Установка SDDM и OpenRC-скриптов..." apk update apk add sddm sddm-openrc # ------------------------------------------------------------ # Удаление старого 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 [Autologin] Relogin=false EOF chmod 644 /etc/sddm.conf.d/00-general.conf # ------------------------------------------------------------ # Группы # ------------------------------------------------------------ echo "[*] Проверка групп пользователя..." for GROUP_NAME in wheel seat video input; do if ! getent group "$GROUP_NAME" >/dev/null 2>&1; then echo "[*] Создание группы: $GROUP_NAME" addgroup "$GROUP_NAME" fi if id -nG "$USER_NAME" | tr ' ' '\n' | grep -qx "$GROUP_NAME"; then echo "[+] $USER_NAME уже в группе $GROUP_NAME." else echo "[*] Добавление $USER_NAME в $GROUP_NAME..." addgroup "$USER_NAME" "$GROUP_NAME" fi done # ------------------------------------------------------------ # LabWC desktop session # ------------------------------------------------------------ echo "[*] Создание пункта сессии LabWC для SDDM..." mkdir -p /usr/share/wayland-sessions cat > /usr/share/wayland-sessions/labwc.desktop << 'EOF' [Desktop Entry] Name=LabWC Comment=LabWC Wayland compositor Exec=labwc TryExec=labwc Type=Application DesktopNames=labwc EOF chmod 644 /usr/share/wayland-sessions/labwc.desktop # ------------------------------------------------------------ # LabWC environment # ------------------------------------------------------------ echo "[*] Настройка LabWC..." mkdir -p "$HOME_DIR/.config/labwc" 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 cat > "$HOME_DIR/.config/labwc/autostart" << 'EOF' #!/bin/sh if command -v nm-applet >/dev/null 2>&1; then nm-applet & fi if command -v waybar >/dev/null 2>&1; then waybar & fi if command -v mako >/dev/null 2>&1; then mako & fi if command -v pipewire >/dev/null 2>&1 && ! pgrep -x pipewire >/dev/null 2>&1 then pipewire & fi if command -v wireplumber >/dev/null 2>&1 && ! pgrep -x wireplumber >/dev/null 2>&1 then wireplumber & fi EOF chmod 755 "$HOME_DIR/.config/labwc/autostart" chown -R "$USER_NAME:$USER_NAME" "$HOME_DIR/.config" # ------------------------------------------------------------ # Удаление автозапуска LabWC из профиля # ------------------------------------------------------------ echo "[*] Отключение старого запуска LabWC из .profile..." if [ -f "$PROFILE" ] && grep -qF '# LABWC-AUTOSTART' "$PROFILE"; then cp "$PROFILE" "$PROFILE.before-sddm-fix.bak" # Удаляет блок, начиная с маркера до конца файла. # В исходном setup.sh этот блок был последним. sed -i '/^# LABWC-AUTOSTART$/,$d' "$PROFILE" chown "$USER_NAME:$USER_NAME" "$PROFILE" echo "[+] Старый блок LABWC-AUTOSTART удалён." else echo "[+] Старого блока LABWC-AUTOSTART нет." fi # ------------------------------------------------------------ # OpenRC autostart # ------------------------------------------------------------ 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 "==================================================" echo " Проверка" echo "==================================================" echo echo "[*] Пакеты:" apk info -e sddm sddm-openrc || true echo echo "[*] Пользователь:" id "$USER_NAME" echo echo "[*] LabWC session:" ls -l /usr/share/wayland-sessions/labwc.desktop echo echo "[*] DRM-устройства:" ls -la /dev/dri 2>&1 || true echo echo "==================================================" echo " Готово" echo "==================================================" echo echo "[!] SDDM НЕ запускается в этом скрипте специально." echo "[!] Он будет запущен чисто после перезагрузки." echo echo "Выполни:" echo echo " reboot" echo echo "После перезагрузки SDDM должен показать окно входа." echo "В меню сессий выбери: LabWC" echo