2016-05-13 47 views
1

我最終的目標是創建一個模塊,告訴我爲什麼無線連接的設置失敗。獲取node.js中wpa_supplicant接口的列表

目前我正在嘗試使用node-dbus模塊訪問wlan0接口。因爲它wpa_supplicant告訴我它不知道wlan0

'wpa_supplicant'對此接口一無所知。

任何幫助或建議,非常感謝。

代碼:

var dbus = require('dbus-native'); 
var util = require('util'); 

var bus = dbus.systemBus(); 
var wpas = bus.getService('fi.w1.wpa_supplicant1'); 

var wpai = wpas.getInterface('/fi/w1/wpa_supplicant1' 
    , 'fi.w1.wpa_supplicant1', function (err, iface) { 
     //console.log(err, iface); 

     iface.on('PropertiesChanged', function(dict) { 
      console.log('interface properties have changed!'); 
      console.log(dict); 
     }); 

     iface.on('InterfaceAdded', function(path, dict) { 
      console.log('interface has been added!'); 
      console.log(path, dict); 
     }); 

     iface.on('InterfaceRemoved', function(path) { 
      console.log('interface has been removed!'); 
      console.log(path); 
     }); 

     iface.GetInterface('wlan0', function (err, iface2) { 
      console.log(err, iface2); 
     }); 

     console.log(util.inspect(iface, true, 3)); 

    }); 

更新1:

我用的DBus性API調查接口特性和發現的財產本身爲null。

wpas.getInterface('/fi/w1/wpa_supplicant1', 'org.freedesktop.DBus.Properties', function(err, device) { 
       device.GetAll('fi.w1.wpa_supplicant1', function(err, prop) { 
        var props = arrToMap(prop); 
        console.log(err,props); 
       }); 
      }); 

function arrToMap(arr) { 
    var output = {}; 
    for (var i = 0; i < arr.length; i++) { 
     output[arr[i][0]] = arr[i][1][1][0]; 
    } 
    return output; 
} 

我唯一的結論是,從來沒有的wpa_supplicant註冊與DBUS任何新接口。

(I已確保設置我爲wlan0使用的wpa_supplicant使用終端命令)

回答

1

我管理通過重寫上述使用許諾的代碼來解決我的問題。 注意上面的GetInterface只返回wpa_supplicant適配器也很重要。

需要使用GetInterface對此對象進行額外的調用才能獲得實際的wlan0接口。

如果有人碰到錯誤「的wpa_supplicant不能抓住這個接口」嘗試取出爲wlan0文件:/運行/的wpa_supplicant /爲wlan0(如果有的話)