Добавить fedora/tailscale-sleep.sh
Логика работы /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 включает пошаговое логирование каждой выполняемой строчки для упрощения диагностики.
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user