monitorv2 + hyprctl keyword monitor disable causes all Wayland clients to crash #12996
Replies: 7 comments
Additional: journalctl outputThe "error in client communication" messages appear in journalctl (from These PIDs correspond to the crashed Wayland clients (ghostty, chromium, etc.). |
|
This is definetely a bug and Hyprland should not crash with this command. But according to this discussion when you use monitorv2 in the config you should disable monitor with |
|
Hmm I feel like this is my doing :(, could you try #13154 and see if it's fixed |
|
have the same problem, in my case I have the LID configs, and when I close and open the laptop lid, everything crashes this happened in the past, like 1 year ago, then it started not being a problem anymore, and now this problem seems very similiar. |
|
Hitting the same "connect → all Wayland clients die" pattern on 0.55.0 (so post- #13154), but triggered by a physical plug, not hyprctl ... disable. Plugging in my third monitor over HDMI emits two udev events back-to-back - aquamarine processes them as disconnect then connect on the same connector within milliseconds, and the new monitor's wl_output global is advertised then removed before clients finish binding. All clients attached to the registry die with Protocol error. Clients killed at the plug moment (id 71 = the new monitor's own wl_output)ksecretd: wl_registry#2: error 0: global wl_output (71) is unavailable nextcloud: wl_registry#2: error 0: global wl_output (71) is unavailable vicinae: wl_registry#2: error 0: global wl_output (71) is unavailable XWAYLAND: wl_registry#2: error 0: global wl_output (71) is unavailable XWAYLAND: failed to dispatch Wayland events: Protocol error kwalletd6: The Wayland connection experienced a fatal error: Protocol error xdg-desktop-portal-gtk: Error 71 (Protocol error) dispatching to Wayland display. blueman-applet / blueman-tray: Error 71 (Protocol error) polkit-kde-authentication-agent-1: fatal error: Protocol error Hyprland log: ~13 error in client communication (pid …) lines, one per killed client. Hyprland itself stays up.Affected this session: Firefox (via XWayland), XWayland, kwalletd6, ksecretd, vicinae, nextcloud, blueman-applet, blueman-tray, xdg-desktop-portal-gtk, polkit-kde-agent. Aquamarine DRM trace, one plug cycledrm: Got a hotplug event for /dev/dri/card1 drm: Connector HDMI-A-1 disconnected drm: Disabling output HDMI-A-1 drm: Connector HDMI-A-1 is not connected, removing old crtc 267 drm: Got a hotplug event for /dev/dri/card1 drm: Connector HDMI-A-1 connected drm: Connecting connector HDMI-A-1, CRTC ID 267 drm: Modesetting HDMI-A-1 with 1920x1080@75.00Hz [×4 during settling]Environment: Monitors: eDP-1 Caltech 2560×1600 scale 1.6 @ 0,0; DP-1 Dell P2723DE 2560×1440 @ -2560,-360; HDMI-A-1 MSI MD271P 1920×1080@75 @ -4480,-360 (the one plugged). Ruled out: wildcard monitor=,… fallback (removed), 75Hz refresh rate →happens on 60Hz too, geometry mismatch (y-aligned MSI to Dell, silenced pixman warnings, didn't help), 0.54.3 → 0.55.0 upgrade, modeset failure (modeset succeeds). 100% reproducible on plug-in. |
|
Still reproducing on 0.56.2, and also through the new Lua config provider ( The Lua equivalent of a specific-output Confirming the catch-all vs specific-output claimI can corroborate the original report. Same machine, same trigger, only the config differed — and I went back and forth over several lid cycles:
Adding the specific-output rule reliably produced the mass kill; removing it made lid cycles clean again and they have stayed clean since. So on 0.56.2 an explicit output rule for the monitor being disabled is the difference between losing one client and losing the session. Journal at the moment of one lid close: It fires on both edges of the lid switch — once on close and again on open, ~7s apart. Two notes that may help triage
Practical consequence for usersThe only safe configuration I found is a catch-all rule with no per-output rules at all. That rules out pinning a laptop panel to Related: #15635 described the same registry bind race but was auto-closed by the issue bot rather than triaged. Filed by Claude Opus 5 via Claude Code, on behalf of the machine's owner. |
|
Follow-up to my earlier report, with a root cause and a config-side mitigation for the MST-fold case, in case it helps others hitting this. Why reloads kept destroying the output: the reload reconciler skips any monitor whose live state already matches its rule ( Mitigation that works today (verified on Hyprland 0.56.2: repeated reloads and theme switches, the tile never left mirror state, zero client deaths): persist the fold decision ( PR #14693 ( |
Uh oh!
There was an error while loading. Please reload this page.
Bug:
hyprctl keyword monitor disablecrashes all Wayland clients when monitorv2 has a specific output ruleDescription
When a
monitorv2 { }block has a specificoutput = <name>matching the monitor being disabled, runninghyprctl keyword monitor "<name>,disable"crashes all Wayland clients with "error in client communication".A catch-all
monitorv2 { output = }works fine.Environment
Minimal Reproduction
Requirements: Two monitors (so you can disable one safely)
Config that WORKS (catch-all only):
Result: Monitor disables, all clients keep running ✅
Config that CRASHES (specific output rule):
Result: All Wayland clients crash ❌
Debug Log (with
debug:disable_logs = false)Errors during crash:
Analysis
The log shows that:
Applying monitor rule for eDP-2)With
monitor = ...(v1 syntax), this re-enable doesn't happen and disable works correctly.Notes
monitor = eDP-2, preferred, auto, 1(v1 syntax) works fineWorkaround
Use
monitor = ...(v1) syntax instead ofmonitorv2 { }for monitors you need to disable.All reactions