Files
scripts/fedora/99-tailscale-resume.sh
T
2026-09-18 07:42:37 +00:00

54 lines
1.7 KiB
Bash

#!/bin/bash
exec &> /tmp/tailscale-resume.log
set -x
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
# Задержка для готовности DBus
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 -> Принудительное отключение
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
# Если Tailscale уже был активен, просто очищаем маркер сна
rm -f /run/tailscale-suspended
fi
fi