I'm posting here, because i have no idea how to search for this.
When exploring GTK programming, I ran into a very specific problem:
I created an application that crashes when i open a GtkDropDown, so to debug the crash I ran my app inside GDB. When GDB notices an application crashing, it freezes it, so i can analyze the state in which it crashed. The GtkDropDown grabs the pointer, like rofi
or i3lock
grab the pointer to prevent the window manager from exercising any keyboard shortcuts. Problem is now, the application gets frozen while the pointer is grabbed, so I'm basically locked out of my window manager.
To close the application, I can just log into a TTY and kill the GDB process, but I would like to have a simpler solution, that possibly doesn't kill the application.
Is there a way with Xorg to get out of such a situation without switching to the TTY? If not, why can a single user application completely prevent you from using anything in your graphical environment?
Because Xorg bad? Should I switch to Wayland?
Solution (thanks to @trachemys@iusearchlinux.fyi):
- switch to TTY and log in
export DISPLAY=':0'
setxkbmap -option grab:break_actions
xdotool key XF86Ungrab
My comment above should be taken with a grain of salt.
It works in many cases. From a privacy/security standpoint, it is a nightmare since any program can just access all other windows. Multiple monitor setups with different scaling don't work at all. …
While the git repo receives some commits, most of them are fixes for xwayland. Most X11 contributors that are still active are working on wayland now. See https://gitlab.freedesktop.org/xorg/xserver/-/commits/master and (not so serious) https://floss.social/@XOrgFoundation/110769221673585385
Ah, I've almost always used a single monitor setup, so my use case wasn't weird enough to break X11. That said. Even Wayland is wonky on my multi monitor setup at work, though that's probably more a GNOME thing than a Wayland thing.
I do still think the approach they took with Wayland is a tad odd, in that everyone has to implement it themselves. But hey, if it works, it works.