有没有一种方法可以从命令行检测您当前所在的工作区?


Answers:


13

如果您不使用Compiz,则可以使用xdotool 安装xdotool

例:

xdotool get_desktop

这将返回0,如果从第一工作区运行1,如果运行从第二等


7

一个古老的,可以回答的线程,但是我只是在获得相同的信息。您可以使用以下标准xorg工具进行此操作:

xprop -root -notype _NET_CURRENT_DESKTOP

6

如果您正在使用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 安装xdotool才能在compiz被禁用的情况下正常工作。


谢谢。我必须从compiz_running测试中删除“ --replace”,并且即使在ccsm General Options上说我的桌面大小/垂直虚拟大小为2.
nealmcb

3

无需安装任何工具,如果您正在使用metacity,则可以使用以下命令:

python -c "import wnck; s=wnck.screen_get_default(); s.force_update(); w=s.get_active_workspace();  w_num=w.get_number(); print(w_num);" 2>/dev/null

0

似乎使用Unity可以接受

 xdotool get_desktop_viewport

不起作用-它总是返回0。我猜屏幕被配置为一个很大的视口,其中只有一部分可见。替代方案有些棘手,因为您必须知道工作区的大小。即:

 xdotool get_desktop_viewport

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.