将 Linux 中的 GUI 程序限制为只有一个实例

将 Linux 中的 GUI 程序限制为只有一个实例

有些 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 --argumentsexec=/usr/local/bin/run_once.sh program --arguments

答案3

一般情况下,必须修改应用程序源代码。这不是操作系统能做的事情。

相关内容