Czy istnieje sposób na wykrycie, który obszar roboczy znajduje się aktualnie w linii poleceń?

8

Próbuję dowiedzieć się, jak uzyskać numer obszaru roboczego ze skryptu terminala w gnome. Jakieś pomysły?

    
zadawane wajiw 15.12.2010, 01:12
źródło

5 odpowiedzi

10

Jeśli nie korzystasz z Compiz, możesz użyć xdotool .

Przykład:

xdotool get_desktop

To zwróci 0 , jeśli uruchomisz z pierwszego obszaru roboczego, 1 , jeśli uruchomisz z drugiego itd.

    
odpowiedział Isaiah 15.12.2010, 01:35
źródło
7

Stary i odpowiadający wątek, ale właśnie podążałem za tymi samymi informacjami. Możesz to zrobić za pomocą standardowych narzędzi xorg z:

xprop -root -notype _NET_CURRENT_DESKTOP
    
odpowiedział mrtimdog 13.06.2013, 08:58
źródło
6

Jeśli jesteś przy użyciu compiz, będzie to trochę trudniejsze.

edytuj: to teraz działa zarówno z, jak i bez compiz, wreszcie ...

Napisałem "mały" skrypt pythonowy:

#!/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() 

Zapisz to gdzieś i oznacz jako plik wykonywalny. Spowoduje to wyświetlenie tylko liczby między 0 i liczbą obszarów roboczych.

Tak wygląda wyliczenie:

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

Musisz zainstalować xdotool , aby działał w przypadku wyłączenia compiz.

    
odpowiedział Stefano Palazzo 15.12.2010, 02:16
źródło
3

Bez instalowania czegokolwiek i jeśli używasz metacity, możesz użyć tego:

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
    
odpowiedział Nyamiou The Galeanthrope 15.12.2010, 02:11
źródło
0

Wydaje się, że w Unity przyjęta odpowiedź

 xdotool get_desktop_viewport

nie działa - zawsze zwraca 0. Domyślam się, że ekran jest skonfigurowany jako naprawdę duży rzutnik, którego widoczna jest tylko część. Alternatywa jest nieco trudna, ponieważ musisz znać wielkość swojego obszaru roboczego. I.e .:

 xdotool get_desktop_viewport

zwróci coś w stylu "1600 0", jeśli jesteś w prawym górnym obszarze roboczym. Pierwsza liczba to prawdopodobnie szerokość największego wyświetlanego ekranu.

    
odpowiedział nealmcb 18.08.2013, 19:00
źródło

Przeczytaj inne pytania na temat tagów