デフォルトでは、NetworkManagerはWiFiパスワードをプレーンテキストで保存します*.nmconnection
。/etc/NetworkManager/system-connections/
これは許可されていないため、使用することにしましたnm-connection-editor
。Store 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_secrets
TRUEに設定しないことです(FALSEに設定するか、最初のifステートメントを完全に削除するだけです)。