gpt4 book ai didi

linux - 使用终端显示图像而不会失去焦点

转载 作者:IT王子 更新时间:2023-10-29 00:57:15 25 4
gpt4 key购买 nike

我有一个 bash 脚本,我想在其中向用户显示图像。这可以使用 ImageMagick 的 display 实现。

display image.png

但是现在终端窗口的焦点丢失了,并且放在了图像上。要继续我的 bash 脚本,我必须要求用户在继续之前单击终端。这是不受欢迎的行为。

有没有办法在不失去 bash 终端焦点的情况下显示图像?我希望它能在 Ubuntu Linux (12.04) 上运行。

Focus lost

最佳答案

这是一个不太尴尬的解决方案,使用 wmctrl :

wmctrl -T master$$ -r :ACTIVE: ; display image.png & sleep 0.1 ; wmctrl -a master$$

为了解释,我将把它分解成几个步骤:

  1. wmctrl -T master$$ -r :ACTIVE:

    要控制一个窗口,wmctrl需要知道它的名称,默认情况下是它的窗口标题。因此,此步骤将当前窗口分配给一个唯一名称 master$$外壳将在哪里扩展 $$到进程 ID 号。您可能想选择一个不同的名称。

  2. display image.png &

    此步骤将您的图像显示为“后台”进程。图像窗口将捕获焦点。

  3. sleep 0.1

    display 我们需要等待足够的时间打开它的窗口。

  4. wmctrl -a master$$

    现在,我们从 display 夺回焦点.如果您在第 1 步中为主窗口选择了不同的名称,请在此处使用该名称代替 master$$。 .

如果wmctrl你的系统上没有安装,你需要安装它。在类似 debian 的系统上,运行:

apt-get install wmctrl

wmctrl支持 Enlightenment、icewm、kwin、metacity、sawfish 和所有其他 EWMH/NetWM 兼容的 X 窗口管理器。

不需要知道窗口标题的替代方法

首先获取当前窗口的ID:

my_id=$(wmctrl -l -p | awk -v pid=$PPID '$3 == pid {print $1}')

我们现在可以使用此 ID 代替窗口标题。发射display同时在当前窗口中保持焦点:

display image.png & sleep 0.1 ; wmctrl -i -a "$my_id"

关于linux - 使用终端显示图像而不会失去焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25585625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com