Есть ли способ определить, в каком рабочем пространстве вы находитесь в данный момент, из командной строки?

Я пытаюсь выяснить, как получить номер рабочей области из скрипта терминала в gnome. Есть идеи?

12
задан 13 March 2017 в 12:45

5 ответов

Если вы не используете Compiz, вы можете использовать xdotool Install xdotool .

Пример:

xdotool get_desktop

Это вернет 0 при запуске из первого рабочего пространства, 1 при запуске со второго и т. Д.

0
ответ дан 13 March 2017 в 12:45

Старая ветка с ответами, но я сразу после этой информации. Вы можете сделать это с помощью стандартных инструментов xorg:

xprop -root -notype _NET_CURRENT_DESKTOP
0
ответ дан 13 March 2017 в 12:45

При использовании 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 Install xdotool для этого для работы в случае, если compiz отключен.

6
ответ дан 13 March 2017 в 12:45

Кажется, что в Unity принятый ответ

 xdotool get_desktop_viewport

не работает - он всегда возвращает 0. Я думаю, экран настроен как действительно большой видовой экран, из которого видна только часть. Альтернатива немного хитрая, так как вы должны знать размер вашего рабочего пространства. Т.е. :

 xdotool get_desktop_viewport

вернет что-то вроде «1600 0», если вы находитесь в правом верхнем рабочем пространстве. Первое число, вероятно, является шириной самого большого дисплея, который у вас есть.

0
ответ дан 13 March 2017 в 12:45

Не устанавливая ничего, и если вы используете 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
ответ дан 13 March 2017 в 12:45

Другие вопросы по тегам:

Похожие вопросы: