Одна и та же конфигурация Wireguard не может нормально работать одновременно на двух устройствах (десктоп и телефон). Часто случается необходимость выключать Wireguard на компьютере дистанционно, чтобы пользоваться им на телефоне. Для этого я использую скрипт ~/.local/bin/wg-toggle.sh:

#!/usr/bin/env bash
 
CONN="Wireguard"
 
STATE=$(nmcli -t -f NAME,STATE connection show --active | grep "^${CONN}:" | cut -d: -f2)
 
if [ "$STATE" = "activated" ]; then
    nmcli connection down "$CONN"
    echo "$CONN is off"
else
    nmcli connection up "$CONN"
    echo "$CONN is on"
fi

В данном случае Wireguard работает через NetworkManager и управляется им. В отличие от wg-quick, в особенности с управлением через systemd, вариант с NetworkManager не требует возни с паролем и правами, и управляется от пользователя. Скрипт запускается на компьютере дистанционно через KDE Connect, модуль “Запуск команд”. В телефоне есть виджет, позволяющий быстро запускать команды из списка этого модуля, среди которых и запуск скрипта wg-toggle.sh.


На всякий случай тот же скрипт в виде alias’а для fish shell и bash/zsh.

bash/zsh
# Wireguard on/off toggle via NetworkManager
wgtoggle() {
    local conn="Wireguard"
    local state
    state=$(nmcli -t -f NAME,STATE connection show --active | grep "^${conn}:" | cut -d: -f2)
    if [ "$state" = "activated" ]; then
        nmcli connection down "$conn"
        echo "$conn is off"
    else
        nmcli connection up "$conn"
        echo "$conn is on"
    fi
}
fish
# Wireguard on/off toggle via NetworkManager
function wgtoggle
    set conn "Wireguard"
    set state (nmcli -t -f NAME,STATE connection show --active | grep "^$conn:" | cut -d: -f2)
    if test "$state" = "activated"
        nmcli connection down $conn
        echo "$conn is off"
    else
        nmcli connection up $conn
        echo "$conn is on"
    end
end