我有一个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脚本?
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] 举报,一经查实,本站将立刻删除。