237 lines
6.2 KiB
Bash
237 lines
6.2 KiB
Bash
#!/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
|