kovidgoyal/kitty · warning
the settings did not come from the desktop-ui kitten. Some o
Error message
the settings did not come from the desktop-ui kitten. Some other portal backend is providing the service.
What it means
show_settings verifies a canary namespace/key pair (SETTINGS_CANARY_NAMESPACE/KEY) that only the kitty desktop-ui portal itself sets. If absent, another portal backend (GNOME/KDE's) is servicing the ReadAll call, and without --allow-other-backends the command refuses to continue.
Source
Thrown at kittens/desktop_ui/portal.go:310
if err != nil {
return fmt.Errorf("Failed to format the response as JSON: %w", err)
}
fmt.Println(string(j))
} else {
for ns, m := range response {
fmt.Println(ns + ":")
for key, v := range m {
fmt.Printf("\t%s: %s\n", key, v)
}
}
}
if !opts.AllowOtherBackends {
is_running_self := false
if m, found := response[SETTINGS_CANARY_NAMESPACE]; found {
_, is_running_self = m[SETTINGS_CANARY_KEY]
}
if !is_running_self {
err = fmt.Errorf("the settings did not come from the desktop-ui kitten. Some other portal backend is providing the service.")
}
}
return
}
var DataDirs = sync.OnceValue(func() (ans []string) {
// $XDG_DATA_DIRS defines the preference-ordered set of base directories
// to search for data files **in addition to the $XDG_DATA_HOME** base
// directory. The directories in $XDG_DATA_DIRS should be separated with
// a colon ':'.
// https://specifications.freedesktop.org/basedir-spec/0.8/#variables
data_dirs := os.Getenv("XDG_DATA_DIRS")
if data_dirs == "" {
data_dirs = "/usr/local/share:/usr/share"
}
data_home := os.Getenv("XDG_DATA_HOME")
if data_home == "" {View on GitHub (pinned to 6d5d0c4406)
Solutions
- Pass --allow-other-backends if you intentionally want to read another backend's settings
- Run `kitten desktop-ui enable` and restart xdg-desktop-portal so the kitty backend is registered and selected
- Check portal backend selection with busctl --user to confirm which impl is active
Example fix
# before kitten desktop-ui show-settings # after kitten desktop-ui show-settings --allow-other-backends
Defensive patterns
Strategy: fallback
Validate before calling
// detect kitty backend before relying on settings
resp, _ := fetchSettings(conn, SETTINGS_CANARY_NAMESPACE)
if _, ok := resp[SETTINGS_CANARY_KEY]; !ok {
// use --allow-other-backends path
} Type guard
func isKittyBackend(resp ReadAllType) bool {
m, ok := resp[SETTINGS_CANARY_NAMESPACE]
if !ok { return false }
_, ok = m[SETTINGS_CANARY_KEY]
return ok
} Try / catch
if err := showSettings(opts); err != nil {
if strings.Contains(err.Error(), "Some other portal backend") {
opts.AllowOtherBackends = true
err = showSettings(opts)
}
} Prevention
- Run `kitten desktop-ui enable` and restart the portal on new setups
- Pass --allow-other-backends when intentionally querying DE backends
When it happens
Trigger: Running show-settings while the desktop portal service is provided by the desktop environment's own backend instead of the kitty kitten portal.
Common situations: kitten desktop-ui enable never run or the portal not restarted after enabling; a full desktop environment (GNOME/KDE) whose portal takes precedence; reading settings on a machine where only the DE backend exists.
Related errors
- Failed to read response from ReadAll with error: %w
- failed to export interface: %s at object path: %s with error
- failed to export properties with error: %w
- failed to export introspected methods with error: %w
- could not connect to session D-Bus: %s
AI-assisted analysis of kovidgoyal/kitty@6d5d0c4406 (2026-08-27).
Data as JSON: /api/errors/2361e71aef6e1b41.
Report an issue: GitHub.