#!/bin/sh # # setup-sddm-labwc.sh # Alpine Linux / OpenRC: SDDM + elogind + LabWC. # # Запуск от root: # chmod +x setup-sddm-labwc.sh # ./setup-sddm-labwc.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 + elogind + LabWC" echo "==================================================" echo echo "[*] Пользователь: $USER_NAME" echo "[*] Alpine: $(cat /etc/alpine-release)" echo # ------------------------------------------------------------ # Пакеты # ------------------------------------------------------------ echo "[*] Обновление индекса APK..." apk update echo "[*] Установка зависимостей display manager..." apk add \ dbus \ seatd \ elogind \ elogind-openrc \ sddm \ sddm-openrc \ xorg-server \ mesa \ mesa-dri-gallium \ xf86-input-libinput # ------------------------------------------------------------ # Удаление старых/неверных конфигов SDDM # ------------------------------------------------------------ echo "[*] Очистка старой конфигурации SDDM..." mkdir -p /etc/sddm.conf.d rm -f /etc/sddm.conf.d/wayland.conf rm -f /etc/sddm.conf.d/labwc.conf rm -f /etc/sddm.conf.d/00-general.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 # ------------------------------------------------------------ # Удаление старого getty-autologin wrapper # ------------------------------------------------------------ echo "[*] Удаление старого getty-autologin wrapper..." rm -f /usr/local/sbin/autologin-login # /etc/inittab намеренно не меняем. # kill -HUP 1 намеренно не вызываем. # ------------------------------------------------------------ # Группы пользователя # ------------------------------------------------------------ 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 в меню SDDM # ------------------------------------------------------------ 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 пользователя # ------------------------------------------------------------ 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 из login shell # ------------------------------------------------------------ echo "[*] Отключение старого запуска LabWC из .profile..." if [ -f "$PROFILE" ] && grep -qF '# LABWC-AUTOSTART' "$PROFILE"; then cp "$PROFILE" "$PROFILE.before-sddm.bak" sed -i '/^# LABWC-AUTOSTART$/,$d' "$PROFILE" chown "$USER_NAME:$USER_NAME" "$PROFILE" echo "[+] LABWC-AUTOSTART удалён из .profile." else echo "[+] Блока LABWC-AUTOSTART в .profile нет." fi # ------------------------------------------------------------ # OpenRC # ------------------------------------------------------------ echo "[*] Включение служб OpenRC..." rc-update add dbus default 2>/dev/null || true rc-update add seatd default 2>/dev/null || true rc-update add elogind default 2>/dev/null || true rc-update add sddm default 2>/dev/null || true echo echo "==================================================" echo " Проверка" echo "==================================================" echo echo "[*] Установленные пакеты:" apk info -e dbus seatd elogind elogind-openrc sddm sddm-openrc \ xorg-server mesa mesa-dri-gallium xf86-input-libinput || true echo echo "[*] Группы пользователя:" id "$USER_NAME" echo echo "[*] Запись LabWC:" cat /usr/share/wayland-sessions/labwc.desktop echo echo "[*] DRM:" ls -la /dev/dri 2>&1 || true echo echo "==================================================" echo " Готово" echo "==================================================" echo echo "[!] В этом скрипте SDDM специально НЕ запускается." echo "[!] Это нужно, чтобы не повторять проблему stale-процесса." echo echo "Теперь выполни:" echo echo " reboot" echo echo "После перезагрузки порядок будет такой:" echo " 1. dbus" echo " 2. seatd" echo " 3. elogind" echo " 4. sddm" echo echo "В SDDM войди пользователем $USER_NAME" echo "и в меню сессий выбери LabWC." echo