#!/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()
如果您不使用 Compiz,则可以使用xdotool 。
例子:
0
如果从第一个工作区1
运行,如果从第二个等运行,这将返回。一个旧的,已回答的线程,但我只是在寻找相同的信息。您可以使用标准 xorg 工具执行此操作:
如果您使用的是compiz,这将更加困难。
编辑:现在无论有没有compiz都可以使用,最后......
我写了一个“小”python脚本来做到这一点:
将其保存在某处并将其标记为可执行文件。这将只输出一个介于
0
和 工作区数量之间的数字。这是枚举的样子:
你必须安装xdotool 才能在 compiz 被禁用的情况下工作。
无需安装任何东西,如果你使用 metacity,你可以使用这个:
似乎使用 Unity,接受的答案
不起作用 - 它总是返回 0。我猜屏幕被配置为一个非常大的视口,其中只有一部分是可见的。另一种方法有点棘手,因为您必须知道工作空间的大小。IE:
如果您在右上角的工作区中,将返回类似“1600 0”的内容。第一个数字可能是您拥有的最大显示器的宽度。