类似 wmctrl 的工具或 kde wayland 的替代品

类似 wmctrl 的工具或 kde wayland 的替代品

我的工作流程的很大一部分是基于使用快捷方式。目前,我使用 xbindkeys 和 wmctrl 来运行或引发应用程序。例如:Super+F调出 Firefox,如果没有运行则运行它。

Autokey 在 KDE 上工作得很好,我也可以使用 KDE 本机自定义快捷方式管理器来替换xbindkeys,但我找不到(我在 google 上搜索了很多)一种方法来确定窗口/应用程序是否正在运行,如果没有,则引发它。

我可能可以使用ps或类似的命令来查找应用程序是否正在运行,如果没有,则启动它,但这涉及到最后一个问题:如何以编程方式引发(或聚焦)现有正在运行的窗口/应用程序?

GNOME似乎有某种gdbus解决方案,但当然这在 KDE 中不起作用。

有人知道我能做什么吗?

答案1

经过大量研究,我找到了一个仅适用于 KDE 且仅适用于 KDE 的解决方案:使用 kwin 脚本。

脚本是:

  1. 用于pgrep查看程序是否正在运行(有用的命令grep
  2. 如果运行:
    1. 安装一个即时 kwin 脚本,该脚本将使用传递的类名或标题显式“激活”窗口
    2. 运行脚本
    3. 停止脚本
    4. 卸载脚本
  3. 如果未运行:运行命令来启动它。

例如,假设我想要聚焦或启动 Firefox,我会使用我的脚本:

ww -f firefox -c firefox

-f:窗口类名
-c:如果未运行则运行的命令
-fa:使用窗口标题而不是类的替代过滤器

这是脚本我现在正在使用并且效果很好。

答案2

自动键脚本将聚焦火狐浏览器如果它正在运行或启动,如果没有运行则将其聚焦:

output = system.exec_command("wmctrl -l", getOutput=True)
if "Firefox" in output:
    window.activate("Firefox",switchDesktop=True)
else:
    subprocess.Popen(["firefox"])

请注意,我使用了子进程.Popen函数,因为它允许您执行其他代码和/或与进程交互子进程.通信进程运行时起作用。

相关内容