有些 GUI 程序,如果您从菜单中选择它们,如果它们已经打开,则该窗口将位于最前面,而不是打开新实例。但是,有些程序会打开自身的多个实例。
某个程序表现出后一种行为,但我希望它执行前一种行为。该怎么做?
答案1
我建议将该程序的链接替换为shell 脚本那检查程序是否正在运行,如果是,则使用窗口管理器将程序置于最前面的功能,如果尚未启动,则启动它。
答案2
我找到了这个线程并实现了它,并分享了我的版本。
我创建了一个/usr/local/bin/run_once.sh
包含
#! /bin/bash
application=$1
if wmctrl -xl | grep "${application}" > /dev/null ; then
# Already running, raising to front
wmctrl -x -R "$application"
else
# Not running: starting
$@
fi
这将检查wmctrl
您尝试启动的应用程序是否已打开一个窗口(某些 GUI 程序会使没有 GUI 的工作程序保持运行),而不是使用ps
,使用 -x 来使用WM_CLASS
而不是标题栏名称。
对于每个我只想要一个窗口的程序,我将系统.desktop
文件复制到~/.local/share/applications
并将exec
字段从更改exec=program --arguments
为exec=/usr/local/bin/run_once.sh program --arguments
答案3
一般情况下,必须修改应用程序源代码。这不是操作系统能做的事情。