如何仅在特定显示器上最小化窗口?

red*_*ity 5 scripts window-manager multiple-monitors minimize

我有显示器和笔记本电脑屏幕,但“显示桌面”功能有问题。

笔记本电脑屏幕显示应该一直保留的小部件。主显示器正常使用。

每当我使用键盘快捷键(在我的情况下是 windows key + d),所有窗口都将被隐藏,但我只想隐藏特定监视器上的所有窗口。

这可能吗?

问题类似于https://superuser.com/questions/200945/how-can-i-make-the-show-desktop-function-only-hide-the-windows-on-a-specific-m,有显着差异我询问不同的操作系统。

Jac*_*ijm 3

仅最小化一个屏幕上的窗口

下面的脚本可用于(仅)最小化左侧屏幕右侧屏幕上的窗口。

该脚本使用12作为参数运行,具体取决于您想要最小化窗口的屏幕。

剧本

#!/usr/bin/env python3
import subprocess
import sys

scr = sys.argv[1]

def get(cmd):
    return subprocess.check_output(cmd).decode("utf-8")

# find the right side of the left screen
edge = [int(s.split("x")[0]) for s in get("xrandr").split() if "+0+" in s][0]
# read the window list
wlist = [w.split() for w in get(["wmctrl", "-lG"]).splitlines()]
for w in wlist:
    # retrieve the window id and -position
    w_id = w[0]; xpos = int(w[2])
    # check the position of the window, decide action depending on arg.
    test = xpos < edge if scr == "1" else xpos >= edge
    if test:
        # check if the window is "normal" and / or minimized
        w_data = get(["xprop", "-id", w_id])
        if all([not "_NET_WM_STATE_HIDDEN" in w_data,
                    "_NET_WM_WINDOW_TYPE_NORMAL" in w_data]):
            subprocess.Popen(["xdotool", "windowminimize", w_id])
Run Code Online (Sandbox Code Playgroud)

如何使用

  1. 该脚本需要wmctrlxdotool

    sudo apt-get install xdotool wmctrl
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将脚本复制到一个空文件中,另存为min_screen.py

  3. 运行它:

    python3 /path/to/min_screen.py 1
    
    Run Code Online (Sandbox Code Playgroud)

    最小化左侧屏幕上的窗口,以及

    python3 /path/to/min_screen.py 2 
    
    Run Code Online (Sandbox Code Playgroud)

    仅最小化右侧屏幕上的窗口

  4. 如果一切正常,将其添加到快捷键

笔记

  • 该脚本假设已安装 python3,但我相信该代码不是特定于 python3 的。
  • 该脚本是在 上编写的Unity,但与工作区(视口)不同,处理屏幕应该不会产生影响。
  • 该脚本不会最小化 pid 0 的窗口(tkinter例如空闲窗口或其他窗口)。如果这是一个问题,请提及。可以解决。

解释

+0+该脚本首先通过在 的输出中查找字符串 来查找左屏幕的右边缘xrandr,如下所示:

1680x1050+0+0
Run Code Online (Sandbox Code Playgroud)

第一部分1680是左屏幕的宽度。随后,我们所要做的就是查看窗口列表 ( wmctrl -lG) 并查看哪个窗口位于“下方”或“上方” 1680,并采取相应行动,使用命令最小化xdotool windowminimize <window_id>(或不最小化)。

最后的“测试”( mmiz):xprop -id <window_id>是检查我们是否正在处理“正常”窗口(而不是例如您的桌面,它也被列为窗口),以及窗口是否已经最小化。

另请参阅脚本中的注释。

将脚本绑定到键盘快捷键

1.关于卢本图

要在 Lubuntu 中编辑全局键盘快捷键,请参阅Lubuntu 最小化所有显示桌面键盘快捷键?

在这种情况下:将此答案中的脚本保存到计算机上的文件中,使该文件可执行,打开/.config/openbox/lubuntu-rc.xml并替换

  <keybind key="W-d">
    <action name="ToggleShowDesktop"/>
  </keybind>
Run Code Online (Sandbox Code Playgroud)

经过

  <action name="Execute">
   <command>/path/to/show_desktop.py 1</command>
  </action>
Run Code Online (Sandbox Code Playgroud)

其中/path/to/show_desktop.py(当然)是脚本的路径,以及1目标2屏幕。使脚本可执行

重新启动计算机以重新加载配置。

2.Unity/侏儒

使脚本可执行并选择:系统设置>“键盘”>“快捷方式”>“自定义快捷方式”。单击“+”并添加命令:

/path/to/show_desktop.py 1
Run Code Online (Sandbox Code Playgroud)

...您选择的快捷方式