我有一个bash脚本,我想在其中向用户显示图像。这可以使用ImageMagick的display
。
display image.png
但是现在终端窗口的焦点丢失了,并且被放置在图像上。要继续我的bash脚本,我必须要求用户在继续之前单击终端。这是不受欢迎的行为。
有没有办法在不丢失我的bash终端焦点的情况下显示图像?我想让它在Ubuntu Linux(12.04)上运行。
答案 0 :(得分:8)
使用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 &
此步骤将您的图像显示为“后台”流程。图像窗口将抓住焦点。
睡眠0.1
我们需要等待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"
答案 1 :(得分:0)
在不失去终端焦点的情况下,您可以使用崇高文字打开任何图片
subl
image.png
答案 2 :(得分:0)
。
还有另一种获取活动窗口的方法:
$ 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