![将 Linux 中的 GUI 程序限制为只有一个实例](https://linux22.com/image/1246211/%E5%B0%86%20Linux%20%E4%B8%AD%E7%9A%84%20GUI%20%E7%A8%8B%E5%BA%8F%E9%99%90%E5%88%B6%E4%B8%BA%E5%8F%AA%E6%9C%89%E4%B8%80%E4%B8%AA%E5%AE%9E%E4%BE%8B.png)
有些 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
一般情况下,必须修改应用程序源代码。这不是操作系统能做的事情。