еще один апдейт для void
This commit is contained in:
+439
-284
@@ -1,26 +1,52 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# Void Linux + Labwc + SDDM installer
|
# Void Linux + SDDM + Labwc
|
||||||
|
# =============================================================================
|
||||||
|
#
|
||||||
|
# Целевая схема:
|
||||||
|
#
|
||||||
|
# BIOS/UEFI
|
||||||
|
# |
|
||||||
|
# v
|
||||||
|
# runit
|
||||||
|
# |
|
||||||
|
# +---- dbus
|
||||||
|
# |
|
||||||
|
# +---- seatd
|
||||||
|
# |
|
||||||
|
# +---- elogind
|
||||||
|
# |
|
||||||
|
# +---- sddm
|
||||||
|
# |
|
||||||
|
# +---- Xorg
|
||||||
|
# |
|
||||||
|
# v
|
||||||
|
# SDDM
|
||||||
|
# |
|
||||||
|
# v
|
||||||
|
# Labwc (Wayland)
|
||||||
|
#
|
||||||
|
# Подходит для:
|
||||||
|
# - чистой установки Void Linux
|
||||||
|
# - KVM/QEMU + QXL
|
||||||
|
# - KVM/QEMU + VirtIO GPU
|
||||||
|
# - Intel
|
||||||
|
# - AMD
|
||||||
|
#
|
||||||
|
# NVIDIA намеренно НЕ настраивается автоматически.
|
||||||
#
|
#
|
||||||
# Запуск:
|
# Запуск:
|
||||||
# sudo sh void-labwc-install.sh
|
|
||||||
#
|
#
|
||||||
# Цель:
|
# sudo sh void-labwc-install.sh
|
||||||
# - Wayland
|
|
||||||
# - Labwc
|
|
||||||
# - SDDM
|
|
||||||
# - seatd
|
|
||||||
# - elogind
|
|
||||||
# - D-Bus
|
|
||||||
# - PipeWire/WirePlumber в пользовательской сессии
|
|
||||||
#
|
#
|
||||||
# ВАЖНО:
|
|
||||||
# Скрипт НЕ устанавливает NVIDIA-драйвер автоматически.
|
|
||||||
# Драйвер GPU лучше определить отдельно.
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
set -eu
|
set -eu
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# Цвета / вывод
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
RED='\033[0;31m'
|
RED='\033[0;31m'
|
||||||
GREEN='\033[0;32m'
|
GREEN='\033[0;32m'
|
||||||
YELLOW='\033[1;33m'
|
YELLOW='\033[1;33m'
|
||||||
@@ -44,21 +70,18 @@ error() {
|
|||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
run() {
|
|
||||||
"$@" || error "Команда завершилась с ошибкой: $*"
|
|
||||||
}
|
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# Проверка root
|
# Проверка root
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
if [ "$(id -u)" -ne 0 ]; then
|
if [ "$(id -u)" -ne 0 ]; then
|
||||||
error "Запусти скрипт через sudo:
|
error "Скрипт необходимо запускать через sudo:
|
||||||
|
|
||||||
sudo sh $0"
|
sudo sh $0"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# Определение пользователя
|
# Определение обычного пользователя
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
REAL_USER="${SUDO_USER:-}"
|
REAL_USER="${SUDO_USER:-}"
|
||||||
@@ -66,77 +89,122 @@ REAL_USER="${SUDO_USER:-}"
|
|||||||
if [ -z "$REAL_USER" ] || [ "$REAL_USER" = "root" ]; then
|
if [ -z "$REAL_USER" ] || [ "$REAL_USER" = "root" ]; then
|
||||||
error "Не удалось определить обычного пользователя.
|
error "Не удалось определить обычного пользователя.
|
||||||
|
|
||||||
Запусти так:
|
Запусти скрипт так:
|
||||||
|
|
||||||
sudo sh $0
|
sudo sh $0
|
||||||
|
|
||||||
а не через обычный root shell."
|
а не из root shell."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! id "$REAL_USER" >/dev/null 2>&1; then
|
if ! id "$REAL_USER" >/dev/null 2>&1; then
|
||||||
error "Пользователь $REAL_USER не существует."
|
error "Пользователь '$REAL_USER' не существует."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
USER_UID="$(id -u "$REAL_USER")"
|
||||||
|
USER_GID="$(id -g "$REAL_USER")"
|
||||||
|
USER_GROUP="$(id -gn "$REAL_USER")"
|
||||||
USER_HOME="$(getent passwd "$REAL_USER" | cut -d: -f6)"
|
USER_HOME="$(getent passwd "$REAL_USER" | cut -d: -f6)"
|
||||||
|
|
||||||
if [ -z "$USER_HOME" ] || [ ! -d "$USER_HOME" ]; then
|
if [ -z "$USER_HOME" ] || [ ! -d "$USER_HOME" ]; then
|
||||||
error "Не удалось определить HOME пользователя $REAL_USER."
|
error "Не удалось определить HOME пользователя '$REAL_USER'."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "============================================================"
|
echo "============================================================"
|
||||||
echo " Void Linux + Labwc + SDDM installer"
|
echo " Void Linux + SDDM + Labwc installer"
|
||||||
echo "============================================================"
|
echo "============================================================"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Пользователь: $REAL_USER"
|
echo "Пользователь : $REAL_USER"
|
||||||
echo "HOME: $USER_HOME"
|
echo "UID : $USER_UID"
|
||||||
|
echo "HOME : $USER_HOME"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# ЭТАП 1. Репозитории
|
# Проверка архитектуры
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
log "Этап 1/7: настройка репозиториев..."
|
info "Архитектура системы: $(uname -m)"
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# ЭТАП 1 — Репозитории
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
log "Этап 1/8: настройка репозиториев..."
|
||||||
|
|
||||||
|
# Nonfree нужен для части firmware/драйверов и некоторых пакетов.
|
||||||
|
if xbps-query -Rs '^void-repo-nonfree$' 2>/dev/null | \
|
||||||
|
grep -q 'void-repo-nonfree'; then
|
||||||
|
|
||||||
|
log "void-repo-nonfree доступен."
|
||||||
|
|
||||||
if ! xbps-query -Rs '^void-repo-nonfree$' 2>/dev/null | grep -q void-repo-nonfree; then
|
|
||||||
xbps-install -Sy void-repo-nonfree || \
|
|
||||||
warn "Не удалось установить void-repo-nonfree."
|
|
||||||
else
|
else
|
||||||
log "void-repo-nonfree уже доступен."
|
info "Устанавливаю void-repo-nonfree..."
|
||||||
|
xbps-install -Sy void-repo-nonfree
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# ЭТАП 2. Обновление системы
|
# ЭТАП 2 — Обновление системы
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
log "Этап 2/7: обновление системы..."
|
echo ""
|
||||||
|
log "Этап 2/8: обновление системы..."
|
||||||
|
|
||||||
run xbps-install -Syu
|
xbps-install -Syu
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# ЭТАП 3. Основные пакеты
|
# ЭТАП 3 — Базовые пакеты
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
log "Этап 3/7: установка графического стека..."
|
echo ""
|
||||||
|
log "Этап 3/8: установка базовой системы..."
|
||||||
|
|
||||||
PACKAGES="
|
BASE_PACKAGES="
|
||||||
labwc
|
base-system
|
||||||
sddm
|
|
||||||
seatd
|
|
||||||
elogind
|
|
||||||
dbus
|
dbus
|
||||||
|
elogind
|
||||||
|
seatd
|
||||||
|
sudo
|
||||||
|
ca-certificates
|
||||||
|
curl
|
||||||
|
wget
|
||||||
|
tar
|
||||||
|
unzip
|
||||||
|
zip
|
||||||
|
p7zip
|
||||||
|
unar
|
||||||
|
fuse
|
||||||
|
fuse-common
|
||||||
|
xdg-utils
|
||||||
|
"
|
||||||
|
|
||||||
xorg-minimal
|
for pkg in $BASE_PACKAGES; do
|
||||||
|
info "Установка: $pkg"
|
||||||
|
xbps-install -y "$pkg" || warn "Не удалось установить $pkg"
|
||||||
|
done
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# ЭТАП 4 — Графический стек
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
log "Этап 4/8: установка графического стека..."
|
||||||
|
|
||||||
|
GRAPHICS_PACKAGES="
|
||||||
|
xorg
|
||||||
xorg-server-xwayland
|
xorg-server-xwayland
|
||||||
|
|
||||||
mesa-dri
|
mesa-dri
|
||||||
|
|
||||||
|
sddm
|
||||||
|
labwc
|
||||||
|
|
||||||
waybar
|
waybar
|
||||||
|
wofi
|
||||||
|
mako
|
||||||
swaylock
|
swaylock
|
||||||
swayidle
|
swayidle
|
||||||
swaybg
|
swaybg
|
||||||
mako
|
|
||||||
wofi
|
|
||||||
wl-clipboard
|
wl-clipboard
|
||||||
cliphist
|
cliphist
|
||||||
grim
|
grim
|
||||||
@@ -146,10 +214,6 @@ xdg-desktop-portal
|
|||||||
xdg-desktop-portal-wlr
|
xdg-desktop-portal-wlr
|
||||||
xdg-desktop-portal-gtk
|
xdg-desktop-portal-gtk
|
||||||
|
|
||||||
pipewire
|
|
||||||
wireplumber
|
|
||||||
alsa-pipewire
|
|
||||||
|
|
||||||
polkit
|
polkit
|
||||||
polkit-gnome
|
polkit-gnome
|
||||||
|
|
||||||
@@ -158,35 +222,9 @@ qt6-wayland
|
|||||||
qt5ct
|
qt5ct
|
||||||
qt6ct
|
qt6ct
|
||||||
|
|
||||||
dolphin
|
pipewire
|
||||||
kate
|
wireplumber
|
||||||
firefox
|
alsa-pipewire
|
||||||
kitty
|
|
||||||
mpv
|
|
||||||
ristretto
|
|
||||||
pavucontrol
|
|
||||||
easyeffects
|
|
||||||
gparted
|
|
||||||
htop
|
|
||||||
qdirstat
|
|
||||||
|
|
||||||
curl
|
|
||||||
wget
|
|
||||||
tar
|
|
||||||
unar
|
|
||||||
unzip
|
|
||||||
zip
|
|
||||||
p7zip
|
|
||||||
|
|
||||||
nodejs
|
|
||||||
npm
|
|
||||||
|
|
||||||
ffmpeg
|
|
||||||
libnotify
|
|
||||||
xdg-utils
|
|
||||||
fuse
|
|
||||||
fuse-common
|
|
||||||
ca-certificates
|
|
||||||
|
|
||||||
fontconfig
|
fontconfig
|
||||||
noto-fonts-ttf
|
noto-fonts-ttf
|
||||||
@@ -200,62 +238,123 @@ adwaita-icon-theme
|
|||||||
linux-firmware
|
linux-firmware
|
||||||
"
|
"
|
||||||
|
|
||||||
# Установка по одному.
|
for pkg in $GRAPHICS_PACKAGES; do
|
||||||
#
|
info "Установка: $pkg"
|
||||||
# Это специально сделано вместо одного xargs:
|
xbps-install -y "$pkg" || warn "Не удалось установить $pkg"
|
||||||
# если один необязательный пакет отсутствует в репозитории,
|
|
||||||
# это не должно ломать весь графический стек.
|
|
||||||
|
|
||||||
for pkg in $PACKAGES; do
|
|
||||||
if xbps-query -Rs "^${pkg}$" 2>/dev/null | grep -q "$pkg"; then
|
|
||||||
if xbps-query -p pkgver "$pkg" >/dev/null 2>&1; then
|
|
||||||
log "Уже установлен: $pkg"
|
|
||||||
else
|
|
||||||
info "Устанавливаю: $pkg"
|
|
||||||
xbps-install -y "$pkg" || warn "Не удалось установить $pkg"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
warn "Пакет отсутствует в репозиториях: $pkg"
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# ЭТАП 4. Пользователь и группы
|
# QXL / KVM
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
log "Этап 4/7: настройка пользователя..."
|
echo ""
|
||||||
|
info "Проверка виртуальной/физической видеокарты..."
|
||||||
|
|
||||||
|
if command -v lspci >/dev/null 2>&1; then
|
||||||
|
|
||||||
|
GPU_INFO="$(lspci | grep -Ei 'VGA|3D|Display' || true)"
|
||||||
|
|
||||||
|
if [ -n "$GPU_INFO" ]; then
|
||||||
|
echo ""
|
||||||
|
echo "$GPU_INFO"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
case "$GPU_INFO" in
|
||||||
|
|
||||||
|
*QXL*|*Red\ Hat*QXL*)
|
||||||
|
info "Обнаружена QXL GPU — устанавливаю Xorg QXL driver."
|
||||||
|
xbps-install -y xf86-video-qxl || \
|
||||||
|
warn "xf86-video-qxl недоступен."
|
||||||
|
;;
|
||||||
|
|
||||||
|
*Virtio*)
|
||||||
|
info "Обнаружена VirtIO GPU."
|
||||||
|
;;
|
||||||
|
|
||||||
|
*AMD*|*ATI*|*Radeon*)
|
||||||
|
info "Обнаружена AMD/ATI GPU."
|
||||||
|
;;
|
||||||
|
|
||||||
|
*Intel*)
|
||||||
|
info "Обнаружена Intel GPU."
|
||||||
|
;;
|
||||||
|
|
||||||
|
*NVIDIA*)
|
||||||
|
warn "Обнаружена NVIDIA GPU."
|
||||||
|
warn "NVIDIA driver намеренно НЕ устанавливается автоматически."
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
info "Неизвестный GPU — используются Mesa/Xorg по умолчанию."
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
warn "Не удалось определить GPU через lspci."
|
||||||
|
fi
|
||||||
|
|
||||||
# seatd
|
|
||||||
if getent group _seatd >/dev/null 2>&1; then
|
|
||||||
usermod -aG _seatd "$REAL_USER"
|
|
||||||
log "$REAL_USER добавлен в группу _seatd"
|
|
||||||
else
|
else
|
||||||
warn "Группа _seatd не найдена."
|
warn "lspci не найден."
|
||||||
fi
|
|
||||||
|
|
||||||
# audio
|
|
||||||
if getent group audio >/dev/null 2>&1; then
|
|
||||||
usermod -aG audio "$REAL_USER"
|
|
||||||
log "$REAL_USER добавлен в группу audio"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# video
|
|
||||||
if getent group video >/dev/null 2>&1; then
|
|
||||||
usermod -aG video "$REAL_USER"
|
|
||||||
log "$REAL_USER добавлен в группу video"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# wheel
|
|
||||||
if getent group wheel >/dev/null 2>&1; then
|
|
||||||
usermod -aG wheel "$REAL_USER"
|
|
||||||
log "$REAL_USER добавлен в группу wheel"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# ЭТАП 5. Системные сервисы
|
# Дополнительные пользовательские приложения
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
log "Этап 5/7: настройка runit..."
|
echo ""
|
||||||
|
log "Установка пользовательских приложений..."
|
||||||
|
|
||||||
|
OPTIONAL_PACKAGES="
|
||||||
|
dolphin
|
||||||
|
kate
|
||||||
|
firefox
|
||||||
|
kitty
|
||||||
|
mpv
|
||||||
|
ristretto
|
||||||
|
pavucontrol
|
||||||
|
easyeffects
|
||||||
|
gparted
|
||||||
|
htop
|
||||||
|
qdirstat
|
||||||
|
ffmpeg
|
||||||
|
libnotify
|
||||||
|
nodejs
|
||||||
|
npm
|
||||||
|
"
|
||||||
|
|
||||||
|
for pkg in $OPTIONAL_PACKAGES; do
|
||||||
|
info "Установка: $pkg"
|
||||||
|
xbps-install -y "$pkg" || warn "Пропущен пакет: $pkg"
|
||||||
|
done
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# ЭТАП 5 — Пользовательские группы
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
log "Этап 5/8: настройка групп пользователя..."
|
||||||
|
|
||||||
|
add_group() {
|
||||||
|
group="$1"
|
||||||
|
|
||||||
|
if getent group "$group" >/dev/null 2>&1; then
|
||||||
|
usermod -aG "$group" "$REAL_USER"
|
||||||
|
log "$REAL_USER -> $group"
|
||||||
|
else
|
||||||
|
warn "Группа '$group' отсутствует."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
add_group "_seatd"
|
||||||
|
add_group "audio"
|
||||||
|
add_group "video"
|
||||||
|
add_group "wheel"
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# ЭТАП 6 — Runit services
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
log "Этап 6/8: настройка системных сервисов runit..."
|
||||||
|
|
||||||
enable_service() {
|
enable_service() {
|
||||||
svc="$1"
|
svc="$1"
|
||||||
@@ -266,45 +365,92 @@ enable_service() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -L "/var/service/$svc" ]; then
|
if [ -L "/var/service/$svc" ]; then
|
||||||
log "Сервис уже включён: $svc"
|
log "Уже включён: $svc"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ln -s "/etc/sv/$svc" "/var/service/$svc"
|
ln -s "/etc/sv/$svc" "/var/service/$svc"
|
||||||
log "Включён сервис: $svc"
|
log "Включён: $svc"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Системный D-Bus
|
|
||||||
enable_service dbus
|
enable_service dbus
|
||||||
|
|
||||||
# Seat management для wlroots/Labwc
|
|
||||||
enable_service seatd
|
enable_service seatd
|
||||||
|
|
||||||
# Session management / XDG_RUNTIME_DIR
|
|
||||||
enable_service elogind
|
enable_service elogind
|
||||||
|
|
||||||
# Display manager
|
|
||||||
enable_service sddm
|
enable_service sddm
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# ВАЖНО:
|
||||||
|
#
|
||||||
# НЕ включаем:
|
# НЕ включаем:
|
||||||
#
|
#
|
||||||
# pipewire
|
# pipewire
|
||||||
# wireplumber
|
# wireplumber
|
||||||
#
|
#
|
||||||
# Они должны работать в пользовательской графической сессии,
|
# как system-wide runit services.
|
||||||
# а не как обычные system-wide runit services.
|
#
|
||||||
|
# Они должны работать в пользовательской сессии.
|
||||||
# =============================================================================
|
|
||||||
# ЭТАП 6. Wayland session для SDDM
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
log "Этап 6/7: настройка Labwc + SDDM..."
|
if [ -L "/var/service/pipewire" ]; then
|
||||||
|
warn "Обнаружен system-wide pipewire service."
|
||||||
|
warn "Отключаю его — PipeWire будет работать в user session."
|
||||||
|
rm -f /var/service/pipewire
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -L "/var/service/wireplumber" ]; then
|
||||||
|
warn "Обнаружен system-wide wireplumber service."
|
||||||
|
warn "Отключаю его — WirePlumber будет работать в user session."
|
||||||
|
rm -f /var/service/wireplumber
|
||||||
|
fi
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# elogind vs acpid
|
||||||
|
# =============================================================================
|
||||||
|
#
|
||||||
|
# elogind сам занимается session/power management.
|
||||||
|
# Поэтому не включаем acpid.
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
if [ -L "/var/service/acpid" ]; then
|
||||||
|
warn "Отключаю acpid, поскольку используется elogind."
|
||||||
|
rm -f /var/service/acpid
|
||||||
|
fi
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# ЭТАП 7 — SDDM
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
log "Этап 7/8: настройка SDDM..."
|
||||||
|
|
||||||
|
mkdir -p /etc/sddm.conf.d
|
||||||
|
|
||||||
|
# -------------------------------------------------------------------------
|
||||||
|
# ВАЖНО:
|
||||||
|
#
|
||||||
|
# НЕ заставляем SDDM работать как Wayland compositor.
|
||||||
|
#
|
||||||
|
# SDDM использует Xorg для своего login screen.
|
||||||
|
#
|
||||||
|
# После авторизации SDDM запускает Labwc как Wayland session.
|
||||||
|
# -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
rm -f /etc/sddm.conf.d/10-wayland.conf
|
||||||
|
|
||||||
|
cat > /etc/sddm.conf.d/10-display.conf << 'EOF'
|
||||||
|
[General]
|
||||||
|
DisplayServer=x11
|
||||||
|
EOF
|
||||||
|
|
||||||
|
log "SDDM настроен на X11/Xorg."
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# Labwc Wayland session
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
mkdir -p /usr/share/wayland-sessions
|
mkdir -p /usr/share/wayland-sessions
|
||||||
|
|
||||||
SESSION_FILE="/usr/share/wayland-sessions/labwc.desktop"
|
cat > /usr/share/wayland-sessions/labwc.desktop << 'EOF'
|
||||||
|
|
||||||
cat > "$SESSION_FILE" << 'EOF'
|
|
||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Name=Labwc
|
Name=Labwc
|
||||||
Comment=Wayland window-stacking compositor
|
Comment=Wayland window-stacking compositor
|
||||||
@@ -313,161 +459,144 @@ Type=Application
|
|||||||
DesktopNames=labwc
|
DesktopNames=labwc
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
chmod 644 "$SESSION_FILE"
|
chmod 644 /usr/share/wayland-sessions/labwc.desktop
|
||||||
|
|
||||||
log "Создана SDDM-сессия: $SESSION_FILE"
|
log "Создана Wayland-сессия Labwc."
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# SDDM configuration
|
# SDDM autologin НЕ включаем.
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
mkdir -p /etc/sddm.conf.d
|
# Пользователь сам выбирает Labwc на экране SDDM.
|
||||||
|
|
||||||
cat > /etc/sddm.conf.d/10-wayland.conf << 'EOF'
|
|
||||||
[General]
|
|
||||||
DisplayServer=wayland
|
|
||||||
|
|
||||||
[Wayland]
|
|
||||||
SessionDir=/usr/share/wayland-sessions
|
|
||||||
EOF
|
|
||||||
|
|
||||||
log "SDDM настроен на Wayland."
|
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# PipeWire ALSA
|
# ЭТАП 8 — Labwc config
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
if [ -d /usr/share/alsa/alsa.conf.d ]; then
|
echo ""
|
||||||
|
log "Этап 8/8: создание базовой конфигурации Labwc..."
|
||||||
|
|
||||||
mkdir -p /etc/alsa/conf.d
|
LABWC_DIR="$USER_HOME/.config/labwc"
|
||||||
|
|
||||||
if [ -f /usr/share/alsa/alsa.conf.d/50-pipewire.conf ]; then
|
mkdir -p "$LABWC_DIR"
|
||||||
ln -sf \
|
|
||||||
/usr/share/alsa/alsa.conf.d/50-pipewire.conf \
|
|
||||||
/etc/alsa/conf.d/50-pipewire.conf
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -f /usr/share/alsa/alsa.conf.d/99-pipewire-default.conf ]; then
|
# -------------------------------------------------------------------------
|
||||||
ln -sf \
|
# autostart
|
||||||
/usr/share/alsa/alsa.conf.d/99-pipewire-default.conf \
|
# -------------------------------------------------------------------------
|
||||||
/etc/alsa/conf.d/99-pipewire-default.conf
|
|
||||||
fi
|
|
||||||
|
|
||||||
log "ALSA/PipeWire настроен."
|
AUTOSTART="$LABWC_DIR/autostart"
|
||||||
fi
|
|
||||||
|
|
||||||
# =============================================================================
|
|
||||||
# Пользовательский Labwc config
|
|
||||||
# =============================================================================
|
|
||||||
|
|
||||||
USER_CONFIG="$USER_HOME/.config/labwc"
|
|
||||||
|
|
||||||
if [ ! -d "$USER_CONFIG" ]; then
|
|
||||||
mkdir -p "$USER_CONFIG"
|
|
||||||
chown -R "$REAL_USER":"$(id -gn "$REAL_USER")" \
|
|
||||||
"$USER_HOME/.config"
|
|
||||||
|
|
||||||
log "Создан $USER_CONFIG"
|
|
||||||
else
|
|
||||||
log "$USER_CONFIG уже существует."
|
|
||||||
fi
|
|
||||||
|
|
||||||
# =============================================================================
|
|
||||||
# Минимальный autostart
|
|
||||||
# =============================================================================
|
|
||||||
|
|
||||||
AUTOSTART="$USER_CONFIG/autostart"
|
|
||||||
|
|
||||||
if [ ! -f "$AUTOSTART" ]; then
|
if [ ! -f "$AUTOSTART" ]; then
|
||||||
|
|
||||||
cat > "$AUTOSTART" << 'EOF'
|
cat > "$AUTOSTART" << 'EOF'
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
# ---------------------------------------------------------
|
||||||
|
# Labwc autostart
|
||||||
|
# ---------------------------------------------------------
|
||||||
|
|
||||||
# Waybar
|
# Waybar
|
||||||
waybar &
|
if command -v waybar >/dev/null 2>&1; then
|
||||||
|
waybar &
|
||||||
|
fi
|
||||||
|
|
||||||
# Notification daemon
|
# Notification daemon
|
||||||
mako &
|
if command -v mako >/dev/null 2>&1; then
|
||||||
|
mako &
|
||||||
|
fi
|
||||||
|
|
||||||
# PolicyKit authentication agent
|
# PolicyKit authentication agent
|
||||||
if command -v /usr/libexec/polkit-gnome-authentication-agent-1 >/dev/null 2>&1; then
|
if [ -x /usr/libexec/polkit-gnome-authentication-agent-1 ]; then
|
||||||
/usr/libexec/polkit-gnome-authentication-agent-1 &
|
/usr/libexec/polkit-gnome-authentication-agent-1 &
|
||||||
elif command -v polkit-gnome-authentication-agent-1 >/dev/null 2>&1; then
|
elif command -v polkit-gnome-authentication-agent-1 >/dev/null 2>&1; then
|
||||||
polkit-gnome-authentication-agent-1 &
|
polkit-gnome-authentication-agent-1 &
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# PipeWire / WirePlumber
|
|
||||||
# Они обычно активируются через user/session environment.
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
chmod +x "$AUTOSTART"
|
chmod +x "$AUTOSTART"
|
||||||
|
|
||||||
chown "$REAL_USER":"$(id -gn "$REAL_USER")" "$AUTOSTART"
|
log "Создан Labwc autostart."
|
||||||
|
|
||||||
log "Создан минимальный Labwc autostart."
|
|
||||||
else
|
else
|
||||||
log "Существующий autostart не изменён."
|
info "Существующий Labwc autostart не изменён."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# Права на конфигурацию
|
# ALSA / PipeWire
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
chown -R "$REAL_USER":"$(id -gn "$REAL_USER")" \
|
info "Настройка ALSA → PipeWire..."
|
||||||
|
|
||||||
|
mkdir -p /etc/alsa/conf.d
|
||||||
|
|
||||||
|
if [ -f /usr/share/alsa/alsa.conf.d/50-pipewire.conf ]; then
|
||||||
|
ln -sf \
|
||||||
|
/usr/share/alsa/alsa.conf.d/50-pipewire.conf \
|
||||||
|
/etc/alsa/conf.d/50-pipewire.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f /usr/share/alsa/alsa.conf.d/99-pipewire-default.conf ]; then
|
||||||
|
ln -sf \
|
||||||
|
/usr/share/alsa/alsa.conf.d/99-pipewire-default.conf \
|
||||||
|
/etc/alsa/conf.d/99-pipewire-default.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "ALSA/PipeWire настроен."
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# Права пользователя
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
chown -R "$REAL_USER":"$USER_GROUP" \
|
||||||
"$USER_HOME/.config"
|
"$USER_HOME/.config"
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# НЕ устанавливаем NVIDIA автоматически
|
# Проверка установки
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
info "Проверяем GPU..."
|
log "Проверка установленного ПО..."
|
||||||
|
|
||||||
if command -v lspci >/dev/null 2>&1; then
|
check_command() {
|
||||||
|
cmd="$1"
|
||||||
GPU="$(lspci | grep -Ei 'VGA|3D|Display' || true)"
|
|
||||||
|
|
||||||
if [ -n "$GPU" ]; then
|
|
||||||
echo "$GPU"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
case "$GPU" in
|
|
||||||
|
|
||||||
*NVIDIA*)
|
|
||||||
warn "Обнаружена NVIDIA."
|
|
||||||
warn "NVIDIA-драйвер НЕ устанавливался автоматически."
|
|
||||||
warn "Сначала определите поколение GPU."
|
|
||||||
;;
|
|
||||||
|
|
||||||
*AMD*)
|
|
||||||
log "Обнаружена AMD GPU."
|
|
||||||
;;
|
|
||||||
|
|
||||||
*Intel*)
|
|
||||||
log "Обнаружена Intel GPU."
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
info "GPU не удалось определить автоматически."
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
|
if command -v "$cmd" >/dev/null 2>&1; then
|
||||||
|
log "$cmd: $(command -v "$cmd")"
|
||||||
else
|
else
|
||||||
warn "GPU через lspci определить не удалось."
|
warn "$cmd: НЕ НАЙДЕН"
|
||||||
fi
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
check_command labwc
|
||||||
|
check_command sddm
|
||||||
|
check_command Xorg
|
||||||
|
check_command dbus-run-session
|
||||||
|
check_command pipewire
|
||||||
|
check_command wireplumber
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# Проверка session file
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
if [ -f /usr/share/wayland-sessions/labwc.desktop ]; then
|
||||||
|
log "Labwc session file: OK"
|
||||||
else
|
else
|
||||||
warn "lspci отсутствует."
|
warn "Labwc session file отсутствует!"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# Ожидание запуска runit services
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
info "Ожидание запуска сервисов..."
|
||||||
|
|
||||||
|
sleep 3
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# Проверка сервисов
|
# Проверка сервисов
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
log "Этап 7/7: проверка сервисов..."
|
|
||||||
|
|
||||||
sleep 2
|
|
||||||
|
|
||||||
check_service() {
|
check_service() {
|
||||||
svc="$1"
|
svc="$1"
|
||||||
|
|
||||||
@@ -476,46 +605,33 @@ check_service() {
|
|||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if sv status "$svc" 2>/dev/null | grep -q "run:"; then
|
if sv status "$svc" 2>/dev/null | grep -q '^run:'; then
|
||||||
log "$svc: RUNNING"
|
log "$svc: RUNNING"
|
||||||
else
|
else
|
||||||
warn "$svc: включён, но НЕ RUNNING"
|
warn "$svc: НЕ ЗАПУЩЕН"
|
||||||
sv status "$svc" 2>&1 || true
|
sv status "$svc" 2>&1 || true
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
info "Статус системных сервисов:"
|
||||||
|
|
||||||
check_service dbus
|
check_service dbus
|
||||||
check_service seatd
|
check_service seatd
|
||||||
check_service elogind
|
check_service elogind
|
||||||
check_service sddm
|
check_service sddm
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# Проверка Labwc
|
# Проверка Xorg
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
info "Проверка установки Labwc..."
|
info "Проверка Xorg..."
|
||||||
|
|
||||||
if command -v labwc >/dev/null 2>&1; then
|
if [ -x /usr/bin/X ]; then
|
||||||
log "labwc найден: $(command -v labwc)"
|
log "Xorg найден: /usr/bin/X"
|
||||||
else
|
else
|
||||||
warn "Команда labwc не найдена."
|
warn "Xorg /usr/bin/X не найден!"
|
||||||
fi
|
|
||||||
|
|
||||||
if command -v sddm >/dev/null 2>&1; then
|
|
||||||
log "sddm найден: $(command -v sddm)"
|
|
||||||
else
|
|
||||||
warn "Команда sddm не найдена."
|
|
||||||
fi
|
|
||||||
|
|
||||||
# =============================================================================
|
|
||||||
# Проверка Wayland session
|
|
||||||
# =============================================================================
|
|
||||||
|
|
||||||
if [ -f "$SESSION_FILE" ]; then
|
|
||||||
log "Wayland session существует: $SESSION_FILE"
|
|
||||||
else
|
|
||||||
warn "Wayland session НЕ найдена."
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
@@ -524,57 +640,96 @@ fi
|
|||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "============================================================"
|
echo "============================================================"
|
||||||
printf "${GREEN}Установка завершена.${NC}\n"
|
printf "${GREEN}✓ УСТАНОВКА ЗАВЕРШЕНА${NC}\n"
|
||||||
echo "============================================================"
|
echo "============================================================"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
|
echo "Архитектура:"
|
||||||
|
echo " SDDM -> Xorg"
|
||||||
|
echo " SDDM -> Labwc"
|
||||||
|
echo " Labwc -> Wayland"
|
||||||
|
echo ""
|
||||||
|
|
||||||
echo "Сервисы:"
|
echo "Сервисы:"
|
||||||
echo " dbus: /var/service/dbus"
|
echo " dbus"
|
||||||
echo " seatd: /var/service/seatd"
|
echo " seatd"
|
||||||
echo " elogind: /var/service/elogind"
|
echo " elogind"
|
||||||
echo " sddm: /var/service/sddm"
|
echo " sddm"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "Labwc session:"
|
echo "Labwc:"
|
||||||
echo " $SESSION_FILE"
|
echo " $LABWC_DIR"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "Конфигурация:"
|
echo "SDDM session:"
|
||||||
echo " $USER_CONFIG"
|
echo " /usr/share/wayland-sessions/labwc.desktop"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "============================================================"
|
echo "============================================================"
|
||||||
echo " ВАЖНО"
|
echo " ЧТО ДЕЛАТЬ ДАЛЬШЕ"
|
||||||
echo "============================================================"
|
echo "============================================================"
|
||||||
echo ""
|
echo ""
|
||||||
echo "1. Перезагрузите компьютер:"
|
|
||||||
|
echo "1. Перезагрузиться:"
|
||||||
echo ""
|
echo ""
|
||||||
echo " reboot"
|
echo " sudo reboot"
|
||||||
echo ""
|
echo ""
|
||||||
echo "2. После перезагрузки должен появиться SDDM."
|
|
||||||
|
echo "2. Дождаться экрана SDDM."
|
||||||
echo ""
|
echo ""
|
||||||
echo "3. В SDDM выберите:"
|
|
||||||
|
echo "3. Выбрать сессию:"
|
||||||
echo ""
|
echo ""
|
||||||
echo " Labwc"
|
echo " Labwc"
|
||||||
echo ""
|
echo ""
|
||||||
echo "4. Если SDDM НЕ появился, войдите в TTY:"
|
|
||||||
|
echo "4. Войти под пользователем:"
|
||||||
echo ""
|
echo ""
|
||||||
echo " Ctrl+Alt+F2"
|
echo " $REAL_USER"
|
||||||
echo ""
|
echo ""
|
||||||
echo " и выполните:"
|
|
||||||
|
echo "============================================================"
|
||||||
|
echo " ЕСЛИ ЧТО-ТО НЕ ЗАПУСТИЛОСЬ"
|
||||||
|
echo "============================================================"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "Перейти в TTY:"
|
||||||
|
echo ""
|
||||||
|
echo " Ctrl + Alt + F2"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "Проверить сервисы:"
|
||||||
echo ""
|
echo ""
|
||||||
echo " sudo sv status dbus"
|
echo " sudo sv status dbus"
|
||||||
echo " sudo sv status seatd"
|
echo " sudo sv status seatd"
|
||||||
echo " sudo sv status elogind"
|
echo " sudo sv status elogind"
|
||||||
echo " sudo sv status sddm"
|
echo " sudo sv status sddm"
|
||||||
echo ""
|
echo ""
|
||||||
echo "5. Логи SDDM:"
|
|
||||||
|
echo "Проверить SDDM:"
|
||||||
echo ""
|
echo ""
|
||||||
echo " sudo sv status sddm"
|
echo " ps aux | grep -E 'sddm|Xorg' | grep -v grep"
|
||||||
echo " sudo tail -100 /var/log/sddm/current"
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "6. Проверка GPU:"
|
|
||||||
|
echo "Проверить Xorg:"
|
||||||
|
echo ""
|
||||||
|
echo " sudo tail -100 /var/log/Xorg.0.log"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "Проверить GPU:"
|
||||||
echo ""
|
echo ""
|
||||||
echo " lspci -k -d ::03xx"
|
echo " lspci -k -d ::03xx"
|
||||||
echo ""
|
echo ""
|
||||||
echo "============================================================"
|
|
||||||
|
echo "Проверить XDG_RUNTIME_DIR после входа:"
|
||||||
|
echo ""
|
||||||
|
echo " echo \"\$XDG_RUNTIME_DIR\""
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "============================================================"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
warn "После добавления пользователя в группы требуется новая"
|
||||||
|
warn "login-сессия. Поэтому после установки ОБЯЗАТЕЛЬНО reboot."
|
||||||
|
|
||||||
|
echo ""
|
||||||
Reference in New Issue
Block a user