Search code examples
pythonlinuxdbusconnman

Trouble connecting with Connman using dbus, but only the first time


I've been trying to use various Python libraries for working with Connman and the dbus, particularly this sample code:

https://github.com/liamw9534/pyconnman/blob/master/demo/demo.py

The problem I have is that when connecting to a WPA2 access point for the very first time, I will always receive a timeout message. For example:

CONN> list-services
CONN> agent-start /test/agent ssid=myNetwork passphrase=myPassphrase
CONN> service-connect /net/connman/service/wifi_xxxxx__managed_psk

Eventually this is the message I receive back from the interface:

Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken

I can confirm at this point that Connman has no connected to a wifi network or obtained an IP address. The only way I can manage to get this to work is by using the Connman application itself from a Linux terminal:

connmanctl
connmanctl> agent on
connmanctl> connect wifi_xxxxx__managed_psk
Agent RequestInput wifi_xxxxx__managed_psk
    Passphrase = [ Type=psk, Requirement=mandatory ]
Passphrase? myPassword
connmanctl> Connected wifi_xxxxx__managed_psk

This creates a settings folder under /var/lib/connman for the wifi network. I can now use the demo.py script mentioned above to either disconnect or reconnect.

Connman is still a bit of a mystery to me in many ways, and I'm not sure why I have to use the interactive shell to connect to a network for the first time. Any ideas?


Solution

  • In case you're still looking for the answer : Connman needs an agent to answer the security questions (in the WPA2: it's the password). You can either run an agent and reply to Connman questions or you can create a file in /var/lib/connman with the right keys. See here. Once a file is created or deleted Connman will auto magically act accordingly (try to connect or disconnect.

    A basic file would look like:

    [service_mywificonfig]
    Type = wifi
    Security = wpa2
    Name = myssid
    Passphrase = yourpass