Files
labwc-alpine/fix.sh
T

252 lines
6.7 KiB
Bash
Raw Normal View History

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