From 8b52fa63eca10ac97e839076ad2c1b8ba4ef5547 Mon Sep 17 00:00:00 2001 From: ruslan Date: Fri, 18 Sep 2026 07:39:56 +0000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20fedora/tailscale-sleep.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Логика работы /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 включает пошаговое логирование каждой выполняемой строчки для упрощения диагностики. --- fedora/tailscale-sleep.sh | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 fedora/tailscale-sleep.sh diff --git a/fedora/tailscale-sleep.sh b/fedora/tailscale-sleep.sh new file mode 100644 index 0000000..2f4744a --- /dev/null +++ b/fedora/tailscale-sleep.sh @@ -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 \ No newline at end of file