#!/usr/bin/env python3
import subprocess
import time
# find the frontmost window
active = [l for l in subprocess.check_output(["xprop", "-root"]).decode("utf-8").splitlines() \
if "_NET_ACTIVE_WINDOW(WINDOW)" in l][0].split("#")[-1].strip()
# convert the window-id from xprop- format to wmctrl- format
w_id = active[:2] + str((10-len(active))*"0")+active[2:]
# if the window is a "normal" window, find the window geometry in wmctrl -lG,
# move the mouse to the top of the window and click the middle button
if "_NET_WM_WINDOW_TYPE_NORMAL" in subprocess.check_output(["xprop", "-id", w_id]).decode("utf-8"):
match = [l for l in subprocess.check_output(["wmctrl", "-lG"]).decode("utf-8").splitlines() if w_id in l][0].split()[2:6]
current_mousepos = subprocess.check_output(["xdotool", "getmouselocation"]).decode("utf-8").split()
coords = ([s.replace("x:", "") for s in current_mousepos if s.startswith("x:")][0],
[s.replace("y:", "") for s in current_mousepos if s.startswith("y:")][0])
top_x = str(int(int(match[0])+(int(match[2])/2))); top_y = str(int(match[1]) -10)
# The time.sleep(0.3) possibly needs to be optimized (longer sleep = safer); the 0.3 works fine on my system when used from a keyboard shortcut (which turns out to make a difference...)
subprocess.Popen(["xdotool", "mousemove", "--sync", top_x, top_y]); time.sleep(0.3)
# move the mouse back to its original position
subprocess.Popen(["xdotool", "click", "2"]); time.sleep(0.05)
subprocess.Popen(["xdotool", "mousemove", coords[0], coords[1]])
一个无耻的肮脏解决方案
要实现一个执行您想要的操作的命令比乍看起来要复杂得多。问题是降低窗口并同时保持窗口顺序(z-wise),这似乎几乎是不可能的。
xdotool
和都wmctrl
提供升高窗口但不降低窗口的命令。下面的解决方案是一个肮脏的黑客/解决方法,但它仍然可以很好地可靠地工作。它同时使用
wmctrl
和xdotool
,默认情况下它们不在您的系统上。尽管该脚本是通过键盘快捷键运行的,但它实际上与您在窗口顶部单击鼠标中键时的效果完全相同。它能做什么:
xprop -root
)wmctrl -lG
窗口)这一切都在一瞬间发生,因此您甚至不会注意到鼠标在移动和向后移动。您唯一注意到的是发送到后台的窗口,这正是您想要的。
剧本
如何使用
同时安装
wmctrl
和xdotool
将上面的脚本复制到一个空文件中,另存为
sendtoback.py
通过打开终端来测试运行脚本,在其中运行命令:
该窗口应该被发送到后台,就像您习惯于单击中键时一样。
如果一切正常,请选择:系统设置>“键盘”>“快捷方式”>“自定义快捷方式”。单击“+”并添加命令:
到您选择的快捷键。
笔记
在某些情况下(尤其是在较慢的系统上),线路中的睡眠时间:
需要增加。在更快的系统上,它可以减少。
gnome-keybinding-properties
Gnome在 Gnome 2 和Gnome 3 中提供键绑定gnome-control-center keyboard
。在 Gnome 2 中,接近您想要的默认活动键绑定是
使用Win+的快捷方式space
编辑:我现在正在使用
mate
,它是 Gnome 2 的一个分支,使用命令行会为我提供 gnome-keybinding-properties 的“未找到命令”或 gnome-control-center 的核心转储。但是使用 UI,可以在
System
->Control Center
->Hardware
->下访问键绑定Keyboard Shortcuts
。最简单的方法是折叠Sound
、Desktop
和Accessibility
部分,留下Window Management
。 “如果它被另一个窗口覆盖,则升高窗口,否则降低它”位于该部分的大约中间,并且在 Mate 中被禁用。