1

私の最終的な目標は、ワイヤレス接続のセットアップが失敗した理由を教えてくれるモジュールを作成することです。

現在、 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 を使用して Interfaces プロパティを調べたところ、プロパティ自体が 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 に登録することは決してないということです。

(端末コマンドを使用して wpa_supplicant を使用して wlan0 をセットアップしたことを確認しました)

4

1 に答える 1

1

promise を使用して上記のコードを書き直すことで、問題を解決できました。上記の GetInterface は wpa_supplicant アダプターのみを返すことに注意することも重要です。

実際の wlan0 インターフェイスを取得するには、GetInterface を使用してこのオブジェクトをさらに呼び出す必要があります。

「wpa_supplicant はこのインターフェイスを取得できません」というエラーが発生した場合は、/run/wpa_supplicant/wlan0 (存在する場合) にある wlan0 ファイルを削除してみてください。

于 2016-05-23T16:29:51.150 に答える