This commit is contained in:
2026-09-08 10:21:12 +06:00
parent e33cfb48f9
commit 456ec37991
2 changed files with 478 additions and 622 deletions
-164
View File
@@ -1,164 +0,0 @@
#install guide labwc configure by s13bby
#after install needed
#uncomment community repos
echo "http://dl-cdn.alpinelinux.org/alpine/v3.24/community" >> /etc/apk/repositories
#or
#sed -i 's/#\(.*community\)/\1/' /etc/apk/repositories
apk update
apk add sudo nano
adduser ivan wheel
nano /etc/sudoers
#and uncomment line %wheel ALL=(ALL) ALL
#first needed packages
sudo
nano
git
#after install this packages
#clone repo ; change directory to clone repo ; add executable flag to install.sh ; execute install.sh
git clone https://zenithcode.duckdns.org/s13bby/labwc-alpine ; cd labwc-alpine ; chmod +x install.sh ; ./install.sh
#install.sh include all stuff write bellow
#install this packages
gcc
g++
curl
libcurl
opencv
#prepare before install wayland stack
#install this packages
mesa
mesa-dri
libinput
seatd
dbus
polkit
#after install do
addgroup $USER video
addgroup $USER input
addgroup $USER seat
rc-update add seatd default
rc-service seatd start
#after install this packages
labwc
alacritty (or another terminal emulator what do u like)
waybar
mako
swaybg
wofi
font-noto
font-dejavu
wl-clipboard
xdg-desktop-portal
xdg-desktop-portal-gtk
pipewire
wireplumber
alsa-utils
networkmanager
nm-applet
pcmanfm-gtk3
firefox
swaylock
#enviroment config labwc
#
#XDG_CURRENT_DESKTOP=labwc
#XDG_SESSION_TYPE=wayland
#MOZ_ENABLE_WAYLAND=1
#QT_QPA_PLATFORM=wayland
#SDL_VIDEODRIVER=wayland
#autostart config labwc
#
#nm-applet &
#waybar &
#wireplumber &
#pipewire &
#wofi &
#clone repo ; change directory to clone repo ; add executable flag to build.sh ; execute build.sh
git clone https://zenithcode.duckdns.org/s13bby/zenith-cli.git ; cd zenith-cli/ ; chmod +x build.sh ; ./build.sh
mkdir -p ~/.local/bin ; cp zenith-cli ~/.local/bin/ ; chmod +x ~/.local/bin/zenith-cli
echo $PATH | grep -o ".local/bin"
#if output in none, do
#export PATH="$HOME/.local/bin:$PATH"
#add automatic start labwc
nano /etc/inittab
#find line
#tty1::respawn:/sbin/getty 38400 tty1
#change to, where "username" is ur username
#tty1::respawn:/bin/sh -c "while true; do /sbin/getty -a username 38400 tty1; done"
nano ~/.profile
#and write this
if [ -z "$DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then
exec labwc
fi
apk update
apk upgrade
setup-wayland-base
apk add labwc labwc-doc \
dbus dbus-x11 \
foot \
rofi \
swaybg \
swayidle \
swaylock \
font-dejavu
adduser ivan
dbus-launch labwc
+470 -450
View File
@@ -1,528 +1,548 @@
#!/bin/sh
# =============================================================================
# Labwc Installer for Alpine Linux (KVM/QEMU)
# =============================================================================
# Запускать от root: sh install_labwc.sh [username]
# Если username не указан — используется текущий не-root пользователь
# =============================================================================
# ============================================================
# Alpine Linux + labwc Desktop Installer
# Wayland / labwc / seatd / greetd / NetworkManager / PipeWire
# ============================================================
set -e
echo "=============================================="
echo " Alpine Linux -> labwc Desktop"
echo "=============================================="
echo
# --- Цвета ---
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# ------------------------------------------------------------
# Check root
# ------------------------------------------------------------
info() { printf "${BLUE}[INFO]${NC} %s\n" "$1"; }
ok() { printf "${GREEN}[OK]${NC} %s\n" "$1"; }
warn() { printf "${YELLOW}[WARN]${NC} %s\n" "$1"; }
error() { printf "${RED}[ERROR]${NC} %s\n" "$1"; }
if [ "$(id -u)" != "0" ]; then
echo "ERROR: run this script as root."
# --- Проверка root ---
if [ "$(id -u)" -ne 0 ]; then
error "Этот скрипт нужно запускать от root (su или sudo)"
exit 1
fi
# ------------------------------------------------------------
# Check Alpine
# ------------------------------------------------------------
if [ ! -f /etc/alpine-release ]; then
echo "ERROR: this script is intended for Alpine Linux."
# --- Определение пользователя ---
if [ -n "$1" ]; then
TARGET_USER="$1"
else
# Ищем первого не-root пользователя с домашней директорией
TARGET_USER=$(awk -F: '$3 >= 1000 && $3 < 65534 {print $1; exit}' /etc/passwd)
if [ -z "$TARGET_USER" ]; then
error "Не найден обычный пользователь. Создайте пользователя: adduser username"
error "Или запустите: sh $0 username"
exit 1
fi
ALPINE_VERSION="$(cut -d'.' -f1,2 /etc/alpine-release)"
echo "Alpine version: $ALPINE_VERSION"
echo
# ------------------------------------------------------------
# Repositories
# ------------------------------------------------------------
echo "➜ Configure Alpine repositories"
cat > /etc/apk/repositories << EOF
https://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/main
https://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/community
EOF
apk update
# ------------------------------------------------------------
# Desktop user
# ------------------------------------------------------------
USER="user"
echo "➜ Create desktop user: $USER"
if ! id "$USER" >/dev/null 2>&1; then
adduser -D "$USER"
fi
# sudo
apk add sudo
cat > "/etc/sudoers.d/$USER" << EOF
$USER ALL=(ALL) NOPASSWD: ALL
EOF
chmod 0440 "/etc/sudoers.d/$USER"
echo "✓ User $USER created"
echo
# ------------------------------------------------------------
# Basic desktop infrastructure
# ------------------------------------------------------------
echo "➜ Install desktop infrastructure"
apk add \
dbus \
dbus-x11 \
eudev \
seatd \
seatd-openrc \
polkit \
polkit-elogind \
font-dejavu \
font-noto \
font-noto-cjk
# ------------------------------------------------------------
# User groups
# ------------------------------------------------------------
echo "➜ Configure user groups"
addgroup "$USER" seat 2>/dev/null || true
addgroup "$USER" audio 2>/dev/null || true
addgroup "$USER" video 2>/dev/null || true
addgroup "$USER" input 2>/dev/null || true
# ------------------------------------------------------------
# Wayland / labwc
# ------------------------------------------------------------
echo "★ Install labwc"
apk add \
labwc \
xwayland
# ------------------------------------------------------------
# Useful Wayland desktop applications
# ------------------------------------------------------------
echo "➜ Install Wayland utilities"
apk add \
foot \
rofi \
swaybg \
swayidle \
swaylock \
waybar \
wl-clipboard \
grim \
slurp
# ------------------------------------------------------------
# File manager / removable devices
# ------------------------------------------------------------
echo "➜ Install filesystem / removable device support"
apk add \
gvfs \
gvfs-fuse \
gvfs-smb \
udisks2 \
udisks2-openrc \
fuse-openrc
# ------------------------------------------------------------
# NetworkManager
# ------------------------------------------------------------
echo "➜ Install NetworkManager"
apk add \
networkmanager \
networkmanager-openrc \
networkmanager-tui
rc-update add networkmanager default
# ------------------------------------------------------------
# Seat management
# ------------------------------------------------------------
echo "➜ Configure seatd"
rc-update add seatd default
# ------------------------------------------------------------
# D-Bus
# ------------------------------------------------------------
echo "➜ Configure D-Bus"
rc-update add dbus default
# ------------------------------------------------------------
# PipeWire
# ------------------------------------------------------------
echo "★ Install PipeWire audio"
apk add \
pipewire \
pipewire-pulse \
pipewire-alsa \
pipewire-tools \
pipewire-spa-bluez \
pipewire-pulse-openrc \
wireplumber \
wireplumber-openrc
# ------------------------------------------------------------
# ALSA
# ------------------------------------------------------------
echo "➜ Install ALSA utilities"
apk add \
alsa-utils \
alsaconf \
alsa-lib
addgroup "$USER" audio 2>/dev/null || true
# ------------------------------------------------------------
# Bluetooth
# ------------------------------------------------------------
echo "➜ Install Bluetooth support"
apk add \
bluez \
bluez-openrc \
blueman
rc-update add bluetooth default
# ------------------------------------------------------------
# Login manager
# ------------------------------------------------------------
echo "★ Install greetd"
apk add \
greetd \
greetd-openrc \
greetd-agreety
# ------------------------------------------------------------
# greetd configuration
# ------------------------------------------------------------
echo "➜ Configure greetd"
mkdir -p /etc/greetd
cat > /etc/greetd/config.toml << EOF
[terminal]
vt = 7
[default_session]
command = "agreety --cmd labwc"
user = "greetd"
EOF
# greetd needs access to seatd
addgroup greetd seat 2>/dev/null || true
# Make greetd wait for seatd
if [ -f /etc/conf.d/greetd ]; then
if ! grep -q '^rc_need=".*seatd' /etc/conf.d/greetd 2>/dev/null; then
echo 'rc_need="seatd"' >> /etc/conf.d/greetd
fi
fi
rc-update add greetd default
# ------------------------------------------------------------
# XDG user directories
# ------------------------------------------------------------
echo "➜ Create XDG user directories"
apk add xdg-user-dirs
su - "$USER" -c "xdg-user-dirs-update" 2>/dev/null || true
# ------------------------------------------------------------
# labwc configuration
# ------------------------------------------------------------
echo "➜ Create labwc configuration"
mkdir -p "/home/$USER/.config/labwc"
cat > "/home/$USER/.config/labwc/autostart" << 'EOF'
#!/bin/sh
# D-Bus user session
if command -v dbus-update-activation-environment >/dev/null 2>&1; then
dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
if ! id "$TARGET_USER" >/dev/null 2>&1; then
error "Пользователь '$TARGET_USER' не существует"
exit 1
fi
# Wallpaper
if command -v swaybg >/dev/null 2>&1; then
swaybg -c 202020 &
USER_UID=$(id -u "$TARGET_USER")
USER_GID=$(id -g "$TARGET_USER")
USER_HOME=$(getent passwd "$TARGET_USER" | cut -d: -f6)
info "Целевой пользователь: $TARGET_USER (uid=$USER_UID, home=$USER_HOME)"
# --- Добавление community репозитория ---
info "Настройка репозиториев..."
ALPINE_VERSION=$(cat /etc/alpine-release | cut -d'.' -f1,2)
COMMUNITY_URL="https://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/community"
if ! grep -q "$COMMUNITY_URL" /etc/apk/repositories 2>/dev/null; then
echo "$COMMUNITY_URL" >> /etc/apk/repositories
ok "Добавлен community репозиторий"
else
ok "Community репозиторий уже настроен"
fi
# Panel
if command -v waybar >/dev/null 2>&1; then
waybar &
fi
apk update
# NetworkManager tray
if command -v nm-applet >/dev/null 2>&1; then
nm-applet &
fi
# --- Установка пакетов ---
info "Установка labwc и зависимостей..."
# Bluetooth tray
if command -v blueman-applet >/dev/null 2>&1; then
blueman-applet &
PACKAGES="
labwc
wlroots
seatd
seatd-launch
elogind
polkit-elogind
wayland-utils
wayland-protocols
mesa-dri-gallium
mesa-va-gallium
libseat
xf86-video-qxl
xf86-video-virtio
xwayland
foot
waybar
wofi
swaybg
swayidle
swaylock
mako
grim
slurp
wl-clipboard
xdg-utils
font-dejavu
font-noto
adwaita-icon-theme
papirus-icon-theme
pipewire
wireplumber
pipewire-pulse
pavucontrol
"
apk add $PACKAGES
ok "Пакеты установлены"
# --- Настройка служб ---
info "Настройка служб..."
rc-update add seatd default 2>/dev/null || true
rc-update add elogind default 2>/dev/null || true
rc-update add pipewire default 2>/dev/null || true
rc-service seatd start 2>/dev/null || true
rc-service elogind start 2>/dev/null || true
ok "Службы настроены"
# --- Права пользователя ---
info "Настройка прав пользователя..."
# Добавляем пользователя в необходимые группы
for group in seat video audio input; do
if getent group "$group" >/dev/null 2>&1; then
adduser "$TARGET_USER" "$group" 2>/dev/null || true
fi
done
ok "Пользователь $TARGET_USER добавлен в группы"
# --- Создание XDG_RUNTIME_DIR ---
info "Настройка XDG_RUNTIME_DIR..."
RUNDIR="/run/user/$USER_UID"
mkdir -p "$RUNDIR"
chown "$TARGET_USER:$TARGET_USER" "$RUNDIR"
chmod 700 "$RUNDIR"
# Добавляем в /etc/profile.d для persistency
mkdir -p /etc/profile.d
cat > /etc/profile.d/xdg-runtime.sh << 'EOF'
if [ -z "$XDG_RUNTIME_DIR" ]; then
export XDG_RUNTIME_DIR=/run/user/$(id -u)
fi
if [ ! -d "$XDG_RUNTIME_DIR" ]; then
mkdir -p "$XDG_RUNTIME_DIR"
chmod 700 "$XDG_RUNTIME_DIR"
fi
EOF
chmod 644 /etc/profile.d/xdg-runtime.sh
ok "XDG_RUNTIME_DIR настроен"
chmod +x "/home/$USER/.config/labwc/autostart"
# --- Конфигурация labwc ---
info "Создание конфигурации labwc..."
# ------------------------------------------------------------
# Basic labwc menu
# ------------------------------------------------------------
LABWC_DIR="$USER_HOME/.config/labwc"
mkdir -p "$LABWC_DIR"
cat > "/home/$USER/.config/labwc/menu.xml" << 'EOF'
# rc.xml — только если не существует
if [ ! -f "$LABWC_DIR/rc.xml" ]; then
cat > "$LABWC_DIR/rc.xml" << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<labwc_config>
<core>
<gap>8</gap>
<adaptiveSync>no</adaptiveSync>
</core>
<theme>
<name>Clearlooks</name>
<cornerRadius>8</cornerRadius>
<font place="ActiveWindow">
<name>sans</name>
<size>10</size>
</font>
<font place="MenuItem">
<name>sans</name>
<size>10</size>
</font>
<font place="OnScreenDisplay">
<name>sans</name>
<size>10</size>
</font>
</theme>
<keyboard>
<default />
<keybind key="W-Return">
<action name="Execute" command="foot" />
</keybind>
<keybind key="W-d">
<action name="Execute" command="wofi --show drun" />
</keybind>
<keybind key="W-Shift-d">
<action name="Execute" command="wofi --show run" />
</keybind>
<keybind key="W-l">
<action name="Execute" command="swaylock -f -c 000000" />
</keybind>
<keybind key="W-q">
<action name="Close" />
</keybind>
<keybind key="W-Shift-e">
<action name="Exit" />
</keybind>
<keybind key="W-f">
<action name="ToggleMaximize" />
</keybind>
<keybind key="W-Left">
<action name="SnapToEdge" direction="left" />
</keybind>
<keybind key="W-Right">
<action name="SnapToEdge" direction="right" />
</keybind>
<keybind key="W-1">
<action name="GoToDesktop" to="1" />
</keybind>
<keybind key="W-2">
<action name="GoToDesktop" to="2" />
</keybind>
<keybind key="W-3">
<action name="GoToDesktop" to="3" />
</keybind>
<keybind key="W-4">
<action name="GoToDesktop" to="4" />
</keybind>
<keybind key="Print">
<action name="Execute" command="grim -g $(slurp) $HOME/Pictures/screenshot-$(date +%Y%m%d-%H%M%S).png" />
</keybind>
</keyboard>
<mouse>
<default />
<context name="Frame">
<mousebind button="W-Left" action="Press">
<action name="Focus" />
<action name="Raise" />
</mousebind>
<mousebind button="W-Left" action="Drag">
<action name="Move" />
</mousebind>
<mousebind button="W-Right" action="Drag">
<action name="Resize" />
</mousebind>
</context>
</mouse>
</labwc_config>
EOF
ok "Создан $LABWC_DIR/rc.xml"
else
warn "$LABWC_DIR/rc.xml уже существует, пропускаю"
fi
# autostart — только если не существует
if [ ! -f "$LABWC_DIR/autostart" ]; then
cat > "$LABWC_DIR/autostart" << 'EOF'
#!/bin/sh
# Автозапуск labwc
# Фон
swaybg -c '#2e3440' &
# Панель
waybar &
# Уведомления
mako &
# Буфер обмена
wl-paste --watch cliphist store &
# Экранный блокировщик при простое
swayidle -w \
timeout 300 'swaylock -f -c 000000' \
timeout 600 'wlopm --off \*' \
resume 'wlopm --on \*' \
before-sleep 'swaylock -f -c 000000' &
EOF
chmod +x "$LABWC_DIR/autostart"
ok "Создан $LABWC_DIR/autostart"
else
warn "$LABWC_DIR/autostart уже существует, пропускаю"
fi
# menu.xml — контекстное меню
if [ ! -f "$LABWC_DIR/menu.xml" ]; then
cat > "$LABWC_DIR/menu.xml" << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<openbox_menu>
<menu id="root-menu" label="labwc">
<menu id="root-menu" label="Labwc">
<item label="Terminal">
<action name="Execute">
<command>foot</command>
</action>
<action name="Execute" command="foot" />
</item>
<item label="Application launcher">
<action name="Execute">
<command>rofi -show drun</command>
</action>
<item label="Browser">
<action name="Execute" command="firefox" />
</item>
<separator />
<item label="Reload labwc">
<action name="Reconfigure"/>
<item label="Reconfigure">
<action name="Reconfigure" />
</item>
<item label="Exit">
<action name="Exit"/>
<action name="Exit" />
</item>
</menu>
</openbox_menu>
EOF
ok "Создан $LABWC_DIR/menu.xml"
else
warn "$LABWC_DIR/menu.xml уже существует, пропускаю"
fi
# ------------------------------------------------------------
# Basic keyboard shortcuts
# ------------------------------------------------------------
# --- Настройка waybar ---
info "Настройка waybar..."
cat > "/home/$USER/.config/labwc/rc.xml" << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
WAYBAR_DIR="$USER_HOME/.config/waybar"
mkdir -p "$WAYBAR_DIR"
<labwc_config>
<keyboard>
<default />
<keybind key="W-Return">
<action name="Execute">
<command>foot</command>
</action>
</keybind>
<keybind key="W-d">
<action name="Execute">
<command>rofi -show drun</command>
</action>
</keybind>
<keybind key="W-l">
<action name="Execute">
<command>swaylock</command>
</action>
</keybind>
<keybind key="W-q">
<action name="Close"/>
</keybind>
</keyboard>
</labwc_config>
EOF
# ------------------------------------------------------------
# Waybar configuration
# ------------------------------------------------------------
mkdir -p "/home/$USER/.config/waybar"
cat > "/home/$USER/.config/waybar/config" << 'EOF'
[
{
if [ ! -f "$WAYBAR_DIR/config" ]; then
cat > "$WAYBAR_DIR/config" << 'EOF'
{
"layer": "top",
"position": "top",
"modules-left": [
"wlr/workspaces"
],
"modules-center": [
"clock"
],
"modules-right": [
"network",
"pulseaudio",
"battery"
]
}
]
EOF
"height": 30,
"spacing": 4,
"modules-left": ["sway/workspaces", "sway/window"],
"modules-center": ["clock"],
"modules-right": ["pulseaudio", "network", "cpu", "memory", "tray"],
cat > "/home/$USER/.config/waybar/style.css" << 'EOF'
"clock": {
"format": "{:%Y-%m-%d %H:%M}",
"tooltip-format": "<big>{:%Y %B}</big>\n<tt>{calendar}</tt>",
"format-alt": "{:%H:%M:%S}"
},
"cpu": {
"format": "CPU {usage}%",
"tooltip": false
},
"memory": {
"format": "RAM {}%"
},
"network": {
"format-wifi": "WiFi {signalStrength}%",
"format-ethernet": "Eth {ipaddr}/{cidr}",
"tooltip-format": "{ifname} via {gwaddr}",
"format-linked": "{ifname} (No IP)",
"format-disconnected": "Disconnected",
"format-alt": "{ifname}: {ipaddr}/{cidr}"
},
"pulseaudio": {
"format": "Vol {volume}%",
"format-muted": "Muted",
"on-click": "pavucontrol"
},
"tray": {
"spacing": 10
}
}
EOF
ok "Создан $WAYBAR_DIR/config"
else
warn "$WAYBAR_DIR/config уже существует, пропускаю"
fi
if [ ! -f "$WAYBAR_DIR/style.css" ]; then
cat > "$WAYBAR_DIR/style.css" << 'EOF'
* {
border: none;
border-radius: 0;
font-family: sans-serif;
font-family: "DejaVu Sans", sans-serif;
font-size: 13px;
min-height: 0;
}
window#waybar {
background: rgba(30, 30, 30, 0.95);
color: #ffffff;
background-color: #2e3440;
color: #d8dee9;
transition-property: background-color;
transition-duration: .5s;
}
#workspaces button {
padding: 0 8px;
color: #aaaaaa;
padding: 0 10px;
color: #d8dee9;
}
#workspaces button.active {
color: #ffffff;
background: #444444;
#workspaces button.focused {
background-color: #4c566a;
color: #eceff4;
}
#workspaces button.urgent {
background-color: #bf616a;
}
#clock,
#cpu,
#memory,
#network,
#pulseaudio,
#battery {
#tray {
padding: 0 10px;
margin: 0 4px;
color: #d8dee9;
}
#clock {
background-color: #434c5e;
}
#tray {
background-color: #3b4252;
}
EOF
ok "Создан $WAYBAR_DIR/style.css"
else
warn "$WAYBAR_DIR/style.css уже существует, пропускаю"
fi
# ------------------------------------------------------------
# Permissions
# ------------------------------------------------------------
# --- Настройка foot (терминал) ---
info "Настройка foot..."
echo "➜ Fix user permissions"
FOOT_DIR="$USER_HOME/.config/foot"
mkdir -p "$FOOT_DIR"
chown -R "$USER:$USER" "/home/$USER/.config"
if [ ! -f "$FOOT_DIR/foot.ini" ]; then
cat > "$FOOT_DIR/foot.ini" << 'EOF'
[main]
font=monospace:size=10
pad=8x8
# ------------------------------------------------------------
# Useful software
# ------------------------------------------------------------
[scrollback]
lines=10000
echo "★ Install basic software"
[cursor]
style=block
blink=no
apk add \
htop \
neofetch \
curl \
wget \
git \
nano \
less \
file \
unzip \
zip
[colors]
alpha=0.95
background=2e3440
foreground=d8dee9
regular0=3b4252
regular1=bf616a
regular2=a3be8c
regular3=ebcb8b
regular4=81a1c1
regular5=b48ead
regular6=88c0d0
regular7=e5e9f0
EOF
ok "Создан $FOOT_DIR/foot.ini"
else
warn "$FOOT_DIR/foot.ini уже существует, пропускаю"
fi
# ------------------------------------------------------------
# Optional browser
# ------------------------------------------------------------
# --- Настройка mako (уведомления) ---
info "Настройка mako..."
# Uncomment if required:
#
# apk add firefox
#
# or:
#
# apk add chromium
MAKO_DIR="$USER_HOME/.config/mako"
mkdir -p "$MAKO_DIR"
# ------------------------------------------------------------
# Enable services
# ------------------------------------------------------------
if [ ! -f "$MAKO_DIR/config" ]; then
cat > "$MAKO_DIR/config" << 'EOF'
font=DejaVu Sans 10
background-color=#2e3440
text-color=#d8dee9
width=300
height=100
margin=10
padding=10
border-size=2
border-color=#4c566a
border-radius=8
progress-color=over #88c0d0
icons=1
max-icon-size=48
layer=overlay
anchor=top-right
default-timeout=5000
EOF
ok "Создан $MAKO_DIR/config"
else
warn "$MAKO_DIR/config уже существует, пропускаю"
fi
echo "➜ Enable desktop services"
# --- Настройка автозапуска labwc при входе ---
info "Настройка автозапуска labwc..."
rc-update add dbus default
rc-update add seatd default
rc-update add networkmanager default
rc-update add bluetooth default
rc-update add greetd default
BASH_PROFILE="$USER_HOME/.bash_profile"
AUTOSTART_MARKER="# === labwc autostart ==="
# ------------------------------------------------------------
# Start services when possible
# ------------------------------------------------------------
if [ -f "$BASH_PROFILE" ] && grep -q "$AUTOSTART_MARKER" "$BASH_PROFILE" 2>/dev/null; then
warn "Автозапуск labwc уже настроен в .bash_profile"
else
cat >> "$BASH_PROFILE" << EOF
echo "➜ Start services"
$AUTOSTART_MARKER
if [ -z "\$WAYLAND_DISPLAY" ] && [ "\$(tty)" = "/dev/tty1" ]; then
exec labwc
fi
# === end labwc autostart ===
EOF
ok "Автозапуск labwc добавлен в .bash_profile"
fi
rc-service dbus start 2>/dev/null || true
rc-service seatd start 2>/dev/null || true
rc-service networkmanager start 2>/dev/null || true
rc-service bluetooth start 2>/dev/null || true
# --- Права на конфиги ---
chown -R "$TARGET_USER:$TARGET_USER" "$USER_HOME/.config"
# Do NOT start greetd here.
# It will start automatically after reboot.
# --- Создание директорий ---
mkdir -p "$USER_HOME/Pictures" "$USER_HOME/Downloads"
chown "$TARGET_USER:$TARGET_USER" "$USER_HOME/Pictures" "$USER_HOME/Downloads"
# ------------------------------------------------------------
# Final information
# ------------------------------------------------------------
echo
echo "=============================================="
echo " ★★★ Alpine + labwc installation complete ★★★"
echo "=============================================="
echo
echo "Desktop user: $USER"
echo
echo "IMPORTANT:"
echo
echo "Set a password for the desktop user:"
echo
echo " passwd $USER"
echo
echo "Then reboot:"
echo
echo " reboot"
echo
echo "After reboot:"
echo
echo " greetd -> labwc"
echo
echo "Wayland compositor : labwc"
echo "Seat manager : seatd"
echo "Login manager : greetd"
echo "Audio : PipeWire + WirePlumber"
echo "Network : NetworkManager"
echo
echo "=============================================="
# --- Финал ---
echo ""
echo "============================================================"
echo " Labwc установлен и настроен!"
echo "============================================================"
echo ""
echo "Пользователь: $TARGET_USER"
echo ""
echo "Горячие клавиши:"
echo " Win+Enter — Терминал (foot)"
echo " Win+D — Меню приложений (wofi)"
echo " Win+Shift+D — Запуск команды (wofi --show run)"
echo " Win+L — Блокировка экрана"
echo " Win+Q — Закрыть окно"
echo " Win+F — Развернуть окно"
echo " Win+1..4 — Переключение рабочих столов"
echo " Print — Скриншот области"
echo " Win+Shift+E — Выход из labwc"
echo ""
echo "Действия после установки:"
echo " 1. Перезагрузитесь: reboot"
echo " 2. Войдите как $TARGET_USER на tty1"
echo " 3. Labwc запустится автоматически"
echo ""
echo "Если labwc не запустился автоматически:"
echo " login: $TARGET_USER"
echo " $ labwc"
echo ""
ok "Установка завершена!"