그놈 키링에 비밀번호가 저장되면 NetworkManager가 WiFi 네트워크에 자동으로 연결할 수 없습니다.

그놈 키링에 비밀번호가 저장되면 NetworkManager가 WiFi 네트워크에 자동으로 연결할 수 없습니다.

기본적으로 NetworkManager는 WiFi 비밀번호를 일반 텍스트로 저장합니다 *.nmconnection. /etc/NetworkManager/system-connections/이는 허용되지 않으므로 을 사용하기로 결정했습니다 nm-connection-editor. Store the password only for this user거기에서 옵션을 확인했습니다. 이는 일반 텍스트가 아닌 그놈 키링에 비밀번호를 저장하는 효과가 있습니다.

하지만 이 솔루션에는 문제가 있습니다. NetworkManager는 컴퓨터가 시작될 때 시스템 장치로 시작됩니다. 이 시점에서는 GNOME Keyring이 아직 시작되지 않았습니다. 나중에 성공적으로 로그인하면 내 디스플레이 관리자가 시작하고 내 사용자 비밀번호(키링 비밀번호와 동일)를 사용하여 자동으로 잠금 해제됩니다. 따라서 NetworkManager는 키링에서 비밀번호를 가져올 수 없으며 다음 로그를 내보냅니다.

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

로그인 후 WiFi 연결이 되지 않습니다. nm-applet을 클릭하고 WiFi 네트워크를 선택해야 합니다. 그 이후로 연결되어 있지만 자동으로 발생하는 것이 좋습니다.

내 구성에 문제가 있나요? 그렇다면 어떻게 해결할 수 있습니까?

완전성을 위해 내 구성은 다음과 같습니다.

  • 운영 체제: 아치 리눅스
  • 디스플레이 관리자: 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 문을 완전히 제거하기만 하면 됩니다).

관련 정보