许多应用程序需要检索活动窗口的标题和应用程序的功能。使用 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 的一个主要缺陷,一些应用程序仍在尝试解决。您可以看到一个这样的主要讨论这里。