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

时间:2014-08-30 18:38:23

标签: linux image bash imagemagick displayobject

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

display image.png

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

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

Focus lost

4 个答案:

答案 0 :(得分:8)

使用wmctrl

这是一个不太尴尬的解决方案
wmctrl -T master$$ -r :ACTIVE: ; display image.png & sleep 0.1 ; wmctrl -a master$$

为了解释,我会将其分解为步骤:

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

    要控制窗口,wmctrl需要知道其名称,默认情况下是窗口名称。因此,此步骤将当前窗口分配给唯一名称master$$,其中shell将$$扩展为进程ID号。您可能想要选择其他名称。

  2. display image.png &

    此步骤将您的图像显示为“后台”流程。图像窗口将抓住焦点。

  3. 睡眠0.1

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

  4. wmctrl -a master$$

    现在,我们从display获取焦点。如果您在步骤1中为主窗口选择了其他名称,请在此处使用该名称代替master$$

  5. 如果您的系统上未安装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"
    

答案 1 :(得分:0)

在不失去终端焦点的情况下,您可以使用崇高文字打开任何图片

  

subl image.png

答案 2 :(得分:0)

除了John1024 answer之外的


还有另一种获取活动窗口的方法:

$ xdotool getwindowfocus

并设置焦点:

$ xdotool windowfocus <wid>

因此完整的命令应如下所示(请注意选项-i,这一点很重要!):

$ wid=$(xdotool getwindowfocus); display image.png & sleep 0.1; xdotool windowfocus $wid

p.s。阅读有关xdotool的信息。

答案 3 :(得分:0)

您可以使用picterm,它是为此目的而创建的:https://github.com/artemsen/picterm