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

  1. Pass --allow-other-backends if you intentionally want to read another backend's settings
  2. Run `kitten desktop-ui enable` and restart xdg-desktop-portal so the kitty backend is registered and selected
  3. 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

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


AI-assisted analysis of kovidgoyal/kitty@6d5d0c4406 (2026-08-27). Data as JSON: /api/errors/2361e71aef6e1b41. Report an issue: GitHub.