Index: src/preferences/client.rs
--- src/preferences/client.rs.orig
+++ src/preferences/client.rs
@@ -16,7 +16,7 @@ use crate::{
     application::EuphonicaApplication,
     client::{
         ClientState, ConnectionState,
-        password::{get_mpd_password_async, set_mpd_password},
+        password::{get_mpd_password_async, secret_service_available_async, set_mpd_password},
         state::StickersSupportLevel,
     },
     player::{FftStatus, Player},
@@ -394,19 +394,21 @@ impl ClientPreferences {
             .set_text(&conn_settings.uint("mpd-port").to_string());
         let password_field = imp.mpd_password.get();
         glib::spawn_future_local(async move {
-            match get_mpd_password_async().await {
-                Ok(maybe_password) => {
-                    // At startup the password entry is disabled with a tooltip stating that
-                    // the credential store is not available.
-                    password_field.set_sensitive(true);
-                    password_field.set_tooltip_text(None);
-                    if let Some(password) = maybe_password {
-                        password_field.set_text(&password);
+            if secret_service_available_async().await {
+                match get_mpd_password_async().await {
+                    Ok(maybe_password) => {
+                        // At startup the password entry is disabled with a tooltip stating that
+                        // the credential store is not available.
+                        password_field.set_sensitive(true);
+                        password_field.set_tooltip_text(None);
+                        if let Some(password) = maybe_password {
+                            password_field.set_text(&password);
+                        }
                     }
+                    Err(e) => {
+                        println!("{e:?}");
+                    }
                 }
-                Err(e) => {
-                    dbg!(e);
-                }
             }
         });
 
@@ -492,10 +494,18 @@ impl ClientPreferences {
                 }
 
                 let password_val = this.imp().mpd_password.text();
+                let password_available = this.imp().mpd_password.is_sensitive();
                 glib::spawn_future_local(clone!(
                     #[weak]
                     app,
                     async move {
+                        if !password_available {
+                            if let Err(e) = app.refresh().await {
+                                dbg!(e);
+                            }
+                            return;
+                        }
+
                         let password: Option<&str> = if password_val.is_empty() {
                             None
                         } else {
