允许鼠标事件通过终端

允许鼠标事件通过终端

我使用一台屏幕较小的笔记本电脑工作,无法像在工作时那样在这台机器上使用多个显示器。我已将终端设置为透明,这样我就可以看到我在终端后面的浏览器上开发的任何内容,但我希望能够通过终端点击并直接与浏览器交互。

除了谷歌搜索之外,我没有尝试任何其他方法,因为我没有这方面的经验。

编辑:“可能重复”问题并没有回答我的问题,因为它基本上只是编写了一个脚本,用于更快地进行 alt+tab 窗口切换。我使用 alt+tab 切换窗口没有问题,我只是希望根本不需要切换窗口。我希望我的鼠标与浏览器交互,而我的键盘与终端交互。

答案1

为什么这是不可能的

您所问的问题基本上是不可能的。为了便于解释,有两种类型的图形桌面:堆叠和平铺。Unity 是堆叠桌面的一个例子,其中您有一堆窗口(有点像自助餐厅托盘堆栈),其中当前活动窗口是最上面的窗口。

X11 中已定义了鼠标行为,单击窗口会将其置于堆栈顶部。虽然有方法将窗口置于其他窗口之下(最值得注意的是wmctrl),但如果不将窗口调至焦点,则无法点击窗口。不幸的是,这不能进行调整 - 除非您愿意自己为 GUI 创建某种形式的新层,到目前为止我还没有听说过任何这样的项目。

如果您提出请求,我甚至可以为这个问题提供悬赏,但我敢打赌,不会有答案能够满足您的确切要求。

某种程度上的解决办法

可以这样做:将透明终端窗口设置为最小尺寸,将其设置为“始终在顶部”,然后单击窗口本身周围的任何内容。

在此处输入图片描述 在此屏幕截图中,您可以看到两种方法:一种是通过默认的右键单击窗口边框,另一种是通过wmctrl命令。最后一种方法可以允许使用脚本方法,但基本前提是相同的 - 您必须单击终端本身周围的任何内容。

可能的替代方案

  • 有下拉终端,例如Guake。您可以有一个链接到 F12 键的下拉终端,窗口保持在顶部,您可以单击周围的一切
  • 使用分屏显示终端和所需的其他窗口相互联系

Guake 示例

在此处输入图片描述

答案2

反问:

您想要一个“现成的”解决方案还是打算编写自己的 C 程序?

如果您想要一个“即用型”解决方案,我想您找不到任何解决方案:只有少数人需要这样的东西,所以我认为到目前为止还没有人实施过这样的程序。

如果您想自己编写这样的程序,我会尝试执行以下操作:

编写一个程序,该程序有一个大窗口(覆盖(几乎)整个屏幕),透明度为 100%。(不幸的是,我从未使用过透明度,所以我不知道这是否真的有效。)

为此,请使用低级 X11 库 (libX11),而不要使用高级 API (Gnome 等)。

因为这个窗口位于前台,所以它将接收所有键盘和鼠标信息。

使用 XSendEvent() API 在控制台和浏览器中模拟键盘和鼠标事件...

不幸的是,这并不像听起来那么容易。特别是在浏览器中模拟鼠标事件并不容易!

相关内容