{"record":{"id":"5f27e4bd32774895","repo":"kovidgoyal/kitty","slug":"failed-to-change-panel-configuration-for-os-window","errorCode":null,"errorMessage":"Failed to change panel configuration for OS Window {os_window_id}","messagePattern":"Failed to change panel configuration for OS Window (.+?)","errorType":"exception","errorClass":"RemoteControlErrorWithoutTraceback","httpStatus":null,"severity":"error","filePath":"kitty/rc/resize_os_window.py","lineNumber":149,"sourceCode":"                    if payload_get('incremental'):\n                        existing = layer_shell_config_for_os_window(os_window_id)\n                        if existing is None:\n                            raise RemoteControlErrorWithoutTraceback(f'The OS Window {os_window_id} has no panel configuration')\n                        from kittens.panel.main import incrementally_update_layer_shell_config\n\n                        try:\n                            lsc = incrementally_update_layer_shell_config(existing, panels)\n                        except Exception as e:\n                            raise RemoteControlErrorWithoutTraceback(str(e))\n                    else:\n                        from kitty.launch import layer_shell_config_from_panel_opts\n\n                        try:\n                            lsc = layer_shell_config_from_panel_opts(panels)\n                        except Exception as e:\n                            raise RemoteControlErrorWithoutTraceback(f'Invalid panel options specified: {e}')\n                    if not set_layer_shell_config(os_window_id, lsc):\n                        raise RemoteControlErrorWithoutTraceback(f'Failed to change panel configuration for OS Window {os_window_id}')\n                elif ac == 'toggle-visibility':\n                    toggle_os_window_visibility(os_window_id)\n                elif ac == 'hide':\n                    toggle_os_window_visibility(os_window_id, False)\n                elif ac == 'show':\n                    toggle_os_window_visibility(os_window_id, True)\n                elif ac == 'toggle-fullscreen':\n                    if not toggle_fullscreen(os_window_id):\n                        raise RemoteControlErrorWithoutTraceback(f'The OS Window {os_window_id} is a desktop panel that cannot be made fullscreen')\n                elif is_panel:\n                    raise RemoteControlErrorWithoutTraceback(\n                        f'The OS Window {os_window_id} is a desktop panel, no actions other than resizing are supported for it'\n                    )\n                elif ac == 'resize':\n                    boss.resize_os_window(\n                        os_window_id,\n                        width=payload_get('width'),\n                        height=payload_get('height'),","sourceCodeStart":131,"sourceCodeEnd":167,"githubUrl":"https://github.com/kovidgoyal/kitty/blob/6d5d0c440603ad9bdf6dcd599f73f6dde21acb44/kitty/rc/resize_os_window.py#L131-L167","documentation":"Raised when set_layer_shell_config returns falsy, meaning kitty's backend failed to apply the new layer-shell configuration to the window. This is a compositor/protocol-level failure: the wlr-layer-shell protocol negotiation or apply request did not succeed, not a payload problem.","triggerScenarios":"Running os-panel resize on Wayland setups where the compositor does not support wlr-layer-shell or rejects the requested configuration; the window's layer surface having been destroyed concurrently.","commonSituations":"Running kitty on wlroots-incompatible compositors (some GNOME/Mir setups); panel surface already closed when the command arrives; racing a panel close with a resize script.","solutions":["Confirm you are on Wayland with a compositor supporting wlr-layer-shell (sway, Hyprland, most wlroots compositors)","Retry after re-checking the window still exists (kitty @ ls) — the surface may have died mid-command","Recreate the panel and reapply the configuration","If the compositor genuinely lacks layer-shell, use a normal window + --action=resize instead of panels"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"import os\nassert os.environ.get('WAYLAND_DISPLAY'), 'layer-shell panels need Wayland'\n# optional: check compositor advertises wlr-layer-shell via wayland-info","typeGuard":null,"tryCatchPattern":"try:\n    apply_panel_config(win, lsc)\nexcept RCError as e:\n    if 'Failed to change panel configuration' in str(e):\n        fall_back_to_normal_window_resize(win)","preventionTips":["Test panel support on the target compositor once at startup","Recreate panels on failure rather than looping retries","Avoid racing panel close with resize commands"],"tags":["kitty","remote-control","os-panel","wayland","layer-shell","compositor"],"backgroundTag":"compositor-unsupported-feature","analyzedSha":"6d5d0c440603ad9bdf6dcd599f73f6dde21acb44","analyzedAt":"2026-08-27T14:20:20.142Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}