Czy istnieje sposób na wykrycie, w którym obszarze roboczym jesteś obecnie z wiersza poleceń?


Odpowiedzi:


13

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

Przykład:

xdotool get_desktop

Zwróci to, 0jeśli zostanie uruchomiony z pierwszego obszaru roboczego, 1jeśli zostanie uruchomiony z drugiego itd.


7

Stary wątek z odpowiedzią, ale szukałem tych samych informacji. Możesz to zrobić za pomocą standardowych narzędzi xorg za pomocą:

xprop -root -notype _NET_CURRENT_DESKTOP

6

Jeśli za pomocą compiz, będzie to nieco trudniejsze.

edycja: teraz działa zarówno z kompizem, jak i bez niego, w końcu ...

Napisałem „mały” skrypt Pythona, aby to zrobić:

#!/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 0i liczby obszarów roboczych.

Tak wygląda wyliczenie:

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

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


Dzięki. Musiałem usunąć „--replace” z testu compiz_running, a także wydawało mi się, że otrzymałem niewłaściwą wartość dla vsize (1 vs 2) podczas uruchamiania tego w Precise 12.04, mimo że ccsm Opcje ogólne mówiły, że mój rozmiar pulpitu / pionowy rozmiar wirtualny to 2.
nealmcb,

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

0

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

 xdotool get_desktop_viewport

nie działa - zawsze zwraca 0. Myślę, że ekran jest skonfigurowany jako naprawdę duży obszar wyświetlania, którego widoczna jest tylko część. Alternatywa jest nieco trudna, ponieważ musisz znać rozmiar swojego obszaru roboczego. To znaczy:

 xdotool get_desktop_viewport

zwróci coś w rodzaju „1600 0”, jeśli jesteś w prawym górnym obszarze roboczym. Pierwsza liczba to prawdopodobnie szerokość największego wyświetlacza, jaki masz.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.