如何在KDE/Plasma5活动中列出窗口

3

我正在尝试编写一个脚本,如果应用程序没有运行,则启动该应用程序,或者如果窗口已在当前活动中可见,则激活该窗口。

使用xdotoolwmctrl,我可以获取窗口列表并将它们激活。如果它们没有打开,那么我就可以启动它们。但是问题出现在KDE活动中。即使它们在当前活动中不可见,这些工具也会列出所有活动的窗口。

我正在查看各种qdbus方法,但没有找到任何接近的东西。

有人创建过这样的脚本吗?如何才能获得与活动相关的窗口可见性?

编辑: 如下图所示,我能够看到窗口附加到的活动ID。但是我没有找到任何以编程方式获取它的方法。

enter image description here


我无法想象没有办法做到这一点。我的意思是,显然任务管理器知道这一点,因为它能够仅显示当前活动的窗口,但我不擅长 C 语言,无法确定是否可以使用它(代码 @ https://github.com/KDE/plasma-desktop/blob/master/applets/taskmanager/plugin/backend.cpp)... 我还希望通过类似于 qdbus org.kde.ActivityManager /ActivityManager/Resources/Linking IsResourceLinkedToActivity :global <PID> :current 的方式检查 dbus 是否有所帮助(请参见 https://github.com/alxlg/ff-kactivities),但没有.. 有任何更新吗? - Chris Stenkamp
1个回答

0

kde论坛中提供了一种替代方法。但不完全清楚它是否可以帮助解决您的问题。

推荐如下:

在活动级别上,您可以利用URI &gt;活动关系并查询dbus以进行进一步的脚本编写。例如:

  1. 将目录链接到海豚中的活动。
  2. 向应用程序启动器添加“ dolphin-directive”并使其运行自定义脚本以有条件地启动海豚实例。
  3. 将“ dolphin-directive”设置为默认文件管理器

每个文件类型都可以通过文件关联设置执行类似的工作流程

通过实验,我发现无法通过ActivityManager将窗口链接到活动并查询关系。我猜测“多屏幕工作区URI活动窗口规则体系结构”旨在以更全面的方式设置工作流程来解决该问题。但是希望有人能够在这里给出更好的答案。

我写了一个脚本,用于正则表达式检查整个会话总线树中相关和有用的方法。您可以通过./query-dbus.py --pattern "^.*activit.*$"简单地使用它。所以答案正在进行中。

编辑:一些服务确实拥有方法isMonitorActivityisOnActivity

"org.kde.konsole": {
    "/Sessions/1": {
      "org.kde.konsole.Session": {
          "method": [
            "setMonitorActivity",
            "isMonitorActivity"
          ]
      }
    }
}
    

"org.kde.kate": {
    "/MainApplication": {
      "org.kde.Kate.Application": {
          "method": [
            "isOnActivity"
          ]
      }
    }
  }
}

你已经提交了功能请求吗?


实际上,有一个DBus方法org.kde.ActivityManager "/ActivityManager/Resources/Linking"可以监听窗口链接到活动。但是我没有成功完成我的实验。 - Noortheen Raja
我是在论坛上发布那个问题的 :) 我还发布了一张截图,可能对你有帮助。 - Noortheen Raja
很遗憾,我缺少 9 分声誉才能评论您的帖子。所以: 太棒了!我也查看了您提到的控制台,并找到了窗口的资源名称,我需要通过调用ActivityManager/Resource/Linking/isResourceLinkedToActivity 方法来查询链接。 - domson
1
请发布一下如果您有一个脚本。 - Noortheen Raja
你对“/ActivityManager/Resources/Linking”进行的实验结果如何? - domson
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接