fix
This commit is contained in:
@@ -0,0 +1,333 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# fix-sddm.sh
|
||||||
|
# Восстановление SDDM + LabWC на Alpine Linux/OpenRC.
|
||||||
|
#
|
||||||
|
# Запуск от root:
|
||||||
|
# ./fix-sddm.sh ivan
|
||||||
|
#
|
||||||
|
|
||||||
|
set -u
|
||||||
|
|
||||||
|
USER_NAME="${1:-ivan}"
|
||||||
|
HOME_DIR="/home/$USER_NAME"
|
||||||
|
|
||||||
|
if [ "$(id -u)" -ne 0 ]; then
|
||||||
|
echo "[!] Запусти скрипт от root:"
|
||||||
|
echo " su -"
|
||||||
|
echo " ./fix-sddm.sh $USER_NAME"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! id "$USER_NAME" >/dev/null 2>&1; then
|
||||||
|
echo "[!] Пользователь не найден: $USER_NAME"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f /etc/alpine-release ]; then
|
||||||
|
echo "[!] Этот скрипт предназначен для Alpine Linux."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "=================================================="
|
||||||
|
echo " SDDM + LabWC recovery for Alpine Linux"
|
||||||
|
echo "=================================================="
|
||||||
|
echo
|
||||||
|
echo "[*] User: $USER_NAME"
|
||||||
|
echo "[*] Home: $HOME_DIR"
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo "[*] Проверка пакетов SDDM/OpenRC..."
|
||||||
|
apk update
|
||||||
|
apk add sddm sddm-openrc
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "[*] Удаление старого неправильного конфига SDDM..."
|
||||||
|
rm -f /etc/sddm.conf.d/wayland.conf
|
||||||
|
rm -f /etc/sddm.conf.d/labwc.conf
|
||||||
|
|
||||||
|
mkdir -p /etc/sddm.conf.d
|
||||||
|
|
||||||
|
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 "[+] Создан базовый конфиг SDDM."
|
||||||
|
echo "[+] Автологин выключен."
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "[*] Удаление старого autologin-wrapper..."
|
||||||
|
rm -f /usr/local/sbin/autologin-login
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "[*] Восстановление tty1 в /etc/inittab..."
|
||||||
|
|
||||||
|
if [ -f /etc/inittab ]; then
|
||||||
|
|
||||||
|
if [ ! -f /etc/inittab.before-sddm-fix.bak ]; then
|
||||||
|
cp /etc/inittab /etc/inittab.before-sddm-fix.bak
|
||||||
|
echo "[+] Создана резервная копия: /etc/inittab.before-sddm-fix.bak"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Удаляем строку, созданную старым скриптом.
|
||||||
|
sed -i '\|/usr/local/sbin/autologin-login|d' /etc/inittab
|
||||||
|
|
||||||
|
# Для SDDM tty1 лучше не занимать agetty.
|
||||||
|
# Оставляем tty2+ как аварийные консоли.
|
||||||
|
sed -i 's|^tty1::respawn:|#tty1::respawn:|' /etc/inittab
|
||||||
|
|
||||||
|
kill -HUP 1 2>/dev/null || true
|
||||||
|
|
||||||
|
echo "[+] Старый getty-autologin удалён."
|
||||||
|
echo "[+] tty1 освобождён для display manager."
|
||||||
|
else
|
||||||
|
echo "[!] /etc/inittab отсутствует; пропускаю."
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "[*] Удаление автозапуска LabWC из .profile..."
|
||||||
|
|
||||||
|
PROFILE="$HOME_DIR/.profile"
|
||||||
|
|
||||||
|
if [ -f "$PROFILE" ]; then
|
||||||
|
|
||||||
|
if grep -qF '# LABWC-AUTOSTART' "$PROFILE"; then
|
||||||
|
|
||||||
|
if [ ! -f "$PROFILE.before-sddm-fix.bak" ]; then
|
||||||
|
cp "$PROFILE" "$PROFILE.before-sddm-fix.bak"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Удаляет блок до конца файла.
|
||||||
|
# Это безопасно, если LABWC-AUTOSTART является последним блоком,
|
||||||
|
# как в исходном setup-скрипте.
|
||||||
|
sed -i '/^# LABWC-AUTOSTART$/,$d' "$PROFILE"
|
||||||
|
|
||||||
|
echo "[+] Блок LABWC-AUTOSTART удалён из $PROFILE."
|
||||||
|
else
|
||||||
|
echo "[+] В $PROFILE нет старого блока LABWC-AUTOSTART."
|
||||||
|
fi
|
||||||
|
|
||||||
|
else
|
||||||
|
echo "[!] $PROFILE отсутствует; пропускаю."
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "[*] Удаление ручного XDG_RUNTIME_DIR из .profile..."
|
||||||
|
|
||||||
|
if [ -f "$PROFILE" ] && grep -qF '# XDG-RUNTIME-DIR' "$PROFILE"; then
|
||||||
|
|
||||||
|
if [ ! -f "$PROFILE.before-runtime-fix.bak" ]; then
|
||||||
|
cp "$PROFILE" "$PROFILE.before-runtime-fix.bak"
|
||||||
|
fi
|
||||||
|
|
||||||
|
sed -i '/^# XDG-RUNTIME-DIR$/,/^fi$/d' "$PROFILE"
|
||||||
|
|
||||||
|
echo "[+] Старый блок XDG-RUNTIME-DIR удалён."
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
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
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "[*] Создание desktop-файла LabWC..."
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
echo "[+] Создан: /usr/share/wayland-sessions/labwc.desktop"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "[*] Исправление LabWC environment..."
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
echo "[+] environment создан."
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "[*] Исправление LabWC autostart..."
|
||||||
|
|
||||||
|
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"
|
||||||
|
|
||||||
|
echo "[+] autostart создан."
|
||||||
|
echo "[+] Ручное создание XDG_RUNTIME_DIR в autostart удалено."
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "[*] Остановка старых процессов SDDM..."
|
||||||
|
|
||||||
|
rc-service sddm stop 2>/dev/null || true
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
echo "[*] Найденные процессы до очистки:"
|
||||||
|
ps -eo pid,ppid,user,stat,comm,args |
|
||||||
|
grep -E '[s]ddm|[s]upervise-daemon' || true
|
||||||
|
|
||||||
|
# Останавливаем сам SDDM и supervisor, если тот был запущен
|
||||||
|
# специально для SDDM.
|
||||||
|
pkill -TERM -f '/usr/bin/sddm' 2>/dev/null || true
|
||||||
|
pkill -TERM -f 'supervise-daemon.*sddm' 2>/dev/null || true
|
||||||
|
sleep 3
|
||||||
|
|
||||||
|
pkill -KILL -f '/usr/bin/sddm' 2>/dev/null || true
|
||||||
|
pkill -KILL -f 'supervise-daemon.*sddm' 2>/dev/null || true
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
echo "[*] Проверка процессов после очистки:"
|
||||||
|
ps -eo pid,ppid,user,stat,comm,args |
|
||||||
|
grep -E '[s]ddm|[s]upervise-daemon' || true
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "[*] Очистка stale PID-файлов SDDM..."
|
||||||
|
|
||||||
|
rm -f /run/sddm.pid
|
||||||
|
rm -f /run/sddm/sddm.pid
|
||||||
|
rm -f /run/openrc/started/sddm
|
||||||
|
rm -f /run/openrc/daemons/sddm
|
||||||
|
|
||||||
|
echo
|
||||||
|
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 "[*] Запуск dbus..."
|
||||||
|
rc-service dbus start 2>/dev/null || true
|
||||||
|
|
||||||
|
echo "[*] Запуск seatd..."
|
||||||
|
rc-service seatd start 2>/dev/null || true
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "=================================================="
|
||||||
|
echo " Проверка перед запуском SDDM"
|
||||||
|
echo "=================================================="
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "[*] DRM:"
|
||||||
|
ls -la /dev/dri 2>&1 || true
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "[*] SDDM init script:"
|
||||||
|
ls -l /etc/init.d/sddm 2>&1 || true
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "[*] Пакеты:"
|
||||||
|
apk info -e sddm sddm-openrc 2>&1 || true
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "[*] Группы пользователя:"
|
||||||
|
id "$USER_NAME"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "=================================================="
|
||||||
|
echo " Попытка запуска SDDM"
|
||||||
|
echo "=================================================="
|
||||||
|
|
||||||
|
rc-service sddm start || true
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "[*] Статус SDDM:"
|
||||||
|
rc-service sddm status || true
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "[*] Процессы SDDM:"
|
||||||
|
ps -eo pid,ppid,user,stat,comm,args |
|
||||||
|
grep -E '[s]ddm|[s]upervise-daemon' || true
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "=================================================="
|
||||||
|
echo " Готово"
|
||||||
|
echo "=================================================="
|
||||||
|
echo
|
||||||
|
echo "[*] Перезагрузи виртуальную машину:"
|
||||||
|
echo
|
||||||
|
echo " reboot"
|
||||||
|
echo
|
||||||
|
echo "[*] После перезагрузки:"
|
||||||
|
echo " 1. Должен появиться экран SDDM."
|
||||||
|
echo " 2. Войди как: $USER_NAME"
|
||||||
|
echo " 3. В меню сессий выбери LabWC."
|
||||||
|
echo
|
||||||
|
echo "[!] Если SDDM снова не покажет графический экран,"
|
||||||
|
echo "[!] скопируй вывод этого скрипта и результат:"
|
||||||
|
echo
|
||||||
|
echo " ls -la /dev/dri"
|
||||||
|
echo " lspci -nn | grep -Ei 'vga|3d|display'"
|
||||||
|
echo " logread | tail -150"
|
||||||
|
echo
|
||||||
Reference in New Issue
Block a user