KDE Wayland에서 창 목록을 얻는 방법이 있습니까?

KDE Wayland에서 창 목록을 얻는 방법이 있습니까?

X11 시대에는 wmctrl -l스크립트에서 사용할 수 있는 창을 나열할 수 있었습니다.

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

그러나 이제 대부분의 응용 프로그램은 Wayland를 사용합니다. 위 명령은 XWayland를 사용하여 실행되는 창만 표시합니다.

내 스크립트에 대한 창을 나열하는 동안 Wayland 모드에서 응용 프로그램을 사용할 수 있기를 원합니다. 그게 가능합니까? 저는 아치 리눅스와 KDE를 사용하고 있습니다.

답변1

예, 가능합니다. 아이디어는 kwin에게 이 정보를 요청하는 것입니다. 이는 kwin 스크립트를 통해 수행됩니다. dbus하고만 통신할 수 있으므로 kwin 스크립트에서 쉘 명령을 실행할 수 없습니다(적어도 직접적으로는 실행할 수 없습니다). 하지만 우리는실행할 수 있습니다쉘 스크립트의 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

이 시간은내 창고.

관련 정보