Fix Network Manager handling

This commit is contained in:
NeilClack
2026-03-13 20:41:24 -05:00
parent 91e5c04a38
commit 514bba69f5
2 changed files with 24 additions and 17 deletions
+1 -1
View File
@@ -49,7 +49,7 @@
{
packages.default = pkgs.buildGoModule {
pname = "rhemawave";
version = "v1.0.2";
version = "v1.0.3";
src = ./.;
vendorHash = null;
+23 -16
View File
@@ -331,34 +331,41 @@ func (m *Manager) Connect(wifiDevice Device, ap AccessPoint, passphrase string)
"uuid": dbus.MakeVariant(uuid.NewString()),
"id": dbus.MakeVariant(ap.SSID),
"interface-name": dbus.MakeVariant(wifiDevice.InterfaceName),
"permissions": dbus.MakeVariant([]string{}), // Shared connection
"autoconnect": dbus.MakeVariant(true),
},
"802-11-wireless": {
"ssid": dbus.MakeVariant([]byte(ap.SSID)),
"mode": dbus.MakeVariant("infrastructure"),
},
"ipv4": {"method": dbus.MakeVariant("auto")},
"ipv6": {"method": dbus.MakeVariant("auto")},
}
if ap.IsProtected {
settings["802-11-wireless"]["security"] = dbus.MakeVariant("802-11-wireless-security")
secSettings := make(map[string]dbus.Variant)
// Default to WPA-PSK, but override with more specific types if found.
secSettings["key-mgmt"] = dbus.MakeVariant("wpa-psk")
if (ap.RsnFlags & APSecKeyMgmtSAE) != 0 {
secSettings["key-mgmt"] = dbus.MakeVariant("sae") // WPA3
} else if (ap.RsnFlags&APSecKeyMgmtEAP) != 0 || (ap.WpaFlags&APSecKeyMgmtEAP) != 0 {
log.Println("network: Enterprise AP (EAP) detected. Full configuration may be required.")
secSettings["key-mgmt"] = dbus.MakeVariant("wpa-eap")
settings["802-11-wireless-security"] = map[string]dbus.Variant{
"key-mgmt": dbus.MakeVariant("wpa-psk"),
"auth-alg": dbus.MakeVariant("open"),
"psk": dbus.MakeVariant(passphrase),
}
secSettings["psk"] = dbus.MakeVariant(passphrase)
settings["802-11-wireless-security"] = secSettings
// 0 means "The secret is not saved or is managed by an external agent"
// In a kiosk, we want NM to just handle it.
settings["802-11-wireless-security"]["psk-flags"] = dbus.MakeVariant(uint32(0))
}
call := m.nmObject.Call(nmInterface+".AddAndActivateConnection", 0, settings, wifiDevice.Path, ap.ObjectPath)
if call.Err != nil {
return fmt.Errorf("AddAndActivateConnection D-Bus call error: %w", call.Err)
var connectionPath dbus.ObjectPath
var activeConnectionPath dbus.ObjectPath
// Capture the two return values from AddAndActivateConnection
err := m.nmObject.Call(nmInterface+".AddAndActivateConnection", 0, settings, wifiDevice.Path, ap.ObjectPath).Store(&connectionPath, &activeConnectionPath)
if err != nil {
// THIS IS THE LOG YOU NEED TO SEE IN SSH
log.Printf("NETWORK MANAGER FAIL: %v", err)
return fmt.Errorf("AddAndActivateConnection failed: %w", err)
}
log.Printf("Connection created: %s, Active path: %s", connectionPath, activeConnectionPath)
return nil
}