AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 564431
Accepted
Jacob Vlijm
Jacob Vlijm
Asked: 2014-12-23 12:08:44 +0800 CST2014-12-23 12:08:44 +0800 CST 2014-12-23 12:08:44 +0800 CST

Unity 中 wmctrl -d 和 wmctrl -lG 之间的关系到底是什么?

  • 772

来自 man wmctrl:

wmctrl 是一个命令,可用于与与 EWMH/NetWM 规范兼容的 X 窗口管理器进行交互。wmctrl 可以向窗口管理器查询信息,它可以请求执行某些窗口管理操作。

具体问题

该wmctrl -d命令可用于获取有关桌面(视口/工作区)的信息,该wmctrl -lG命令列出所有窗口,包括它们的几何信息。

我如何(在 Unity 中与其他窗口管理器相比):

  • 了解工作区的概况及其排列方式?
  • 找出哪个是当前工作区?
  • 从绝对意义上找出窗户的位置?
  • 列出当前工作区中的窗口?

从命令行,使用这两个命令?

背景资料


wmctrl -d 命令
列出桌面。在(例如)Xubuntu 上,当我运行时wmctrl -d,我可以在输出中清楚地看到哪个是当前工作区,以及工作区上的屏幕分辨率 (DG)。

0  - DG: 1024x600  VP: N/A  WA: 0,31 1024x569  1
1  - DG: 1024x600  VP: N/A  WA: 0,31 1024x569  2
2  - DG: 1024x600  VP: N/A  WA: 0,31 1024x569  3
3  * DG: 1024x600  VP: 0,0  WA: 0,31 1024x569  4

当前工作区标有*。

然而,在 Unity 上,输出wmctrl -d只显示一个(非常大的)工作区,标有*,无论哪个是当前“工作区”,例如:

0  * DG: 3360x2100  VP: 1680,0  WA: 65,24 1615x1026  N/A


来自:: 的 wmctrl -lG 命令man wmctrl:列出由窗口管理器管理的窗口。:在 -l 操作的输出中包含几何信息
-l
-G-

当我wmctrl -lG在(例如)Xubuntu 上运行时,每个工作区上都有一个鼠标垫窗口:

0x03400003  0 241  197  533  244  jacob-1001PX Untitled 1 - Mousepad
0x03400197  1 299  222  533  244  jacob-1001PX Untitled 2 - Mousepad
0x034001be  2 236  201  533  244  jacob-1001PX Untitled 3 - Mousepad
0x034001e3  3 283  228  533  244  jacob-1001PX Untitled 4 - Mousepad

这些信息很容易理解;从第二列,我们知道窗口所在的工作区、它的位置(x、y、第 3/4 列)和大小(x、y、第 5/6 列)。该位置是相对于它所在的工作空间给出的。

然而,在 Unity 上,情况就完全不同了。当我有四个工作区并在每个工作区上打开一个 gedit 窗口时:

0x03c03b81  0 468  -884 875  741  jacob-System-Product-Name Niet-opgeslagen document 1 - gedit
0x03c03e74  0 369  164  1111 741  jacob-System-Product-Name Niet-opgeslagen document 2 - gedit
0x03c03f8e  0 -1269 214  1111 741  jacob-System-Product-Name Niet-opgeslagen document 3 - gedit
0x03c00085  0 -1376 -917 1111 741  jacob-System-Product-Name Niet-opgeslagen document 4 - gedit

有些窗口有负坐标,有些(可能)有超过我屏幕分辨率的坐标。

unity
  • 1 1 个回答
  • 1189 Views

1 个回答

  • Voted
  1. Best Answer
    Jacob Vlijm
    2014-12-23T12:08:44+08:002014-12-23T12:08:44+08:00

    视口与工作区

    正如这个回答中所指出的,Compiz/Unity 与其他窗口管理器之间存在本质区别。

    如果我们看一下 Xubuntu (XFCE),所有的工作空间都是独立的空间。我们只需要知道窗口所在的工作空间,以及 x 和 y 坐标。基本上,除了“线性”顺序 1、2、3 等之外,没有对工作空间进行排序的矩阵。

    这在 Unity 中是不同的,Unity 中实际上只有一个工作区。(跨越)工作区分为多个部分,称为视口。这些视口按行和列排列。

    这样一来,一个窗口可能在所有视口上都是部分可见的:

    在此处输入图像描述

    不同于工作区:

    在此处输入图像描述

    wmctrl -d 的输出差异以及如何解释

    要了解 的输出wmctrl -lG,我们应该了解它的“解剖结构”:

    在此处输入图像描述

    1. 桌面编号(第一个 = 0)
    2. 当前桌面标记(如果是当前桌面(工作区)则为“*”,否则为“-”)
    3. 桌面几何(桌面 xy的大小)
    4. 视口位置(桌面上的位置;请参阅 Unity)
    5. 工作区几何图形为(桌面的“可用”大小,减去面板等;第一列是从左/上开始的像素)
    6. 桌面名称(可能包含多个空格)

    由于 Unity 只有一个工作区,因此输出始终显示*on [2]。我们如何知道视口是如何排列的以及当前的视口是什么?

    资料在VP: 1680,0([4])内。不仅仅是作为视口编号,而是作为 x 和 y 坐标。这些坐标可以是零或x*屏幕的分辨率。要知道视口是如何设置的,我们还需要知道屏幕的分辨率(在 的帮助下xrandr)。

    如何查明:

    • 目前有多少视口以及它们是如何排列的:

      查看DG: 3360x2100“Unity”示例中的 ,并知道我们的屏幕分辨率为 1680x1050,我们可以得出结论,视口有两列 (3360/1680) 和两行 (2100/1050)。

    • 这是当前工作区:

      示例
      屏幕的分辨率为 1680x1050。视口信息说VP: 1680,0。坐标显示为左上角,所以我们在第二列,第一行。

    • 绝对意义上的窗口所在的位置:

      一旦我们知道哪个视口是当前视口,我们就可以定位窗口,在 的输出中查看它们的坐标wmctrl -lG [3]:

    在此处输入图像描述

    1. 窗口-id
    2. 桌面号(在 Unity 上:如指出的那样始终为 0)
    3. 窗口坐标,从当前视口 (xy) 的角度
    4. 窗口大小,从(wh)的角度
    5. 计算机名称
    6. 窗口名称

      我们可以简单地定位窗口,原点在当前视口的左上角。

      下面是一个屏幕分辨率为 1680x1050、视口为 2x2 的示例:

      从视口 1 的角度看窗口坐标

      在此处输入图像描述

      viewport 4 视角下的窗口坐标

      在此处输入图像描述

      • 哪些是当前工作区的窗口:

      有了上面的信息和wmctrl -lG(the window coordinates, section [3]) 的帮助,很简单:

      如果

      1. 窗口的 x 坐标介于 0 和屏幕的(水平)分辨率之间,并且
      2. 窗口的 y 坐标介于 0 和屏幕的(垂直)分辨率之间

      然后一个窗口位于当前视口上。

    • 4

相关问题

  • 如何将 Web 应用程序放入 Unity Launcher?

  • Ubuntu 上网本 10.10 中没有 Alt+F2?

  • Unity 中的 gnome-do 样式键盘快捷键

  • 在哪里提交 Unity 的错误/愿望清单?

  • Unity 启动器——它可以作为单独的包提供吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve