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
이 시간은내 창고.