Jak networkmanager pyta o hasło po dbus?

Tworzę nowy applet NetworkManager-a. Obecnie obsługuje wyświetlanie urządzeń, sieci bezprzewodowych wraz z siłą sygnału, rozłączanie, nawiązywanie połączenia.

Problem jest w tym, że brakuje dokumentacji. Podczas nawiązywania połączenia wszystko jest ok, jeśli przez innemu appletowi wcześniej podałem hasło do sieci. Jeżeli jednak mój applet jest jedynym w sesji, to nie nawiązuje połączenia. Domyślam się, że chodzi o hasło.

Podczas nawiązywania połączenia pojawiają się jedynie komunikaty StateChange dla AccessPointa i Urządzenia. Nie wyświetla się nic typu GivePassword.

Jak NetworkManager pyta się o hasło i jak należy mu je przekazać?

Za pomocą qdbusviewer zauważyłem, że interfejs org.freedesktop.NetworkManager.Settings.Connection na netodę GetSecrets. Tylko, że nie wiem, czy to jest poprawna metoda, i kiedy ma zostać wywołana.

Dobra. Znalazłem flagę sygnału StateChange urządzenia o nazwie NM_DEVICE_STATE_NEED_AUTH . Spróbuję wywołać później metodę GetSecret.

No dobra.

Ustaliłem, że NetworkManager nie zapamiętuje haseł, tylko przekierowuje je do keyringa. Pytanie polega na tym: jak stworzyć taki keyring?

Okazuje się, że interfejs dla keyringa jest zablokowany przez DBus. By to zmienić, muszę poprosić o pomoc PolicyKit. Jak poprosić o udostępnienie interfesju?

Problem rozwiązany.

http://slawek.lach.art.pl/taonmpassword.tar.gz