我目前正在运行一个运行Ubuntu 15.10的便携设备。 这个想法是,这个单位将没有屏幕(一个辅助设备将可选连接到它,而是独立的,它是为了数据logging在现场),并从SSID列表和Wifi密码读取连接到他们时可用。
我们目前正在使用设备上的Mono C#,但当涉及到无线networking时遇到了麻烦。
我的问题是:是否有需要在C#环境中实现的类或DLL来获取接入点,并使用密码连接,或者terminal工具将A)返回可用的AP列表和B )可以采取一个SSID和密码,并尝试连接?
感谢您的帮助。
当前的解决scheme:我运行一个nmcli的进程,试图parsing传入的stream(在Linux上不擅长),以获取SSID列表。
经过一番比较,我运行了另一个程序,根据文本文件调用“nmcli dev wifi connect password”。
这是目前正在工作,但我想知道是否有更好的解决scheme。
编辑2:上面的主要问题是,如果提供了错误的密码,它会启动“需要密码”窗口并locking系统。
编辑3:在用nm-applet搞乱之后,杀死它停止popup,出现了一系列的802.1X错误,虽然不是每一次。 如果我尝试连接足够的时间,最终会成功。
编辑4:重新安装networkingpipe理器似乎已经修复了一些问题,但仍然是越野车。
编辑5:关于iwConfig,我试过,但我发现,当我用iwlist wlan0扫描| grep ESSID,它只返回当前连接networking的9/10次。
你基本上想要为NetworkManager的D-Bus API实现一个C#API。
要扫描可用的无线网络,您应该连接到NetworkManager的D-Bus,调用getDevices
方法,并调用其getNetworks
。
有关mono / C#的D-Bus API,请参阅dbus-sharp 。 在此处阅读有关NetworkManager的D-Bus API的更多信息。 在这里看到一个实现dbus-sharp
和NetworkManager
交互的例子。
请记住,这只适用于使用NetworkManager的Linux系统(几乎所有主要的Linux发行版,包括Ubuntu)。