我正在为Ubuntu Linux创建一个需要连接到WiFi AP的软件.WiFi网络不是预定义的,并且可以在软件的单次运行期间多次改变(用户是订购改变的用户).这个想法是这样的:给定一组SSID及其WPA或WEP密码,软件应该能够随心所欲地在网络之间切换,而无需在系统中的任何地方更改任何配置文件.
看起来,一个巨大的问题是将密码短语传递给连接.这是我到目前为止一直在使用的内容:
起初我以为可以通过d-bus将密码传递给connman,但是这个版本的connman和1.11似乎都没有公开任何方法.然后我发现可以将service_<SSID>.conf文件转储到/var/lib/connman/目录中.该文件的内容非常简单,如下所示:
[service_SSID]
Type=wifi
Name=Network-SSID
Passphrase=here-goes-the-passphrase
Run Code Online (Sandbox Code Playgroud)
创建此文件后,连接到网络需要在适当的服务中简单调用net.connman.Service.Connect()方法.问题是connman不会解析配置文件,除非它重新启动.这需要sudo特权,额外的时间,并且会增加所有"现在可能出错的事情"发生的风险.然后我认为密码可以以某种方式传递给wpa_supplicant d-bus API,但我找不到任何东西.
谷歌搜索也让我失望了.就好像以前没有人试图这样做过.
命令sudo iwconfig wlan0 essid <SSID> key s:<PASSPHRASE>导致SET failed on device wlan0 ; Invalid argument.错误.此外,它需要sudo,我想避免.
我试图找出wpa_gui程序如何发挥其魔力.首先,我发现它还需要sudo,并且它直接发送一堆命令/var/run/wpa_supplicant/wlan0.如果我没有弄清楚任何简单的事情,复制这种行为将是我的最后手段.
所以,最大的问题是:如何使用Python连接到受WEP/WPA保护的WiFi网络?
我也想知道在这里使用connman是否是一个好方法,如果我不应该恢复到网络管理器,这是Ubuntu的默认设置.
我正在研究一个动态加载DLL作为插件的程序.我正在使用Microsoft Visual C++ 2008编译程序.但是,我们假设应该支持任何与Qt一起工作的Visual C++版本.程序目录布局如下:
| plugins/
| plugin1.dll
| plugin2.dll
| QtCore4.dll
| QtGui4.dll
| program.exe
Run Code Online (Sandbox Code Playgroud)
program.exe发现所有插件DLL文件,对它们执行LoadLibrary()并调用某个签名函数来查明它是否实际上是一个插件.这对于安装了MSVC90的vcredist的计算机非常有效.当然,要使程序在所有计算机上运行,我必须使用msvc*.dll文件和相应的清单文件重新分发它.Qt DLL还需要redist才能运行.
现在,我已经设置了cmake来根据所选的Visual Studio版本自动复制适当的redist DLL和manifest.为了简单起见,让我们继续假设我正在使用MSVC90.当redist被复制到程序目录时,布局如下所示:
| plugins/
| plugin1.dll
| plugin2.dll
| QtCore4.dll
| QtGui4.dll
| msvcm90.dll
| msvcp90.dll
| msvcr90.dll
| Microsoft.VC90.CRT.manifest (I'm also aware that this file is bugged in VS2008)
| program.exe
Run Code Online (Sandbox Code Playgroud)
关于清单文件中的错误:http://www.cmake.org/pipermail/cmake/2008-Stembertember/023822.html
具有此布局的程序现在可以在没有安装redist的计算机上运行,但插件没有加载.为了让插件加载,我必须执行以下操作之一:
plugins/目录.从清单文件中删除对msvc*.dll文件的所有引用.这有效,但它并不好,因为我必须支持不同版本的已编辑清单文件,具体取决于使用的MSVC的版本.此外,我不知道这是否会在2008年以外的Visual Studio中破坏.plugins/目录.这不需要对清单文件进行任何修改,但现在program.exe愚蠢地尝试加载msvc*.dll文件,认为它们是插件.当然,这会优雅地失败,所以不会造成太大的伤害.另一个缺点是程序包的大小增加了1 MB以上.不过,这两个问题都是我可以接受的.program.exe/ MD 都不会破坏任何东西.什么是最好的解决方案?什么是正确的解决方案?如果有多个正确的解决方案,那么这是最佳做法?我是第一个尝试这样做的人吗? …
我是emacs的新手.事实上,我正在学习编辑器并尝试设置一些可以复制"转到项目内部的文件"的功能,这些功能可以从Code :: Blocks或记事本++的某些插件中获知.
'projectile'满足了这个需求,我通过MELPA安装了它.正确安装包,因为我可以启动它M-x projectile-global-mode并C-c p识别命令.
但是,如果我将它放入我的.emacs文件中,Emacs会以错误开头:
Symbol's function definition is void: projectile-global-mode
Run Code Online (Sandbox Code Playgroud)
我的.emacs文件内容如下:
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, …Run Code Online (Sandbox Code Playgroud)