Skip to content

Instantly share code, notes, and snippets.

@mkol5222
Forked from wiless/dbusnetwatch.go
Created July 13, 2018 21:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mkol5222/d6bb9660ee369a040ea59370c391322e to your computer and use it in GitHub Desktop.
Save mkol5222/d6bb9660ee369a040ea59370c391322e to your computer and use it in GitHub Desktop.
Monitor for change of SSID/Connection
package main
import (
"fmt"
"os"
"github.com/godbus/dbus"
)
// dbus-monitor --system "type='signal',sender='org.freedesktop.NetworkManager',interface='org.freedesktop.NetworkManager'"
func main() {
conn, err := dbus.SystemBus()
if err != nil {
fmt.Fprintln(os.Stderr, "Failed to connect to session bus:", err)
os.Exit(1)
}
call := conn.BusObject().Call("org.freedesktop.DBus.AddMatch", 0,
"type='signal',path='/org/freedesktop/NetworkManager/Devices/2',interface='org.freedesktop.NetworkManager.Device.Wireless',sender='org.freedesktop.NetworkManager'")
// call := conn.BusObject().Call("org.freedesktop.DBus.AddMatch", 0,
// "type='signal',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',sender='org.freedesktop.DBus'")
// Working
// call := conn.BusObject().Call("org.freedesktop.DBus.AddMatch", 0,
// "type='signal',path='/org/kde/Solid/PowerManagement/Actions/BrightnessControl',interface='org.kde.Solid.PowerManagement.Actions.BrightnessControl',sender='org.kubuntu.NotificationHelper'")
fmt.Printf("\n The call object is \n %#v \n", call)
c := make(chan *dbus.Signal, 10)
conn.Signal(c)
for v := range c {
for _, ival := range v.Body {
mytype, isok := ival.(map[string]dbus.Variant)
if isok {
keys := []string{"ActiveAccessPoint", "ActiveConnection"}
// Available properties that changed can be seen here
// for key, _ := range mytype {
// fmt.Printf("%s, ", key)
// }
for _, key := range keys {
val, ok := mytype[key]
if ok {
activeobj := conn.Object("org.freedesktop.NetworkManager", val.Value().(dbus.ObjectPath))
if key == "ActiveAccessPoint" {
name, err := activeobj.GetProperty("org.freedesktop.NetworkManager.AccessPoint.Ssid")
if err != nil {
fmt.Println("Error getting ssid : ", err)
} else {
fmt.Printf("\nAP Name = %s", name.Value().([]byte))
}
} else {
ssid, err := activeobj.GetProperty("org.freedesktop.NetworkManager.Connection.Active.Id")
if err != nil {
fmt.Println("Error getting ssid : ", err)
} else {
fmt.Printf("\nConnName = %s", ssid.Value().(string))
}
}
}
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment