Câu trả lời:
Câu trả lời dưới đây đã được viết và thử nghiệm trên Gnome3 / Ubuntu. Vui lòng đề cập nếu bạn gặp sự cố khi chạy nó trên Fedora / Gnome.
Kịch bản bên dưới sẽ đóng tất cả các cửa sổ trên một không gian làm việc cụ thể, với hai tùy chọn:
Khi chạy không có đối số, nó sẽ đóng tất cả các cửa sổ trên không gian làm việc hiện tại , ví dụ:
python3 /path/to/script.py
khi chạy với một không gian làm việc cụ thể làm đối số, nó sẽ đóng tất cả các cửa sổ trên không gian làm việc đó, ví dụ:
python3 /path/to/script.py 0
sẽ đóng tất cả các ứng dụng trên không gian làm việc 1. Lưu ý rằng không gian làm việc đầu tiên có chỉ số 0
#!/usr/bin/env python3
import subprocess
import sys
arg = sys.argv[1:]
def check_close(w_id):
w_data = get(["xprop", "-id", w_id])
if "_NET_WM_WINDOW_TYPE_NORMAL" in w_data:
subprocess.call(["wmctrl", "-ic", w])
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8")
wlist = [l.split() for l in get(["wmctrl", "-lG"]).splitlines()]
arg = arg[0] if arg else [
l.split()[0] for l in get(["wmctrl", "-d"]).splitlines() if '*' in l
][0]
for w in [w[0] for w in wlist if w[1] == arg]:
check_close(w)
close_wins.py
Bây giờ hãy kiểm tra tập lệnh từ cửa sổ đầu cuối, với không gian làm việc được nhắm mục tiêu làm đối số, ví dụ:
python3 /path/to/close_wins.py 2
để duyên dáng đóng tất cả các cửa sổ trên không gian làm việc 3 (0 = worspace 1)
Để đóng tất cả các cửa sổ trên không gian làm việc hiện tại , hãy chạy nó mà không cần đối số:
python3 /path/to/close_wins.py
Nếu tất cả đều hoạt động tốt, hãy thêm nó vào một phím tắt: chọn: Cài đặt hệ thống> "Bàn phím"> "Phím tắt"> "Phím tắt tùy chỉnh". Nhấp vào "+" và thêm lệnh:
python3 /path/to/close_wins.py
... Hoặc chạy nó theo bất kỳ cách nào khác mà bạn thích.
Lệnh wmctrl -lG
sẽ cung cấp cho chúng tôi thông tin về các cửa sổ hiện đang mở. Đầu ra trông như sau:
0x018000f9 0 135 206 650 500 jacob-System-Product-Name pscript_6.py (1,6 GB Volume /media/jacob/6C08-F637) - gedit
0x01600a09 1 283 275 724 443 jacob-System-Product-Name jacob@jacob-System-Product-Name: ~
0x018018be 1 152 407 650 500 jacob-System-Product-Name Untitled Document 1 - gedit
0x0140008c 2 0 101 1280 960 jacob-System-Product-Name gnome - Can I have a countdown window show the time until next suspend? - Ask Ubuntu - Mozilla Firefox
0x01600a49 2 47 146 724 443 jacob-System-Product-Name jacob@jacob-System-Product-Name: ~
Từ cột thứ hai, chúng ta có thể lấy vị trí của cửa sổ:
0x0140008c 2 0 101 1280 960 jacob-System-Product-Name gnome - Can I have a countdown window show the time until next suspend? - Ask Ubuntu - Mozilla Firefox
Có 2
nghĩa là cửa sổ nằm trên không gian làm việc 3, vì 0
đề cập đến không gian làm việc đầu tiên.
Nếu tập lệnh chạy với không gian làm việc làm đối số , tập lệnh sẽ phân tích cú pháp của cửa sổ tương ứng và sau đó đóng chúng một cách duyên dáng bằng lệnh (ví dụ):
wmctrl -ic 0x0140008c
Nếu tập lệnh chạy mà không có không gian làm việc làm đối số , tập lệnh sẽ lấy không gian làm việc hiện tại từ lệnh:
wmctrl -d
và sau đó sử dụng không gian làm việc hiện tại trong nội bộ làm đối số.
script.py 1
tôi chỉ nhận thấy rằng sau khi đọc kết quả củawmctrl -lG