Tailscale автоматически поднимался при подключении к любой сети, если текущий SSID не равен AirPort. Обновленный файл /etc/NetworkManager/dispatcher.d/99-tailscale-resume.sh
50 lines
1.6 KiB
Bash
50 lines
1.6 KiB
Bash
#!/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 |