Làm thế nào để đóng tất cả các ứng dụng trong một không gian làm việc?


7

Có phần mở rộng gnome 3 hoặc phím tắt fedora 25 để đóng tất cả các ứng dụng đã mở trong không gian làm việc không? (Đóng không gian làm việc bằng cách nhấn X chẳng hạn).

Tôi đã thấy chức năng đó ở đâu đó từ lâu, đã quên ở đâu, nhưng nó không có sẵn trong fedora theo mặc định.

Câu trả lời:


3

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.


Tập lệnh đóng tất cả các cửa sổ ứng dụng trên một không gian làm việc cụ thể trong 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:

  1. 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
    
  2. 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

Kịch bản

#!/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)

Cách sử dụng

  1. Kịch bản cần wmctrl , cần được cài đặt nếu nó không có trên hệ thống của bạn.
  2. Sao chép tập lệnh vào một tập tin trống, lưu nó dưới dạng close_wins.py
  3. 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
    
  4. 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.

Giải trình

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

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ố.


Lưu ý rằng điều này sẽ không hoạt động trong một phiên Wayland.
mattdm

@mattdm Không chắc OP đang sử dụng cái gì, nhưng không phải là gnome trên X?
Jacob Vlijm

Trong Fedora 25, phiên Gnome mặc định nằm trên Wayland với X là dự phòng.
mattdm

1
@JacobVlijm không không nó hoạt động tuyệt vời! không gian làm việc hiện tại là 0 chứ không phải 1, thứ hai là 1, vì vậy nếu tôi muốn đóng không gian làm việc thứ hai, script.py 1tôi chỉ nhận thấy rằng sau khi đọc kết quả củawmctrl -lG
Lynob

1
@DanielAlder ngôn ngữ là python, không quá nhiều Perl :)
Jacob Vlijm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.