#!/bin/bash ######################################################## ######################################################## # Wire-G App for simple management a Wireguard TUNNEL ## # Author: Désiré Werner Menrath ## # Email: polunga40@unity-mail.de ## # Translate German to English with LibreTranslate ## # Translatefiles edit with Poedit ## # Use without warranty! ## ######################################################## ######################################################## Encoding=UTF-8 # i18n - Internationalization - Internationalisierung export TEXTDOMAIN=wire-g export TEXTDOMAINDIR="/usr/share/locale" ############################################################################################################ ############################################################################################################ VERSION=3.1.5 # wg_workdir Arbeitsverzeichnis wg WG_WDIR="/home/$USER/.config/wg_nmcli/" # Pfad wg Icons WG_PIC="/home/$USER/.icons/" # Wireguard TUNNEL auslesen mit grep nur Wireguard zeigen # mit sed alles nach dem ersten Leerzeichen bis Zeilenende weggeschneiden und .TUNNEL.txt schreiben nmcli connection show | grep -iPo "(.*)(wireguard)" | sed 's/ .*//' > ${WG_WDIR}.TUNNEL.txt # Variable der verfügbaren TUNNELanzeige für Yad TUNNEL=$(nmcli connection show | grep -iPo "(.*)(wireguard)" | sed 's/ .*//') # Variable der aktiven TUNNELanzeige für Yad ACTIVE=$(nmcli connection show --active | grep -iPo "(.*)(wireguard)" | sed 's/ .*//') ############################################################################################################ ############################################################################################################ wg_notify(){ ACTIVE=$(nmcli connection show --active | grep -iPo "(.*)(wireguard)" | sed 's/ .*//') WG_PIC="/home/$USER/.icons/" case $LANG in de_DE.UTF-8) OPEN=öffnen ;; *) OPEN=open ;; esac yad --image-on-top --image=${WG_PIC}wg-vpn-info.png \ --undecorated --borders=8 --skip-taskbar \ --text-align=center --no-buttons --auto-close \ --timeout 4 --timeout-indicator=bottom \ --text=$""$ACTIVE" powered" & # autoconnect wird hier abgeschalten damit auch neu importierte nach einem Systemneustart nicht aktiv sind nmcli con mod "$ACTIVE" connection.autoconnect no yad --notification \ --image="${WG_PIC}wg-vpn.png" \ --icon-size=32 --no-middle \ --text=$"$ACTIVE activ" \ --menu="Wire-G $OPEN!/sbin/wire_g |$ACTIVE stop!/sbin/wg_stop" \ --command="menu" } export -f wg_notify # function end ############################################################################################################ ############################################################################################################ # funktion wireguard import import_wg(){ WG_PIC="/home/$USER/.icons/" WG_WDIR="/home/$USER/.config/wg_nmcli/" if WG_CONF=$(yad --file --separator=" \n" \ --button="OK" --button=$"Cancel" \ --width=1200 --height=800 --no-klick \ --window-icon=${WG_PIC}wg-import.png \ --title=$"Wireguard .conf Select file") then case "$WG_CONF" in *_*.conf) if grep -i 'PEER\|PublicKey' $WG_CONF > /dev/null && grep -i 'Interface\|PrivateKey' $WG_CONF > /dev/null then ACTIVE=$(nmcli connection show --active | grep -iPo "(.*)(wireguard)" | sed 's/ .*//') if [[ -n $ACTIVE ]] then wg_stop nmcli connection import type wireguard file $WG_CONF &> ${WG_WDIR}.tmp.txt wg_notify else pkill yad nmcli connection import type wireguard file $WG_CONF &> ${WG_WDIR}.tmp.txt wg_notify fi fi ;; *) yad --image-on-top --image=${WG_PIC}wg-info.png --height=150 --width=240 \ --text-align=center --undecorated --skip-taskbar \ --borders=12 --button="OK" --buttons-layout=center --center \ --text $"Oh, something went wrong. No valid Wireguard file. \n Here is an example: my_wireguard.conf" import_wg ;; esac fi } export -f import_wg # function end ############################################################################################################ ############################################################################################################ # funktion wireguard remove remove(){ nmcli connection show --active | grep -iPo "(.*)(wireguard)" | sed 's/ .*//' &> ${WG_WDIR}.wg_noactive.txt ACTIVE=$(cat ${WG_WDIR}.wg_noactive.txt) nmcli connection delete $SELECTION &> ${WG_WDIR}.tmp.txt if SUCCESS=$(grep -i 'erfolgreich gelöscht\|successfully deleted' ${WG_WDIR}.tmp.txt) then yad --window-icon=${WG_PIC}wg-trash.png --undecorated \ --image-on-top --image=${WG_PIC}wg-info.png \ --text=$"Your Tunnel $SELECTION was successfully deleted." \ --text-align=center --button=$"OK" \ --center --buttons-layout=center --borders=8 else yad --window-icon=${WG_PIC}wg-trash.png --undecorated \ --image-on-top --image=${WG_PIC}wg-info.png \ --text=$"Oh something went wrong.\nPlease delete Tunnel in the network manager." \ --text-align=center --button=$"OK" --height=60 --width=350 \ --buttons-layout=center --borders=8 --fixed fi if [ "$SELECTION" = "$ACTIVE" ] then pkill yad fi } # function end ############################################################################################################ ############################################################################################################ #funktion for active TUNNEL a stop up_or_down(){ WG_PIC="/home/$USER/.icons/" ACTIVE=$(nmcli connection show --active | grep -iPo "(.*)(wireguard)" | sed 's/ .*//') if [[ -z $ACTIVE ]] then yad --image-on-top --image=${WG_PIC}wg-info.png \ --text=$"There is no active Tunnel that you could stop." \ --text-align=center --no-buttons \ --borders=8 --undecorated \ --timeout 4 --timeout-indicator=bottom --skip-taskbar else wg_stop wire_g fi } export -f up_or_down # funktion end ############################################################################################################ ############################################################################################################ # function button "more" about(){ yad --width=240 \ --borders=8 --buttons-layout=center --text-align=center \ --button=$"OK" --undecorated \ --image-on-top --image=${WG_PIC}wg-vpn-info.png \ --separator="" --window-icon=${WG_PIC}wg-vpn.png \ --text=$"Wire-G Author: Désiré Werner Menrath \n E-Mail: polunga40@unity-mail.de \n At all Tunnels, the auto start is disabled. \n Version: $VERSION \n Use without warranty. \n Download Wire-G " } # function end ############################################################################################################ ############################################################################################################ # funktion wireguard enable select Tunnel connect(){ if SUCCESS=$(grep -i 'erfolgreich aktiviert\|successfully activated' ${WG_WDIR}.tmp.txt) then pkill yad nmcli con mod $SELECTION connection.autoconnect no wg_notify fi } # function end ############################################################################################################ ############################################################################################################ # --text "Aktiver TUNNEL: $ACTIVE # mit gewünschtes wort wird fett geschrieben. # Farbe für Variable $ACTIVE festgelegt mit fetter Schrift. (bei --text zwischen " ") SELECTION=$(yad --no-klick --list --center \ --height=300 --width=60 --title="Wire-G" \ --buttons-layout=center \ --button=$"Start:0" --button=$"Stop":"bash -c up_or_down" \ --button=$"Import":"bash -c import_wg" \ --button=$"Remove:4" --separator="" \ --button=$"About:5" \ --window-icon=${WG_PIC}wg-vpn.png \ --borders=8 --image-on-top --image=${WG_PIC}wg-active.png \ --column=$"Selection" $TUNNEL \ --text=$"Activ Tunnel: $ACTIVE ------------------------------------------------------------------------------------------------ If no Tunnels are listed, so they have to import their Tunnel beforehand.") RET=$? [[ $? -eq 1 ]] && exit 0 if [[ $RET -eq 4 ]] then remove fi if [[ $RET -eq 5 ]] then about fi if [[ $RET -eq 0 ]] then if [[ -n $ACTIVE ]] then wg_stop nmcli connection up $SELECTION &> ${WG_WDIR}.tmp.txt connect else nmcli connection up $SELECTION &> ${WG_WDIR}.tmp.txt connect fi fi ############################################ END ##########################################################