Скрипт, приведенный ниже, позволяет пользователю щелкнуть по нужному дисплею, и все окна на этом дисплее будут сведены к минимуму.
Использование прост:
активирует скрипт, курсор мыши превратится в крест Нажмите на любое окно программы (но не на рабочем столе) на дисплее, которое вы хотите свести к минимуму. Скрипт определит все окна на этом дисплее и скроет (обозначит) их.Программа не требует установки дополнительных пакетов. Скрипт был протестирован на обычных Ubuntu 16.04 LTS и Lubuntu 16.04 LTS. Благодаря @JourneymanGeek для тестирования на Fedora 24 с помощью KDE!
Исходный код сценария можно получить, вручную скопировав его здесь или это из моего репозитория github. Чтобы получить его через git, выполните следующие действия:
активирует скрипт, ваш указатель мыши превратится в крест cd /opt ; sudo git clone https://github.com/SergKolo/sergrep.git Нажмите на любое окно программы (но а не на рабочем столе) на дисплее, которое вы хотите свести к минимуму.Файл будет называться github . Убедитесь, что вы привязали это к сочетанию клавиш, чтобы обеспечить полный путь к скрипту. Например, так:
python /opt/sergrep/minimize_display_windows.py
Убедитесь, что файл, в который вы сохраняете этот код, имеет исполняемые разрешения.
#!/usr/bin/env python
#
###########################################################
# Author: Serg Kolo , contact: 1047481448@qq.com
# Date: July 3, 2016
# Purpose: Minimize windows on a display which user clicks
# Written for: http://askubuntu.com/q/793195/295286
# Tested on: Ubuntu 16.04 LTS,Lubuntu 16.04 Virtual Machine
###########################################################
# Copyright: Serg Kolo , 2016
#
# Permission to use,copy,modify,and distribute this software is hereby granted
# without fee, provided that the copyright notice above and this permission statement
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
#
# https://opensource.org/licenses/MIT
from gi.repository import GdkX11,Gdk
import subprocess
def run_sh(cmd):
# reusable function to
# run shell commands
# Returns stdout of the
# process
proc = subprocess.Popen(cmd, shell=True,stdout=subprocess.PIPE)
out = proc.stdout.read().strip()
return out
# First,let the user click on any window
# on the monitor which they want to minimize.
# For that we need to extract integer XID of
# the window from xwininfo output.
# Basically,same as xwininfo -int | awk '/Window id/{print $4}'
user_selected = ""
for item in run_sh("xwininfo -int").split("\n"):
if "Window id" in item:
user_selected = item.split()[3]
# Here we basically get all the windows on the screen,
# and check if their XID matches the one user selected
# Once we find that window, we need to know to what display
# that window belongs.
screen = Gdk.Screen.get_default()
for window in screen.get_window_stack():
if str(window.get_xid()) == user_selected:
close_screen = int(screen.get_monitor_at_window(window))
# We know which display to close now. Loop over all
# windows again, and if they're on the same display
# the one that user chose - iconify it ( in X11 terminology
# that means minimize the window )
for window in screen.get_window_stack():
if screen.get_monitor_at_window(window) == close_screen :
window.iconify()
Короткую запись сценария в действии можно найти на моем канале youtube
Первоначально я написал еще один скрипт, но он может используется только в Unity и требует наличия xdotool. Для тех, кого это интересует, он размещен как канал youtube