GNOMEキーリングにパスワードが保存されると、NetworkManagerはWiFiネットワークに自動的に接続できません。

GNOMEキーリングにパスワードが保存されると、NetworkManagerはWiFiネットワークに自動的に接続できません。

デフォルトでは、NetworkManagerはWiFiパスワードをプレーンテキストで保存します*.nmconnection/etc/NetworkManager/system-connections/これは許可されていないため、使用することにしましたnm-connection-editorStore the password only for this userそこでオプションを確認しました。これは、プレーンテキストではなくGNOMEキーリングにパスワードを保存する効果があります。

しかし、このソリューションには問題があります。 NetworkManagerは、コンピュータの起動時にシステムデバイスとして起動します。この時点では、GNOME Keyringはまだ起動していません。後で正常にログインすると、My Display Managerが起動し、My User Password(キーリングパスワードと同じ)を使用して自動的にロック解除されます。したがって、NetworkManager はキーリングからパスワードを取得できず、次のログをエクスポートします。

NetworkManager[610]: <warn> [1565208122.6857] device (wlp2s0): no secrets: No agents were available for this request.

ログイン後はWiFi接続になりません。 nm-appletをクリックしてWiFiネットワークを選択する必要があります。それ以降は接続されていますが、自動的に発生することをお勧めします。

私の設定に問題がありますか?では、どうすれば解決できますか?

完全性のために、私の設定は次のとおりです。

  • オペレーティングシステム:アーチLinux
  • ディスプレイマネージャ:SDDM
  • ウィンドウマネージャ:i3

答え1

NetworkManagerのソースコードを分析したところ、問題が見つかりました。 NetworkManagerがキーリングから秘密を取得できない場合、接続は自動的に接続されません。この動作はnm-policy.cで設定されハードコードされていないようです。

https://github.com/NetworkManager/NetworkManager/blob/master/src/nm-policy.c

1830行近くにコードがあります。

if (nm_device_state_reason_check (reason) == NM_DEVICE_STATE_REASON_NO_SECRETS) {
    /* ... */
    con_v = nm_settings_connection_get_last_secret_agent_version_id (sett_conn);
    if (   con_v == 0
        || con_v == nm_agent_manager_get_agent_version_id (priv->agent_mgr))
            block_no_secrets = TRUE;
}

if (block_no_secrets) {
    _LOGD (LOGD_DEVICE, "connection '%s' now blocked from autoconnect due to no secrets",
        nm_settings_connection_get_id (sett_conn));
        nm_settings_connection_autoconnect_blocked_reason_set (sett_conn, NM_SETTINGS_AUTO_CONNECT_BLOCKED_REASON_NO_SECRETS, TRUE);
}

この動作を解決し、NetworkManagerが自動接続をブロックしないようにする最も簡単な方法はこれをblock_no_secretsTRUEに設定しないことです(FALSEに設定するか、最初のifステートメントを完全に削除するだけです)。

関連情報