Das Panel-Item für diese Anzeige ist ein zusätzliches Plugin, das nicht von Haus aus mit Xfce geliefert wird. Es heißt Generic Monitor und kann ganz normal über pacman installiert werden.
Code:
sudo pacman -Syy sudo pacman -S xfce4-genmon-plugin
In den Einstellungen des Plugins (Rechtsklick auf das Plugin & Properties) haben wir nun ein paar wenige Einstellungsmöglichkeiten.
- Command: Das Bash-Script, das ausgeführt wird. Das, was das Script an den Standard-Output auswirft (printf), wird am Ende im GenMon angezeigt.
- Label: Eine zusätzliche Beschriftung für das Panel-Item. Kann leer gelassen werden, wenn man keine Beschriftung möchte.
- Period (s): Der Intervall, in dem das Bash-Script ausgeführt wird, angegeben in Sekunden.
- Die Schriftart
Wir benötigen nun also ein Bash-Script, das uns den Status von nordvpn wiedergibt. nordvpn kommt hierfür praktischerweise mit einem Command, den wir uns zunutze machen können: nordvpn status
Mein Ziel ist es nun in dem GenMon-Panel darzustellen, ob und mit welchem Server ich verbunden bin. Wenn keine aktive NordVPN-Verbindung besteht, soll einfach nur der aktuelle Verbindungsstatus ausgegeben werden (i.d.R. „Disconnected“). Hierfür öffnen wir nun einen Texteditor unserer Wahl und schreiben uns ein neues Bash-Script, das genau diese Aufgabe für uns übernehmen soll. Ich nutze hierfür VS Code, aber ihr dürft natürlich nehmen, was immer ihr möchtet. Ob nun vi, vim, nano, Sublime Text oder etwas ganz anderes, das bleibt ganz euch überlassen.
Hier vorab das vollständige Script. Die Erklärung erfolgt darunter:
Code:
#!/bin/sh nordvpnstatus="$(nordvpn status)" connected=$(echo "$nordvpnstatus" 2>/dev/null | grep -o -P '(?<=Status: ).*') if [ "$connected" == "Connected" ]; then currentServer=$(echo "$nordvpnstatus" | grep -o -P '(?<=Current server: ).*') printf "<icon>network-vpn-symbolic</icon>" printf "<txt>${currentServer}</txt>" else printf "<icon>network-vpn-symbolic</icon>" printf "<txt>${connected}</txt>" fi
In Zeile 1 legen wir fest, wie Arch dieses Script behandeln soll. In unserem Fall soll es das Script mit sh ausführen. In Zeile 3 holen wir uns den Output von „nordvpn status“ und schreiben ihn in die Variable nordvpnstatus. Anschließend suchen wir mit grep innerhalb der Statusvariable nach dem Keyword „Status: “ und speichern den Wert in die Variable connected.
In Zeile 6 beginnen wir eine IF-ELSE-Abfrage. Wir prüfen, ob der Inhalt der Variable connected gleich „Connected“ ist. Trifft dies zu, holen wir uns aus dem nordvpnstatus wieder mit grep und ein bisschen RegEx den aktuellen NordVPN-Server zu dem wir verbunden sind und speichern ihn in der Variable currentServer.
In Zeile 8 erfolgt die erste Ausgabe: Wir möchten ein Icon angezeigt bekommen, dass eine VPN-Verbindung symbolisch darstellt. In Zeile 9 schreiben wir einen Text. An dieser Stelle binden wir unsere Variable currentServer mit ein, damit die Ausgabe dynamisch angepasst wird und uns immer den aktuellen NordVPN-Server anzeigt.
Der ELSE-Block der ab Zeile 10 startet, definiert die Ausgabe wenn der Status nicht „Connected“ lautet. In diesem Fall sind wir also nicht mit einem NordVPN-Server verbunden und entsprechend nicht anonymisiert im Internet unterwegs. Wir fügen hier wieder in Zeile 11 das Icon für eine VPN-Verbindung ein und in Zeile 12 geben wir den aktuellen Connection-Status aus, der uns laut nordvpn status angezeigt werden würde. Zeile 13 schließt den kompletten IF-Block.
Das Script speichern wir uns nun ab. Ich habe mein Script in meinem Home-Verzeichnis als .nordvpnstatus.sh abgespeichert. Man beachte den Punkt vor dem Dateinamen, dadurch wird die Datei nämlich in der Standardansicht unsichtbar. Als nächstes müssen wir dieses Script noch ausführbar machen. Dazu öffnen wir uns ein Terminal, navigieren falls nötig in unser Home-Verzeichnis und tippen ein:
Code:
chmod +x .nordvpnstatus.sh
Code:
readlink -f .nordvpnstatus.sh /home/damianryse/.nordvpnstatus.sh
Versucht doch mal an dieser Stelle das Shell-Script nach euren Wünschen anzupassen. Vielleicht möchtet ihr z.B. statt des Servers lieber den Stadtnamen angezeigt bekommen? Tipp: Die notwendige Änderung muss in der Zeile 7 durchgeführt werden.
Eventuell wollt ihr auch beides, die Stadt und den Servernamen? Auch das ist natürlich möglich, erfordert aber eine zusätzliche Zeile. Anbei die Lösung für genau dieses:
Code:
#!/bin/sh nordvpnstatus="$(nordvpn status)" connected=$(echo "$nordvpnstatus" 2>/dev/null | grep -o -P '(?<=Status: ).*') if [ "$connected" == "Connected" ]; then currentServer=$(echo "$nordvpnstatus" | grep -o -P '(?<=Current server: ).*') currentCity=$(echo "$nordvpnstatus" | grep -o -P '(?<=City: ).*') printf "<icon>network-vpn-symbolic</icon>" printf "<txt>${currentCity} / ${currentServer}</txt>" else printf "<icon>network-vpn-symbolic</icon>" printf "<txt>${connected}</txt>" fi
Viel Spaß beim herum experimentieren und lasst es mich in den Kommentaren gerne wissen, wie ihr Eure Anzeige konfiguriert habt!