Ein Netzwerk Tray-Icon und "nm-applet" für FreeBSD

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).

menu_basic-png.3199


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.

menu_wlan-png.3200


menu_wwan-png.3201


Und so sieht es aus wenn eine Mobilfunkverbindung mit VPN besteht, das Schloss symbolisiert die verschlüsselte VPN Verbindung:

menu_basic_wwan_vpn-png.3202


Mit der rechten Maustaste erreicht man ein weiteres Menü:

menu_popup-png.3203


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:

info_general_wlan-png.3204


info_wlan-png.3205


Und hier für Mobilfunk mit VPN:

info_general_wwan_vpn-png.3206


info_wwan-png.3207


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.png
    menu_basic.png
    856,5 KB · Aufrufe: 771
  • menu_wlan.png
    menu_wlan.png
    747,7 KB · Aufrufe: 775
  • menu_wwan.png
    menu_wwan.png
    848,4 KB · Aufrufe: 788
  • menu_basic_wwan_vpn.png
    menu_basic_wwan_vpn.png
    857,3 KB · Aufrufe: 762
  • menu_popup.png
    menu_popup.png
    883,9 KB · Aufrufe: 754
  • info_general_wlan.png
    info_general_wlan.png
    20 KB · Aufrufe: 769
  • info_wlan.png
    info_wlan.png
    24,6 KB · Aufrufe: 773
  • info_general_wwan_vpn.png
    info_general_wwan_vpn.png
    23,1 KB · Aufrufe: 782
  • info_wwan.png
    info_wwan.png
    16 KB · Aufrufe: 773
  • network_applet.tar.gz
    4,5 KB · Aufrufe: 639
Erstmal: Wow, meinen Respekt! So viel Arbeit hätte ich mir gar nicht gemacht :-)

vielleicht eine kleine Anmerkung:
Code:
shell=True
solltest du vermeiden. Die Wahrscheinlichkeit, dass dir das um die Ohren fliegt ist höher, als wenn du den Output direkt in Python verarbeitest.
 
So etwas hatte ich mir auch schon häufiger gewünscht.
Im Augenblick habe ich wenig Bedarf, werde es aber dann sicher auch mal testen.

Ist das auf deine anderen Änderungen angewiesen, die http://www.bsdforen.de/threads/road...-wlan-wwan-vpn-mit-dhcpv4-slaac-dhcpv6.32697/ beschreibt?
Dort gibt es auch den Hinweis auf den wifimgr (Schreibweise nicht überprüft), ein grafisches Tool zum Editieren der wpa_supplicant.conf. Da er angeblich Syntax-korrekt arbeitet, wäre das vielleicht eine zusätzliche Erleichterung, statt eines einfachen Editors.

Mir gefällt, dass du Dinge anpackst, löst und die Lösungen mit uns teilst!
 
kurzes Feedback:
nachdem ich heute meinen kleinen, alten Asus 1000HE Netbook auf 10.3 hochgerüstet hatte, probierte ich dein Script gleich mal aus.
Es funktioniert, wie beschrieben, so weit ich das sagen kann. Mit nur einem Wlan aktiv macht das Tool bei mir nicht wirklich viel Sinn im Moment, auf diesem Rechner. Aber ansehen wollte ich es mir halt mal.
Was nicht funktioniert: die Icons. Vermutlich ist mein Panel (fbpanel) zu klein für den Icon-Satz, der da bei mir angesprochen wird. Ich sehe nämlich an Stelle der Empfangs-stärke nur eine Fläche mit einem X drin. Deshalb dachte ich zunächst, ich hätte vielleicht gar keine passenden Icons an Bord (oder am falschen Platz), doch plötzlich sah ich dann ein typisches Balkendiagramm im Hintergrund, allerdings nach oben verschoben und nicht in Panel integriert. Es ist allerdings immer nur flüchtig und nur gelegentlich zu sehen.
 
Das läuft bei mir (mit WLAN und OpenVPN) auch schon ganz gut. Den Pfad zu den OpenVPN Configs musste ich noch anpassen, dann ging es. Allerdings sehe ich auch keine Icons. Welches Set muss ich dafür denn installieren?
 
Zurück
Oben