我有一个bash脚本,我想在其中向用户显示图像。使用ImageMagick的display
可以做到这一点。
display image.png
但是现在终端窗口的焦点丢失了,并被放置到图像上。要继续我的bash脚本,我必须要求用户在继续之前单击终端。这是不想要的行为。
有没有一种方法可以显示图像而不丢失bash终端的焦点?我希望它能在Ubuntu Linux(12.04)上运行。
最佳答案
这是使用wmctrl
的一个不太尴尬的解决方案:
wmctrl -T master$$ -r :ACTIVE: ; display image.png & sleep 0.1 ; wmctrl -a master$$
为了说明,我将其分解为以下步骤:
wmctrl -T master$$ -r :ACTIVE:
要控制窗口,
wmctrl
需要知道其名称,默认情况下,其名称是其窗口标题。因此,此步骤将当前窗口分配给唯一名称master$$
, shell 程序将在其中将$$
扩展为进程ID号。您可能需要选择其他名称。 display image.png &
此步骤将您的图像显示为“背景”过程。图像窗口将捕获焦点。
我们需要等待足够的时间,以便
display
打开其窗口。 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"