微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用terminal显示图像,而不会失去焦点

我有一个bash脚本,我想要显示一个图像给用户。 这是可能的使用ImageMagick的display 。

display image.png

但是现在,terminal窗口的焦点丢失了,被放置在图像上。 要继续我的bash脚本,我必须要求用户在继续之前点击terminal。 这是不想要的行为。

有没有办法显示一个图像,而不会丢失我的bashterminal的重点? 我希望它能在Ubuntu Linux上运行(12.04)。

为什么调用一个shell脚本目标创build一个可执行文件

识别并从文本文件删除特定的隐藏字符

将所有在Linux控制台input的命令及其结果复制到一个文件

如何判断用户是否select了“terminal运行”

在linux中,如何使用命令`source〜/ x.sh〜/ dir`的参数?

如何执行Windows cmd的git日志?

Ncurses阅读数字键和逃脱

在Linux shell脚本中,'x = $ {1:3:1}'是什么意思?

如何将PHP数组传递给BASH脚本?

Linux Bash – 将错误redirect到文件

这是一个不太尴尬的解决方案,使用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支持启蒙,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"

不失端子的重点,你可以使用崇高的文字打开任何图像

subl image.png

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐