是否可以镜像一个工作区的活动部分,以便它在当前工作区中作为可以移动的窗口可见?
前几天,我在 Ubuntu 16.04 主机上运行了一个 Windows 10 VM,需要很长时间才能完成更新。我一直在通过Ubuntu上的 Expo ( Super+ S)检查它的进度。这让我觉得这个问题很可能已经解决了,因为 simplescreenrecorder 之类的工具可以配置为只记录屏幕的一部分。但是,我不知道用于 Google 搜索的正确术语。
我想在任何当前工作区的右上角以浮动窗口(带有实时更新)的形式查看下面的 300x150 屏幕截图。
Jac*_*ijm 27
(新答案)
完毕。
下面的答案现在以完善的形式提供,作为指标,作为 Trusty、Xenial、Yakkety 和 Zesty 的 ppa:
sudo apt-add-repository ppa:vlijm/windowspy
sudo apt-get update
sudo apt-get install windowspy
Run Code Online (Sandbox Code Playgroud)
指标(包括预览窗口)现在的果汁含量很低。选项包括设置窗口、设置窗口边框大小/颜色、窗口大小。
与此同时,我发现关注 AU 窗口很有用;看看有没有消息:)
旧答案
(第一第二粗糙概念)
令我(大)惊讶的是,它可以有效地完成,无论是诡计还是欺骗;在另一个工作区上有一个窗口的更新表示。不适合看电影,绝对足以盯着别处的窗口(例如:我的电视卡窗口):
窗口在前面,按快捷键:
(窗口将最小化)
移动到另一个工作区,再次按下快捷键,会出现一个小窗口,每 4 秒更新一次:
该窗口始终显示在其他窗口的顶部。实际上,窗口是 300px(宽度),但可以设置为任何大小。
要结束它,请按(再次)快捷键。小窗口将关闭,您将移动到原始窗口的视口,该视口将再次出现,未最小化。
控制脚本
sudo apt-add-repository ppa:vlijm/windowspy
sudo apt-get update
sudo apt-get install windowspy
Run Code Online (Sandbox Code Playgroud)窗口表示
#!/usr/bin/env python3
import subprocess
import os
import sys
import time
# paths
imagepath = os.path.join(os.environ["HOME"], ".showcase")
wfile = os.path.join(imagepath, "currentwindow")
vpfile = os.path.join(imagepath, "last_vp")
# setup path
if not os.path.exists(imagepath):
os.mkdir(imagepath)
def get(command):
try:
return subprocess.check_output(command).decode("utf-8").strip()
except subprocess.CalledProcessError:
pass
def get_vp():
open(vpfile, "wt").write(get(["wmctrl", "-d"]).split()[5])
def run(command):
subprocess.Popen(command)
def convert_tohex(widxd):
return widxd[:2]+((10-len(widxd))*"0")+widxd[2:]
def check_windowtype(wid):
check = get(["xprop", "-id", wid])
return not any([s in check for s in [
"_NET_WM_WINDOW_TYPE_DOCK",
"_NET_WM_WINDOW_TYPE_DESKTOP"]])
def edit_winprops(wid, convert=True):
run(["xdotool", "windowminimize", wid])
if convert:
widxd = convert_tohex(hex(int(wid)))
else:
widxd = wid
run(["wmctrl", "-i", "-r", widxd, "-b", "add,sticky"])
get_vp()
open(os.path.join(imagepath, "currentwindow"), "wt").write(widxd)
def initiate_min():
# if not, minmize window, write the file
wid = get(["xdotool", "getactivewindow"])
if check_windowtype(wid):
edit_winprops(wid)
else:
pidinfo = [l.split() for l in wlist.splitlines()]
match = [l for l in pidinfo if all([
get(["ps", "-p", l[2], "-o", "comm="]) == "VirtualBox",
not "Manager" in l])]
if match:
edit_winprops(match[0][0], convert=False)
# windowlist
wlist = get(["wmctrl", "-lp"])
if "Window preview" in wlist:
# kill the miniwindow
pid = get(["pgrep", "-f", "showmin"])
run(["kill", pid])
window = open(wfile).read().strip()
viewport = open(vpfile).read().strip()
run(["wmctrl", "-o", viewport])
time.sleep(0.3)
run(["wmctrl", "-i", "-r", window, "-b", "remove,sticky"])
run(["wmctrl", "-ia", window])
os.remove(wfile)
else:
# check if windowfile exists
wfileexists = os.path.exists(wfile)
if wfileexists:
# if file exists, try to run miniwindow
window = open(wfile).read().strip()
if window in wlist:
# if the window exists, run!
run(["showmin", window])
else:
# if not, minmize window, write the file
initiate_min()
else:
# if not, minmize window, write the file
initiate_min()
Run Code Online (Sandbox Code Playgroud)安装python3-pil,xdotool和wmctrl
sudo apt-get install xdotool wmctrl python3-pil
Run Code Online (Sandbox Code Playgroud)创建(如果尚不存在)目录~/bin。
showcase_control(无扩展名) in ~/bin,并使其可执行。showmin(完全相同)(无扩展名)~/bin,并使其可执行。注销并重新登录,然后将以下命令添加到您选择的快捷方式:
showcase_control
Run Code Online (Sandbox Code Playgroud)
选择:系统设置>“键盘”>“快捷方式”>“自定义快捷方式”。单击“+”并添加命令:
showcase_control
Run Code Online (Sandbox Code Playgroud)
它应该工作!
目前的设置为您的处理器增加了一些工作。然而,在我(非常)旧的系统上,它增加了(平均)大约。我估计有 4-5%,我没有以任何方式注意到。
更新:原来import可以一步调整图像大小,同时获取窗口图像。这意味着处理器负载的显着减少。同时刷新时间更短(现在是 3 秒),仍然以更低的“成本”。
import。虽然这都适用于最小化窗口或没有焦点的窗口,但存在一个问题:窗口需要位于当前工作区。wmctrl,但同时最小化。当 VBox 窗口在前面时,事实证明 Ubuntu 快捷键已禁用(!),因此需要以其他方式启动控制脚本。下面简要介绍几个。
我编辑了控制脚本。现在仅在 VirtualBox 的情况下:
单击桌面上的任意位置,然后按快捷键。之后,只需使用快捷键显示窗口并退出即可。
说明:如果窗口类型为“桌面”,则控制脚本将退出,因为您不想最小化桌面。现在脚本首先查找可能存在的 VirtualBox 窗口,如果当前活动窗口是桌面,则作为目标。
复制下面的图标(右击->另存为),另存为 minwinicon.png
下面几行复制到一个空文件,将其保存为minwin.desktop在~/.local/share/applications:
[Desktop Entry]
Type=Application
Name=Window Spy
Exec=showcase_control
Icon=/path/to/minwinicon.png
StartupNotify=false
Run Code Online (Sandbox Code Playgroud)
您需要注销并重新登录启动器才能“找到”本地~/bin路径!
将图标拖到启动器上以使用它。
第二种解决方案有一个重要的缺点:从启动器使用它后,它会持续闪烁几秒钟,等待一个窗口出现。在此期间,再次单击将没有任何效果。这可以解决,如here所述,但在这个答案中包含它真的会太长。如果您想使用选项二,请查看链接。
| 归档时间: |
|
| 查看次数: |
3700 次 |
| 最近记录: |