使用 wayland 在 ubuntu 22.04 中获取最前面的窗口?

使用 wayland 在 ubuntu 22.04 中获取最前面的窗口?

许多应用程序需要检索活动窗口的标题和应用程序的功能。使用 XProp 这不是问题。

xprop -root _NET_ACTIVE_WINDOW

即使使用 Wayland,也可以通过使用以下脚本来工作

!/usr/bin/env python3

import subprocess

if __name__ == "__main__":
    while 1 == 1:

        print('---------------')
        print('global.get_window_actors...')
        app_command = ("gdbus call -e -d org.gnome.Shell -o /org/gnome/Shell -m org.gnome.Shell.Eval global.get_window_actors\(\)[`gdbus call -e -d org.gnome.Shell -o /org/gnome/Shell -m org.gnome.Shell.Eval global.get_window_actors\(\).findIndex\(a\=\>a.meta_window.has_focus\(\)===true\) | cut -d\"'\" -f 2`].get_meta_window\(\).get_wm_class\(\)")
        app_process = subprocess.Popen(app_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        app_retval = app_process.stdout.read()
        app_retcode = app_process.wait()
        actorsApp = app_retval.decode('utf-8').strip()
        print(actorsApp)

        time.sleep(1)

然而,gnome 解决方案已经过时,因为他们在新版本中删除了这种可能性。

因此目前(2022 年 4 月 25 日)无法使用 Ubuntu 的最新 LTS 版本检索活动窗口名称。

所以我的问题是:获取当前窗口并检索应用程序名称和窗口标题的正确方法是什么?

答案1

我相信您必须创建一个通过 Dbus 与您的应用程序通信的 Shell 扩展。

这是 Wayland 的一个主要缺陷,一些应用程序仍在尝试解决。您可以看到一个这样的主要讨论这里

相关内容