A resposta do user72216 não funcionou sempre. Por exemplo, se eu abri várias janelas do Okular (um visualizador de PDF do KDE), o código não fecha todas as janelas, pois identificações de janelas diferentes são atribuídas às janelas. O código a seguir extrai todos os ids de janela e os fecha normalmente:
#!/usr/bin/env python3
import subprocess
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
pid = get(["xdotool", "getactivewindow", "getwindowpid"])
# Identify the name of the application
username = get(["users"])
jobs = get(["ps","-u",username])
jobname = ""
for w in jobs.splitlines():
jobinfo = w.split()
if pid == jobinfo[0]:
jobname = jobinfo[-1]
break
# Get all pids that match the jobname
pidlist = []
for w in jobs.splitlines():
jobinfo = w.split()
if jobinfo[-1] == jobname:
pidlist = pidlist + [jobinfo[0]]
# Close all windows with having the pids
wlist = get(["wmctrl", "-lp"])
for pid in pidlist:
for w in wlist.splitlines():
if pid in w and not "Desktop" in w:
print(w.split()[0])
subprocess.call(["wmctrl", "-ic", w.split()[0]])