пример минималистичного скрипта для Ubuntu GNOME, который сохраняет список запущенных GUI-приложений при выходе и восстанавливает их при следующем входе.
sudo apt install wmctrl x11-utils xdotoolСоздай файл:
mkdir -p ~/.local/bin
nano ~/.local/bin/save-sessionВставь содержимое:
#!/bin/bash
# Сохраняет список активных графических приложений пользователя
SESSION_DIR="$HOME/.session"
mkdir -p "$SESSION_DIR"
# Получаем список окон и их PID
wmctrl -lp | awk '{print $3}' | sort -u | while read pid; do
# Пропускаем системные процессы
if [ -n "$pid" ] && [ "$pid" -gt 100 ]; then
CMD=$(ps -p $pid -o cmd= --no-headers | head -n1)
# Сохраняем только приложения с GUI
if echo "$CMD" | grep -Eq 'firefox|gnome-terminal|code|nautilus|gedit'; then
echo "$CMD" >> "$SESSION_DIR/last-session.list"
fi
fi
done
# Убираем дубликаты
sort -u -o "$SESSION_DIR/last-session.list" "$SESSION_DIR/last-session.list"
echo "Session saved to $SESSION_DIR/last-session.list"Сделай исполняемым:
chmod +x ~/.local/bin/save-sessionСоздай:
nano ~/.local/bin/restore-sessionВставь:
#!/bin/bash
# Восстанавливает предыдущую GUI-сессию
SESSION_FILE="$HOME/.session/last-session.list"
[ ! -f "$SESSION_FILE" ] && exit 0
while read -r CMD; do
echo "Restoring: $CMD"
nohup bash -c "$CMD" >/dev/null 2>&1 &
done < "$SESSION_FILE"Сделай исполняемым:
chmod +x ~/.local/bin/restore-sessionСоздай systemd user-сервис, чтобы сохранять сессию при выходе из GNOME:
mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user/save-session.serviceВставь:
[Unit]
Description=Save GNOME session on logout
Before=logout.target
[Service]
Type=oneshot
ExecStart=%h/.local/bin/save-session
[Install]
WantedBy=default.targetАктивируй:
systemctl --user enable save-session.service(GNOME не всегда вызывает logout.target, поэтому иногда проще запускать save-session вручную перед выключением — ниже улучшенный вариант покажу.)
Добавь restore-session в Автозапуск:
gnome-session-properties→ Add →
Name: Restore session
Command: /home/$USER/.local/bin/restore-session
В save-session строку
grep -Eq 'firefox|gnome-terminal|code|nautilus|gedit'можно дополнить своими программами:
grep -Eq 'firefox|chromium|gnome-terminal|code|nautilus|gedit|slack|discord|postman'-
Запусти несколько приложений (например: Firefox, VS Code, Gedit)
-
Выполни:
save-session
-
Перезагрузись.
-
После входа GNOME автоматически вызовет
restore-session, и приложения откроются заново.