Логика работы /etc/systemd/system-sleep/tailscale-sleep.sh построена на выполнении действий непосредственно в момент подготовки операционной системы к переходу в режим энергосбережения:
Перехват события systemd
При переходе в сон systemd вызывает все скрипты из директории /etc/systemd/system-sleep/, передавая аргумент $1 = pre (перед сном). После пробуждения передается аргумент post.
Скрипт проверяет if [ "$1" = "pre" ], чтобы выполняться только в момент засыпания.
Проверка состояния VPN
Команда tailscale status &>/dev/null проверяет, активен ли в данный момент Tailscale.
Если отключен: Скрипт сразу завершает работу, не совершая лишних действий.
Если активен: Скрипт переходит к шагам отключения и уведомления.
Идентификация пользователя графической сессии
ls /run/user/ | grep -E '^[0-9]+$' находит UID вошедшего пользователя (обычно 1000).
id -nu "$USER_ID" получает логин этого пользователя (например, ruslan).
Отправка уведомления в KDE/Wayland
Поскольку скрипт запущен от root, прямо вызывать notify-send нельзя.
Конструкция systemd-run --machine="${ACTIVE_USER}@.host" --user пробрасывает вызов команды notify-send в пользовательскую сессию, благодаря чему выводится системное всплывающее окно "Отключение перед уходом в сон...".
Корректный разрыв соединения
Выполняется tailscale down. VPN-туннель штатно закрывается до того, как отключится Wi-Fi модуль или сетевая карта ноутбука.
Логирование (для отладки)
exec &> /tmp/tailscale-sleep.log перенаправляет весь вывод скрипта в текстовый файл.
set -x включает пошаговое логирование каждой выполняемой строчки для упрощения диагностики.
17 lines
517 B
Bash
17 lines
517 B
Bash
#!/bin/bash
|
|
exec &> /tmp/tailscale-sleep.log
|
|
set -x
|
|
|
|
if [ "$1" = "pre" ]; then
|
|
if tailscale status &>/dev/null; then
|
|
USER_ID=$(ls /run/user/ | grep -E '^[0-9]+$' | head -n1)
|
|
ACTIVE_USER=$(id -nu "$USER_ID" 2>/dev/null)
|
|
|
|
if [ -n "$ACTIVE_USER" ]; then
|
|
systemd-run --machine="${ACTIVE_USER}@.host" --user \
|
|
notify-send -i network-vpn-disconnected "Tailscale" "Отключение перед уходом в сон..."
|
|
fi
|
|
|
|
tailscale down
|
|
fi
|
|
fi |