Как закрыть все приложения в рабочей области?

У меня проблема схожести, пинг github.com (192.30.253.112) терпит неудачу.

~$ ping github.com
PING github.com (192.30.253.112) 56(84) bytes of data.
From 192.168.1.28 icmp_seq=1 Destination Host Unreachable
From 192.168.1.28 icmp_seq=2 Destination Host Unreachable
From 192.168.1.28 icmp_seq=3 Destination Host Unreachable

Я обнаружил ключевую проблему после того, как увидел ваши комментарии

    ~$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
192.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 eth0

, где указано, что третий маршрут означает, что когда я посещаю 192.xxx.xxx.xxx , это будет некоторая ошибка. {{1} } удалив этот маршрут, я успешно пингую github.com .

ping github.com
PING github.com (192.30.253.112) 56(84) bytes of data.
64 bytes from 192.30.253.112: icmp_seq=1 ttl=43 time=235 ms
64 bytes from 192.30.253.112: icmp_seq=2 ttl=43 time=234 ms
64 bytes from 192.30.253.112: icmp_seq=3 ttl=43 time=235 ms
7
08.03.2017, 01:01
1 ответ

Ответ ниже был написан и протестирован на Gnome3 / Ubuntu. Пожалуйста, сообщите, если у вас возникнут проблемы при запуске на Fedora / Gnome.


Скрипт для закрытия всех окон приложений на определенном рабочем пространстве в Gnome

Приведенный ниже скрипт закроет все окна на определенном рабочем пространстве, с двумя вариантами:

  1. При запуске без аргументов, он закрывает все окна на текущем рабочем пространстве, например:

    python3 /path/to/script.py
    
  2. при запуске с определенным рабочим пространством в качестве аргумента, закроет все окна на этом рабочем пространстве, например:

    python3 /path/to/script.py 0 
    

    закроет все приложения на рабочем пространстве 1. Обратите внимание, что первое рабочее пространство имеет индекс 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)

Как использовать

  1. Для работы скрипта необходим wmctrl, который следует установить, если его нет в вашей системе.
  2. Скопируйте скрипт в пустой файл, сохраните его как close_wins.py
  3. Теперь протестируйте и запустите скрипт из окна терминала, указав в качестве аргумента целевое рабочее пространство, например:

    python3 /path/to/close_wins.py 2
    

    чтобы изящно закрыть все окна на рабочем пространстве 3 (0 = рабочее пространство 1)

    Чтобы закрыть все окна на текущем рабочем пространстве, запустите его без аргументов:

    python3 /path/to/close_wins.py
    
  4. Если все работает нормально, добавьте его к клавише быстрого доступа: выберите: Системные настройки > "Клавиатура" > "Ярлыки" > "Пользовательские ярлыки". Нажмите на "+" и добавьте команду:

    python3 /path/to/close_wins.py
    

... или запустите ее любым другим способом, который вам больше нравится.

Пояснение

Команда wmctrl -lG даст нам информацию о текущих открытых окнах. Вывод выглядит так:

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: ~

Из второго столбца мы можем получить местоположение окна:

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

Значение 2 означает, что окно находится на рабочем пространстве 3, поскольку 0 относится к первому рабочему пространству.

Если сценарий запускается с рабочим пространством в качестве аргумента, сценарий разбирает соответствующие идентификаторы окон и впоследствии закрывает их изящно командой (например):

wmctrl -ic 0x0140008c

Если сценарий запускается без рабочего пространства в качестве аргумента, сценарий получает текущее рабочее пространство из команды:

wmctrl -d

и впоследствии использует текущее рабочее пространство внутренне в качестве аргумента.

3
27.01.2020, 20:19

Теги

Похожие вопросы