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.pyBâ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ó 2nghĩ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 1tôi chỉ nhận thấy rằng sau khi đọc kết quả củawmctrl -lG