From de39a1074de8f31b33c9d53d3ccef6c5e7a30f9c Mon Sep 17 00:00:00 2001 From: ruslan Date: Fri, 18 Sep 2026 07:30:19 +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=2099-tailscale-resume.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tailscale автоматически поднимался при подключении к любой сети, если текущий SSID не равен AirPort. Обновленный файл /etc/NetworkManager/dispatcher.d/99-tailscale-resume.sh --- 99-tailscale-resume.sh | 50 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 99-tailscale-resume.sh diff --git a/99-tailscale-resume.sh b/99-tailscale-resume.sh new file mode 100644 index 0000000..f6ac21b --- /dev/null +++ b/99-tailscale-resume.sh @@ -0,0 +1,50 @@ +#!/bin/bash +INTERFACE="$1" +ACTION="$2" + +# Игнорируем служебные и виртуальные интерфейсы +if [[ "$INTERFACE" =~ ^(lo|tailscale|tun|tap|docker|veth) ]]; then + exit 0 +fi + +send_notification() { + local icon="$1" + local title="$2" + local message="$3" + + 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 + sleep 1 + systemd-run --machine="${ACTIVE_USER}@.host" --user \ + notify-send -i "$icon" "$title" "$message" + fi +} + +if [ "$ACTION" = "up" ]; then + sleep 2 + + CURRENT_SSID=$(nmcli -t -f active,ssid dev wifi 2>/dev/null | grep '^yes:' | cut -d: -f2) + + # Сценарий 1: Сеть AirPort -> Отключение Tailscale + if [ "$CURRENT_SSID" = "AirPort" ]; then + if tailscale status &>/dev/null || [ -f /run/tailscale-suspended ]; then + tailscale down + rm -f /run/tailscale-suspended + send_notification "network-vpn-disconnected" "Tailscale" "Отключен (сеть AirPort)" + fi + exit 0 + fi + + # Сценарий 2: Любая другая сеть -> Гарантированное подключение + if ! tailscale status &>/dev/null; then + if tailscale up; then + rm -f /run/tailscale-suspended + send_notification "network-vpn" "Tailscale" "Автоматически подключен" + fi + else + # Если VPN уже был активен, просто убираем маркер сна + rm -f /run/tailscale-suspended + fi +fi \ No newline at end of file