有没有办法获取 KDE Wayland 上的窗口列表?

有没有办法获取 KDE Wayland 上的窗口列表?

在 X11 时代,我可以wmctrl -l列出可用的窗口,以便在我的脚本中使用。

$ wmctrl -l
0x01000050  0 my-pc project1 – Readme.md

但现在大多数应用程序都使用 Wayland。上面的命令仅显示使用 XWayland 运行的窗口。

我希望能够在 Wayland 模式下使用应用程序,同时能够为我的脚本列出它们的窗口。那可能吗?我正在使用 Arch Linux 和 KDE。

答案1

对的,这是可能的。这个想法是向 kwin 询问此信息。它是通过 kwin 脚本完成的。它只能与 dbus 进行通信,因此我们无法在 kwin 脚本中运行 shell 命令(至少不能直接运行)。但我们能跑来自 shell 脚本的 kwin 脚本。

创建以下脚本~/bin/list_windows.js

const clients = workspace.clientList();
for (var i = 0; i < clients.length; i++) {
  print(clients[i].caption);
}

不幸的是,标准输出的输出当前已损坏,请参阅错误报告。但有一个解决方法。打开kde systemd 启动。现在我们可以使用journalctl来提取输出。生成的get_list_of_windows脚本如下:

#!/usr/bin/env python3

import subprocess
from datetime import datetime


def get_list_of_windows():
   datetime_now = datetime.now()

   script = "/home/andrew/bin/list_windows.js"

   reg_script_number = subprocess.run("dbus-send --print-reply --dest=org.kde.KWin \
                        /Scripting org.kde.kwin.Scripting.loadScript \
                        string:" + script + " | awk 'END {print $2}'",
                           capture_output=True, shell=True).stdout.decode().split("\n")[0]

   subprocess.run("dbus-send --print-reply --dest=org.kde.KWin /" + reg_script_number + " org.kde.kwin.Script.run",
                  shell=True, stdout=subprocess.DEVNULL)
   subprocess.run("dbus-send --print-reply --dest=org.kde.KWin /" + reg_script_number + " org.kde.kwin.Script.stop",
                  shell=True, stdout=subprocess.DEVNULL)  # unregister number

   since = str(datetime_now)

   msg = subprocess.run("journalctl _COMM=kwin_wayland -o cat --since \"" + since + "\"",
                        capture_output=True, shell=True).stdout.decode().rstrip().split("\n")
   msg = [el.lstrip("js: ") for el in msg]

   return msg


print('\n'.join(get_list_of_windows()))

现在运行脚本,您将得到输出:

$ get_list_of_windows
Рабочий стол по умолчанию — Plasma
Plasma
Is there a way to get list of windows on KDE Wayland? - Unix & Linux Stack Exchange - Vivaldi
get_list_of_windows — Kate
Andrew Shark / Davinci Resolve Scripts · GitLab — Falkon
project1 – README.md

这是在我的仓库

相关内容