This commit is contained in:
2026-09-06 21:33:27 +06:00
parent edaf7b7b14
commit fbcd3cc624
+68 -52
View File
@@ -1,11 +1,11 @@
#!/bin/sh #!/bin/sh
# #
# fix-sddm.sh — Alpine: SDDM + LabWC без getty-autologin # setup-sddm-labwc.sh
# Alpine Linux / OpenRC: SDDM + elogind + LabWC.
# #
# Запуск: # Запуск от root:
# su - # chmod +x setup-sddm-labwc.sh
# chmod +x fix-sddm.sh # ./setup-sddm-labwc.sh ivan
# ./fix-sddm.sh ivan
# #
set -eu set -eu
@@ -20,53 +20,55 @@ if [ "$(id -u)" -ne 0 ]; then
fi fi
if [ ! -f /etc/alpine-release ]; then if [ ! -f /etc/alpine-release ]; then
echo "[!] Нужен Alpine Linux." echo "[!] Этот скрипт только для Alpine Linux."
exit 1 exit 1
fi fi
if ! id "$USER_NAME" >/dev/null 2>&1; then if ! id "$USER_NAME" >/dev/null 2>&1; then
echo "[!] Пользователь не существует: $USER_NAME" echo "[!] Пользователь не найден: $USER_NAME"
exit 1 exit 1
fi fi
echo echo
echo "==================================================" echo "=================================================="
echo " Alpine: настройка SDDM + LabWC" echo " Alpine: SDDM + elogind + LabWC"
echo "==================================================" echo "=================================================="
echo
echo "[*] Пользователь: $USER_NAME" echo "[*] Пользователь: $USER_NAME"
echo "[*] Alpine: $(cat /etc/alpine-release)"
echo echo
# ------------------------------------------------------------ # ------------------------------------------------------------
# Пакеты # Пакеты
# ------------------------------------------------------------ # ------------------------------------------------------------
echo "[*] Установка SDDM и OpenRC-скриптов..." echo "[*] Обновление индекса APK..."
apk update apk update
apk add sddm sddm-openrc
echo "[*] Установка зависимостей display manager..."
apk add \
dbus \
seatd \
elogind \
elogind-openrc \
sddm \
sddm-openrc \
xorg-server \
mesa \
mesa-dri-gallium \
xf86-input-libinput
# ------------------------------------------------------------ # ------------------------------------------------------------
# Удаление старого getty-autologin # Удаление старых/неверных конфигов SDDM
# ------------------------------------------------------------ # ------------------------------------------------------------
echo "[*] Удаление старого autologin-wrapper..." echo "[*] Очистка старой конфигурации SDDM..."
rm -f /usr/local/sbin/autologin-login
# ВАЖНО:
# /etc/inittab намеренно НЕ меняем.
# kill -HUP 1 намеренно НЕ вызываем.
# Текущий tty остаётся доступным до перезагрузки.
# ------------------------------------------------------------
# SDDM config
# ------------------------------------------------------------
echo "[*] Настройка SDDM..."
mkdir -p /etc/sddm.conf.d mkdir -p /etc/sddm.conf.d
# Убираем созданные ранее ошибочные конфиги.
rm -f /etc/sddm.conf.d/wayland.conf rm -f /etc/sddm.conf.d/wayland.conf
rm -f /etc/sddm.conf.d/labwc.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' cat > /etc/sddm.conf.d/00-general.conf << 'EOF'
[General] [General]
@@ -79,10 +81,20 @@ EOF
chmod 644 /etc/sddm.conf.d/00-general.conf chmod 644 /etc/sddm.conf.d/00-general.conf
# ------------------------------------------------------------ # ------------------------------------------------------------
# Группы # Удаление старого getty-autologin wrapper
# ------------------------------------------------------------ # ------------------------------------------------------------
echo "[*] Проверка групп пользователя..." 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 for GROUP_NAME in wheel seat video input; do
if ! getent group "$GROUP_NAME" >/dev/null 2>&1; then if ! getent group "$GROUP_NAME" >/dev/null 2>&1; then
@@ -93,16 +105,16 @@ for GROUP_NAME in wheel seat video input; do
if id -nG "$USER_NAME" | tr ' ' '\n' | grep -qx "$GROUP_NAME"; then if id -nG "$USER_NAME" | tr ' ' '\n' | grep -qx "$GROUP_NAME"; then
echo "[+] $USER_NAME уже в группе $GROUP_NAME." echo "[+] $USER_NAME уже в группе $GROUP_NAME."
else else
echo "[*] Добавление $USER_NAME в $GROUP_NAME..." echo "[*] Добавление $USER_NAME в группу $GROUP_NAME..."
addgroup "$USER_NAME" "$GROUP_NAME" addgroup "$USER_NAME" "$GROUP_NAME"
fi fi
done done
# ------------------------------------------------------------ # ------------------------------------------------------------
# LabWC desktop session # Сессия LabWC в меню SDDM
# ------------------------------------------------------------ # ------------------------------------------------------------
echo "[*] Создание пункта сессии LabWC для SDDM..." echo "[*] Создание записи LabWC для SDDM..."
mkdir -p /usr/share/wayland-sessions mkdir -p /usr/share/wayland-sessions
@@ -119,7 +131,7 @@ EOF
chmod 644 /usr/share/wayland-sessions/labwc.desktop chmod 644 /usr/share/wayland-sessions/labwc.desktop
# ------------------------------------------------------------ # ------------------------------------------------------------
# LabWC environment # Конфигурация LabWC пользователя
# ------------------------------------------------------------ # ------------------------------------------------------------
echo "[*] Настройка LabWC..." echo "[*] Настройка LabWC..."
@@ -170,32 +182,29 @@ chmod 755 "$HOME_DIR/.config/labwc/autostart"
chown -R "$USER_NAME:$USER_NAME" "$HOME_DIR/.config" chown -R "$USER_NAME:$USER_NAME" "$HOME_DIR/.config"
# ------------------------------------------------------------ # ------------------------------------------------------------
# Удаление автозапуска LabWC из профиля # Удаление старого запуска LabWC из login shell
# ------------------------------------------------------------ # ------------------------------------------------------------
echo "[*] Отключение старого запуска LabWC из .profile..." echo "[*] Отключение старого запуска LabWC из .profile..."
if [ -f "$PROFILE" ] && grep -qF '# LABWC-AUTOSTART' "$PROFILE"; then if [ -f "$PROFILE" ] && grep -qF '# LABWC-AUTOSTART' "$PROFILE"; then
cp "$PROFILE" "$PROFILE.before-sddm-fix.bak" cp "$PROFILE" "$PROFILE.before-sddm.bak"
# Удаляет блок, начиная с маркера до конца файла.
# В исходном setup.sh этот блок был последним.
sed -i '/^# LABWC-AUTOSTART$/,$d' "$PROFILE" sed -i '/^# LABWC-AUTOSTART$/,$d' "$PROFILE"
chown "$USER_NAME:$USER_NAME" "$PROFILE" chown "$USER_NAME:$USER_NAME" "$PROFILE"
echo "[+] Старый блок LABWC-AUTOSTART удалён." echo "[+] LABWC-AUTOSTART удалён из .profile."
else else
echo "[+] Старого блока LABWC-AUTOSTART нет." echo "[+] Блока LABWC-AUTOSTART в .profile нет."
fi fi
# ------------------------------------------------------------ # ------------------------------------------------------------
# OpenRC autostart # OpenRC
# ------------------------------------------------------------ # ------------------------------------------------------------
echo "[*] Добавление служб в OpenRC..." echo "[*] Включение служб OpenRC..."
rc-update add dbus default 2>/dev/null || true rc-update add dbus default 2>/dev/null || true
rc-update add seatd 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 rc-update add sddm default 2>/dev/null || true
echo echo
@@ -204,19 +213,20 @@ echo " Проверка"
echo "==================================================" echo "=================================================="
echo echo
echo "[*] Пакеты:" echo "[*] Установленные пакеты:"
apk info -e sddm sddm-openrc || true apk info -e dbus seatd elogind elogind-openrc sddm sddm-openrc \
xorg-server mesa mesa-dri-gallium xf86-input-libinput || true
echo echo
echo "[*] Пользователь:" echo "[*] Группы пользователя:"
id "$USER_NAME" id "$USER_NAME"
echo echo
echo "[*] LabWC session:" echo "[*] Запись LabWC:"
ls -l /usr/share/wayland-sessions/labwc.desktop cat /usr/share/wayland-sessions/labwc.desktop
echo echo
echo "[*] DRM-устройства:" echo "[*] DRM:"
ls -la /dev/dri 2>&1 || true ls -la /dev/dri 2>&1 || true
echo echo
@@ -224,13 +234,19 @@ echo "=================================================="
echo " Готово" echo " Готово"
echo "==================================================" echo "=================================================="
echo echo
echo "[!] SDDM НЕ запускается в этом скрипте специально." echo "[!] В этом скрипте SDDM специально НЕ запускается."
echo "[!] Он будет запущен чисто после перезагрузки." echo "[!] Это нужно, чтобы не повторять проблему stale-процесса."
echo echo
echo "Выполни:" echo "Теперь выполни:"
echo echo
echo " reboot" echo " reboot"
echo echo
echo "После перезагрузки SDDM должен показать окно входа." echo "После перезагрузки порядок будет такой:"
echo "В меню сессий выбери: LabWC" echo " 1. dbus"
echo " 2. seatd"
echo " 3. elogind"
echo " 4. sddm"
echo echo
echo "В SDDM войди пользователем $USER_NAME"
echo "и в меню сессий выбери LabWC."
echo