You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在X11中取消全屏显示?

解决X11全屏退出问题

直接有效退出代码

要退出全屏模式,只需修改你发送的ClientMessage操作码,保持目标状态为_NET_WM_STATE_FULLSCREEN,将操作类型从**添加(1)改为移除(0)**即可,完整代码如下:

Atom wm_state = XInternAtom(display->display, "_NET_WM_STATE", 1);
Atom wm_fullscreen = XInternAtom(display->display, "_NET_WM_STATE_FULLSCREEN", 1);
XEvent xev;
memset(&xev, 0, sizeof(xev));
xev.type = ClientMessage;
xev.xclient.window = display->window;
xev.xclient.message_type = wm_state;
xev.xclient.format = 32;
xev.xclient.data.l[0] = 0;  // 关键:0表示移除状态
xev.xclient.data.l[1] = wm_fullscreen;
xev.xclient.data.l[2] = 0;
XSendEvent(display->display, DefaultRootWindow(display->display), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev);
XFlush(display->display);  // 确保消息立即发送到X服务器

为什么你的尝试无效

你之前替换成_NET_WM_STATE_HIDDEN等原子是错误的逻辑:退出全屏的核心是移除窗口已有的全屏状态,而非替换成其他状态。窗口管理器只会响应针对当前已激活状态的移除操作。

原全屏代码逻辑简要说明

这段代码遵循EWMH窗口管理器规范:

  • _NET_WM_STATE是用于修改窗口状态的标准原子
  • data.l[0]定义操作类型:
    • 1 = 添加指定状态(进入全屏)
    • 0 = 移除指定状态(退出全屏)
    • 2 = 切换指定状态(全屏/非全屏切换)
  • 消息发送给根窗口,让窗口管理器处理窗口状态变更(因为窗口管理器负责窗口的布局和状态管理)

内容的提问来源于stack exchange,提问作者Bitenco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 22:30:48