如何禁止关闭窗口

如何禁止关闭窗口

听起来可能有点荒谬,但我想防止在 Ubuntu 中关闭窗口。我想为我的用户提供一个高度安全的环境,没有任何只打开一个窗口的桌面环境。现在我想确保用户无法关闭该窗口。有没有办法破解 compiz,让用户无法关闭窗口。不是按关闭按钮,不是按 alt+f4 等?

我愿意使用 12.04 中可用的任何窗口管理器。compiz、metacity 和其他任何窗口管理器都可以。如果需要,我也愿意修改源代码。

编辑:仅从操作系统禁用 ALT+F4 并不能解决问题。这是因为某些应用程序在按下 ALT+F4 时发出关闭命令,甚至在事件冒泡到操作系统之前。我需要一种方法来剥夺应用程序本身关闭窗口的能力。

答案1

Compiz 使用窗口规则插件提供此功能。您可以指定要匹配的窗口(按名称、类型、ID 等),然后可以将规则应用于这些窗口。其中一条规则是防止窗口关闭。我使用这个插件很长时间了,可以确认它运行良好,可以防止键盘快捷键、关闭按钮以及任务栏上的右键单击和关闭。这几乎是一种防止窗口关闭的低级方法。

你也可以使用xprop来做这个(不需要 Compiz)。例如:

xprop -format _NET_WM_ALLOWED_ACTIONS 32a -set _NET_WM_ALLOWED_ACTIONS "_NET_WM_ACTION_MOVE, _NET_WM_ACTION_RESIZE, _NET_WM_ACTION_FULLSCREEN, _NET_WM_ACTION_MINIMIZE, _NET_WM_ACTION_SHADE, _NET_WM_ACTION_MAXIMIZE_HORZ, _NET_WM_ACTION_MAXIMIZE_VERT, _NET_WM_ACTION_CHANGE_DESKTOP, _NET_WM_ACTION_ABOVE, _NET_WM_ACTION_BELOW"

结合定位窗口ID来使用:

window_id=`wmctrl -l | grep Insert_Name_of_Window | head -n1 | cut -d" " -f1`
xprop -id "$window_id" -format _NET_WM_ALLOWED_ACTIONS 32a -set _NET_WM_ALLOWED_ACTIONS "_NET_WM_ACTION_MOVE, _NET_WM_ACTION_RESIZE, _NET_WM_ACTION_FULLSCREEN, _NET_WM_ACTION_MINIMIZE, _NET_WM_ACTION_SHADE, _NET_WM_ACTION_MAXIMIZE_HORZ, _NET_WM_ACTION_MAXIMIZE_VERT, _NET_WM_ACTION_CHANGE_DESKTOP, _NET_WM_ACTION_ABOVE, _NET_WM_ACTION_BELOW"

请注意,xprop这里修改的是允许的操作对于窗口,而不是窗口的状态。因此,如果您想防止窗口最小化,请删除操作_NET_WM_ACTION_MINIMIZE,等等。如果您确实想更改窗口的状态,使用wmctrl是一种更简单的工具。

尽管所有窗口管理器的默认允许操作列表可能相同,但您可能希望xprop | grep _NET_WM_ALLOWED_ACTIONS在之前的窗口上运行,以确保您重新设置了之前存在的所有其他操作。似乎没有办法xprop删除单个允许操作,只能删除整个属性。

就其万无一失/安全性而言,对于单个窗口来说,这可能是最好的了。通过删除_NET_WM_ACTION_CLOSE或其他允许的操作,这意味着不允许窗口接收该操作。无论用户尝试使用哪种方法关闭窗口,窗口都不会接收该操作。显然,要打造一个安全的桌面,还有更多组件,但这应该是防止窗口关闭的最佳方法。

但是,如果应用程序提供了关闭自身的方法(例如File > Quit),则当触发该方法时它将关闭。删除_NET_WM_ACTION_CLOSE可防止从窗口外部接收操作,但不会阻止窗口本身触发操作。

答案2

据我所知,正如你所说,有两种方法可以防止关闭窗口。禁用关闭按钮和 alt+f4

要在 Gnome 中禁用关闭、最小化、最大化按钮:Alt+F2 输入:gconf-editor 转到应用程序> metacity> 常规 双击按钮布局,您将看到菜单:最小化、最大化、关闭

您还可以使用 Gnome 调整工具来启用禁用菜单和按钮图标,该工具可在此处获得https://live.gnome.org/GnomeTweakTool

我认为您可以从那里删除那些您不想要的。

要禁用 atl+f4:在菜单中,转到系统 - 偏好设置 - 个人 - 键盘快捷键,禁用您想要的快捷键

相关内容