Skip to content

Instantly share code, notes, and snippets.

@chuckis
Created October 15, 2025 15:36
Show Gist options
  • Select an option

  • Save chuckis/fd5adc81ef41214936c3927005c3b421 to your computer and use it in GitHub Desktop.

Select an option

Save chuckis/fd5adc81ef41214936c3927005c3b421 to your computer and use it in GitHub Desktop.
Session saving in ubuntu gnome

пример минималистичного скрипта для Ubuntu GNOME, который сохраняет список запущенных GUI-приложений при выходе и восстанавливает их при следующем входе.


⚙️ 1. Установка зависимостей

sudo apt install wmctrl x11-utils xdotool

🧩 2. Скрипт сохранения сессии

Создай файл:

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

🔁 3. Скрипт восстановления сессии

Создай:

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

🚀 4. Автоматизация

При выходе:

Создай 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


🧠 5. Расширение списка приложений

В save-session строку

grep -Eq 'firefox|gnome-terminal|code|nautilus|gedit'

можно дополнить своими программами:

grep -Eq 'firefox|chromium|gnome-terminal|code|nautilus|gedit|slack|discord|postman'

⚡ 6. Проверка

  1. Запусти несколько приложений (например: Firefox, VS Code, Gedit)

  2. Выполни:

    save-session
  3. Перезагрузись.

  4. После входа GNOME автоматически вызовет restore-session, и приложения откроются заново.


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment