我最近从 Windows 切换到 Linux,并安装了一个应用程序启动器打电话给艾伯特,如果我有一个应用程序跑步(例如:chrome 或 vscode)如果我输入相同的应用程序名称在 alfred 中它将打开一个新窗户. 我正在寻找一个启动器,当应用程序没有运行否则将会重定向你到已经运行的窗口
谢谢。
答案1
大多数启动器的默认行为是让已启动的应用程序处理事情。启动器只会“启动”应用程序,即使它可能已经打开。在许多情况下,这会导致应用程序的新实例。在其他情况下,应用程序被编程为检查现有实例,如果存在,则对现有窗口执行某些操作。例如,Gimp 将“感知”它是否已在运行,并切换到现有实例而不是启动新实例。
这符合将“启动”与“切换到”分开的概念,有些人可能更喜欢这个概念。每当您想要转到现有实例时,您都会切换到它。当您希望启动新实例时,您会启动它。您始终知道启动器会为您提供一个新实例。有些人可能更喜欢这样,但其他人,比如您,可能有不同的偏好。
事实上有一个启动器是一个显著的例外:它是默认 Ubuntu 桌面的启动器,使用“Gnome Shell”。此启动器确实使用您所需的“启动或切换到”模型。
因此,我可以用一种简单的方式回答你的问题:不会两次启动同一应用程序的启动器是Ubuntu 桌面的默认启动器。
您更喜欢使用 Albert(可能您指的是 Albert,而不是 Alfred,后者是 Albert 的灵感来源),因为它轻量、快速且优雅。Albert 的路线图中将包含“启动或切换到”功能。目前,它还没有实现此功能。不过,这是 Linux,您可以破解它,让 Albert 或任何其他启动器实现您想要的行为。这个例子给了我们一些启发十年前的问题,但还有一种更简单的方法没有提到。
最简单的方法是使用如下一行命令启动命令:
wmctrl -a Calculator || gnome-calculator
这将使用实用程序检查wmctrl
是否存在“计算器”窗口。如果失败,则执行第二条命令,即启动该应用程序的命令。如果wmctrl
您的系统上未安装该应用程序,则可以使用命令进行安装sudo apt install wmctrl
。
实际上,您可以编辑.desktop
启动器,启动器使用它来启动应用程序的一个小文本文件。这些文件(以及其他文件)位于 中/usr/share/applications
。例如,/usr/share/applications/org.gnome.Calculator.desktop
除其他文件外,还包含以下行。
[Desktop Entry]
Name=Calculator
Comment=Perform arithmetic, scientific or financial calculations
Exec=gnome-calculator
Icon=org.gnome.Calculator
Type=Application
Categories=GNOME;GTK;Utility;Calculator;
该Exec=
行定义了应用程序如何启动。因此,如果您替换
Exec=gnome-calculator
经过
Exec=sh -c "wmctrl -a Calculator || gnome-calculator"
您将更改.desktop
文件的行为方式为“启动或切换到”。您需要sh -c "..."
在此处构造,因为.desktop
启动器不支持在同一Exec=
行中使用多个命令。
要安全地更改.desktop
启动器而无需管理员身份,请将.desktop
要更改的启动器复制到~/.local/share/applications
。然后您可以使用文本编辑器编辑它们。用户主文件夹下的更改.desktop
文件将替换 下系统范围内(针对所有用户)安装的文件/usr/share/applications
。
就我个人而言,我正在使用jumpapp
,一个基于相同原理的 bash 脚本。但它更高级,并且在后续调用时,可以在可能打开的不同窗口之间切换。
如果这对您来说太复杂,请尝试使用 Ubuntu 桌面的默认“全屏”启动器。我学会了使用 jumpapp 作为键盘快捷键(Super+W启动或切换到浏览器,Super+F启动或切换到文件管理器等)。