Files
labwc-alpine/fix.sh
T
2026-09-06 21:30:22 +06:00

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