有没有办法从命令行检测您当前位于哪个工作区?

有没有办法从命令行检测您当前位于哪个工作区?

我正在尝试弄清楚如何从 gnome 中的终端脚本获取工作区编号。有什么想法吗?

答案1

如果你不使用 Compiz,你可以使用工具 安装 xdotool

例子:

xdotool get_desktop

0如果从第一个工作区运行则返回,1如果从第二个工作区运行则返回,等等。

答案2

一个旧的、已回答的帖子,但我只是想得到相同的信息。您可以使用标准 xorg 工具执行此操作:

xprop -root -notype _NET_CURRENT_DESKTOP

答案3

如果你使用 compiz,这会更困难一些。

编辑:现在无论有没有 compiz 都可以工作了,终于......

我编写了一个“小”python 脚本来实现这一点:

#!/usr/bin/python
from subprocess import Popen, PIPE
getoutput = lambda x: Popen(x, stdout=PIPE).communicate()[0]
compiz_running = list(i for i in getoutput(("ps", "-aef", )).split("\n")
    if "compiz --replace" in i and not "grep" in i) != []

if compiz_running:
    # get the position of the current workspace
    ws = list(int(i.strip(",")) for i in  getoutput(("xprop", "-root",
        "-notype", "_NET_DESKTOP_VIEWPORT", )).split()[-2:])
    # get the number of horizontal and vertical workspaces
    hsize = int(getoutput(("gconftool",
        "--get", "/apps/compiz/general/screen0/options/hsize", )))
    vsize = int(getoutput(("gconftool",
        "--get", "/apps/compiz/general/screen0/options/vsize", )))
    # get the dimentions of a single workspace
    x, y = list(int(i) for i in getoutput(("xwininfo", "-root",
        "-stats", )).split("geometry ")[1].split("+")[0].split("x"))
    # enumerate workspaces
    workspaces, n = [], 0
    for j in range(vsize):
        for i in range(hsize):
            workspaces.append([n, [x*i, y*j, ], ])
            n += 1
    print list(i for i in workspaces if i[1] == ws)[0][0]
# if compiz is not running
else: # this code via @DoR
    print getoutput(("xdotool", "get_desktop", )).strip() 

0将其保存在某处并将其标记为可执行文件。这将输出介于和工作区数量之间的数字。

枚举如下所示:

+---+---+
| 0 | 1 |
+---+---+
| 2 | 3 |
+---+---+

你必须安装工具 安装 xdotool当 compiz 被禁用时,此功能可以正常工作。

答案4

看来,对于 Unity 来说,可接受的答案

 xdotool get_desktop_viewport

不起作用 - 它总是返回 0。我猜屏幕配置为一个非常大的视口,但只有部分可见。另一种方法有点棘手,因为你必须知道工作空间的大小。即:

 xdotool get_desktop_viewport

如果您位于右上方的工作区,则将返回类似“1600 0”的内容。第一个数字可能是您拥有的最大显示器的宽度。

相关内容