Rosendoktor
Well-Known Member
Hallo,
nachdem ich angefangen hatte, mir für mein Notebook ein Roadwarrior Setup zusammenzubasteln (siehe anderer Thread), hab ich mir doch auch ein kleines Tray-Icon als Statusanzeige für die Netzwerkverbindungen gewünscht. So im Stil des aus Linux / GNOME bekannten "nm-applet", vielleicht noch mit einem kleinen bisschen von dessen Funktionalität.
Also hab' ich mal geguckt wie man sowas machen kann. Ein Beispielprogramm welches ein Tray Icon mit einem Menü dran erzeugt ist ja recht schnell zu finden, das tauglichste war leider in Python geschrieben. Dann halt Python.
Herausgekommen ist bis jetzt dieses kleine "network_applet". Es ist wie gesagt in Python geschrieben, basiert auf gtk2, erzeugt ein Tray Icon das den Netzwerkstatus anzeigt und den Auf- und Abbau von LAN, WLAN, WWAN und VPN Verbindungen aus dem Menü heraus ermöglicht.
Die Kommunikation des Applets mit dem System erfolgt dabei ausschliesslich über Shell Aufrufe, hauptsächlich ifconfig, ps usw. zum Ermitteln des Netzwerkstatus, und service netif start/stop <interface>, ppp -ddial <provider> und openvpn --config <file> zum Auf- und Abbau von Verbindungen.
Damit letzteres funktioniert muss es mit root Rechten laufen. Man kann es entweder gleich als root starten, oder als normaler User, dann holt es sich die root Rechte bei Bedarf indem es sich selbst über gksu neu startet. Das sollte auch die einzige Abhängigkeit sein, also gksu. Ansonsten läuft es standalone, und nimmt keinerlei Änderungen am System vor.
Man kann das Applet irgendwo im Home Verzeichnis ablegen, oder systemweit z.B. in /usr/local/sbin. Wenn man es gleich beim Login starten will, kann man es einfach in die Startprogramme des jeweiligen DE aufnehmen. Bei mir läuft es unter MATE, es sollte aber mit jedem DE laufen.
Bevor ich mit ein paar Screenshots das Ding etwas genauer beschreibe, eines vorweg: Ich kann eigentlich gar kein Python, ich mag Python auch gar nicht, ich hab' noch nie ein gtk Programm geschrieben und das Ding abends nachdem der Kleine in Bett war neben dem Fußballgucken zusammengeschustert. Dementsprechend sieht der Code auch aus, also bitte nicht lachen und etwas Nachsicht walten lassen... Danke.
Also, hier mal der erste Screenshot, das Icon (WLAN Verbindung aktiv) und das Hauptmenü. Das Icon zeigt neben dem Typ der Verbindung auch die Verbindungsqualität an (nur bei WLAN, WWAN ist noch in Arbeit).
Im Hauptmenü (linke Maustaste) sínd untereinander die verfügbaren Interfaces und Verbindungen aufgelistet. LAN und WLAN Interface können durch Klicken auf die Statuszeile aktiviert oder deaktiviert werden. Ist eine Verbindung aktiv, wird dies durch Fettschrift hier angeźeigt (in diesem Fall eine WLAN Verbindung mit der SSID Sagittarius).
Für WLAN, WWAN und VPN sind in den Untermenüs die verfügbaren Verbindungen aufgelistet. Hierzu liesst das Applet die /etc/wpa_supplicant.conf, die /etc/ppp/ppp.conf aus sowie die Liste der *.conf Dateien im openvpn Konfigurationsverzeichnis. Ausserdem werden die in der Umgebung vorhandenen SSIDs angezeigt. Anders als z.B. unter Linux kann man hier keine WLAN SSID explizit auswählen, es bleibt dem wpa_supplicant überlassen womit er sich verbindet. Bei WWAN und VPN kann man unter den verfügbaren Verbindungen explizit eine anwählen, dann wird sie aufgebaut.
Und so sieht es aus wenn eine Mobilfunkverbindung mit VPN besteht, das Schloss symbolisiert die verschlüsselte VPN Verbindung:
Mit der rechten Maustaste erreicht man ein weiteres Menü:
Hier kann man vor allem die Verbindungsinformationen anzeigen lassen. Der andere Menüpunkt "Verbindungen bearbeiten" öffnet lediglich einen Editor mit /etc/wpa_supplicant.conf und der /etc/ppp/ppp.conf zum Bearbeiten derselben.
Die Verbindungsinformationen werden in einem allgemeinen und in interfacespezifischen Reitern dargestellt. Im Wesentlichen sieht man hier den Ihnalt der /etc/resolv.conf, die Routingtabelle, die Ausgabe von ifconfig <interface> und den Inhalt der resolvconf Datenbank für das jeweilige Interface.
Hier mal für eine WLAN Verbindung:
Und hier für Mobilfunk mit VPN:
Das war's soweit. Vielleicht gefällt es ja jemandem hier. Für meine Zwecke tut es soweit alles was es soll, ich werde es sicherlich noch etwas ausbauen, Fehler beseitigen, gegen Fehlbedienung absichern bzw. den Code bereinigen. Falls Interesse besteht nehme ich auch gerne Anregungen und Kritik entgegen.
Der Code ist als Anhang hier https://www.bsdforen.de/attachments...0/?temp_hash=caeae60df8c56ce045826b2dd6a60ed1 unter den Bildern zu finden.
Grüsse,
Robert
nachdem ich angefangen hatte, mir für mein Notebook ein Roadwarrior Setup zusammenzubasteln (siehe anderer Thread), hab ich mir doch auch ein kleines Tray-Icon als Statusanzeige für die Netzwerkverbindungen gewünscht. So im Stil des aus Linux / GNOME bekannten "nm-applet", vielleicht noch mit einem kleinen bisschen von dessen Funktionalität.
Also hab' ich mal geguckt wie man sowas machen kann. Ein Beispielprogramm welches ein Tray Icon mit einem Menü dran erzeugt ist ja recht schnell zu finden, das tauglichste war leider in Python geschrieben. Dann halt Python.
Herausgekommen ist bis jetzt dieses kleine "network_applet". Es ist wie gesagt in Python geschrieben, basiert auf gtk2, erzeugt ein Tray Icon das den Netzwerkstatus anzeigt und den Auf- und Abbau von LAN, WLAN, WWAN und VPN Verbindungen aus dem Menü heraus ermöglicht.
Die Kommunikation des Applets mit dem System erfolgt dabei ausschliesslich über Shell Aufrufe, hauptsächlich ifconfig, ps usw. zum Ermitteln des Netzwerkstatus, und service netif start/stop <interface>, ppp -ddial <provider> und openvpn --config <file> zum Auf- und Abbau von Verbindungen.
Damit letzteres funktioniert muss es mit root Rechten laufen. Man kann es entweder gleich als root starten, oder als normaler User, dann holt es sich die root Rechte bei Bedarf indem es sich selbst über gksu neu startet. Das sollte auch die einzige Abhängigkeit sein, also gksu. Ansonsten läuft es standalone, und nimmt keinerlei Änderungen am System vor.
Man kann das Applet irgendwo im Home Verzeichnis ablegen, oder systemweit z.B. in /usr/local/sbin. Wenn man es gleich beim Login starten will, kann man es einfach in die Startprogramme des jeweiligen DE aufnehmen. Bei mir läuft es unter MATE, es sollte aber mit jedem DE laufen.
Bevor ich mit ein paar Screenshots das Ding etwas genauer beschreibe, eines vorweg: Ich kann eigentlich gar kein Python, ich mag Python auch gar nicht, ich hab' noch nie ein gtk Programm geschrieben und das Ding abends nachdem der Kleine in Bett war neben dem Fußballgucken zusammengeschustert. Dementsprechend sieht der Code auch aus, also bitte nicht lachen und etwas Nachsicht walten lassen... Danke.
Also, hier mal der erste Screenshot, das Icon (WLAN Verbindung aktiv) und das Hauptmenü. Das Icon zeigt neben dem Typ der Verbindung auch die Verbindungsqualität an (nur bei WLAN, WWAN ist noch in Arbeit).
Im Hauptmenü (linke Maustaste) sínd untereinander die verfügbaren Interfaces und Verbindungen aufgelistet. LAN und WLAN Interface können durch Klicken auf die Statuszeile aktiviert oder deaktiviert werden. Ist eine Verbindung aktiv, wird dies durch Fettschrift hier angeźeigt (in diesem Fall eine WLAN Verbindung mit der SSID Sagittarius).
Für WLAN, WWAN und VPN sind in den Untermenüs die verfügbaren Verbindungen aufgelistet. Hierzu liesst das Applet die /etc/wpa_supplicant.conf, die /etc/ppp/ppp.conf aus sowie die Liste der *.conf Dateien im openvpn Konfigurationsverzeichnis. Ausserdem werden die in der Umgebung vorhandenen SSIDs angezeigt. Anders als z.B. unter Linux kann man hier keine WLAN SSID explizit auswählen, es bleibt dem wpa_supplicant überlassen womit er sich verbindet. Bei WWAN und VPN kann man unter den verfügbaren Verbindungen explizit eine anwählen, dann wird sie aufgebaut.
Und so sieht es aus wenn eine Mobilfunkverbindung mit VPN besteht, das Schloss symbolisiert die verschlüsselte VPN Verbindung:
Mit der rechten Maustaste erreicht man ein weiteres Menü:
Hier kann man vor allem die Verbindungsinformationen anzeigen lassen. Der andere Menüpunkt "Verbindungen bearbeiten" öffnet lediglich einen Editor mit /etc/wpa_supplicant.conf und der /etc/ppp/ppp.conf zum Bearbeiten derselben.
Die Verbindungsinformationen werden in einem allgemeinen und in interfacespezifischen Reitern dargestellt. Im Wesentlichen sieht man hier den Ihnalt der /etc/resolv.conf, die Routingtabelle, die Ausgabe von ifconfig <interface> und den Inhalt der resolvconf Datenbank für das jeweilige Interface.
Hier mal für eine WLAN Verbindung:
Und hier für Mobilfunk mit VPN:
Das war's soweit. Vielleicht gefällt es ja jemandem hier. Für meine Zwecke tut es soweit alles was es soll, ich werde es sicherlich noch etwas ausbauen, Fehler beseitigen, gegen Fehlbedienung absichern bzw. den Code bereinigen. Falls Interesse besteht nehme ich auch gerne Anregungen und Kritik entgegen.
Der Code ist als Anhang hier https://www.bsdforen.de/attachments...0/?temp_hash=caeae60df8c56ce045826b2dd6a60ed1 unter den Bildern zu finden.
Grüsse,
Robert
Anhänge
-
menu_basic.png856,5 KB · Aufrufe: 771
-
menu_wlan.png747,7 KB · Aufrufe: 775
-
menu_wwan.png848,4 KB · Aufrufe: 788
-
menu_basic_wwan_vpn.png857,3 KB · Aufrufe: 762
-
menu_popup.png883,9 KB · Aufrufe: 754
-
info_general_wlan.png20 KB · Aufrufe: 769
-
info_wlan.png24,6 KB · Aufrufe: 773
-
info_general_wwan_vpn.png23,1 KB · Aufrufe: 782
-
info_wwan.png16 KB · Aufrufe: 773
-
network_applet.tar.gz4,5 KB · Aufrufe: 639