Я пытаюсь выяснить, как получить номер рабочей области из терминального скрипта в gnome. Есть идеи?
источник
Я пытаюсь выяснить, как получить номер рабочей области из терминального скрипта в gnome. Есть идеи?
Старый, и ответил ветку, но я был только после той же информации. Вы можете сделать это с помощью стандартных инструментов xorg:
xprop -root -notype _NET_CURRENT_DESKTOP
Если будут с помощью 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 отключен.
Без установки чего-либо, и если вы используете metacity, вы можете использовать это:
источник
Кажется, что с Unity, принятый ответ
не работает - всегда возвращает 0. Я думаю, экран настроен как действительно большой видовой экран, из которого видна только часть. Альтернатива немного хитрая, так как вы должны знать размер вашего рабочего пространства. То есть:
вернет что-то вроде «1600 0», если вы находитесь в правом верхнем рабочем пространстве. Первое число, вероятно, является шириной самого большого дисплея, который у вас есть.
источник