Gibt es eine Möglichkeit, über die Befehlszeile zu erkennen, in welchem ​​Arbeitsbereich Sie sich gerade befinden?

12

Ich versuche herauszufinden, wie die Arbeitsbereichsnummer aus einem Terminalskript in gnome abgerufen werden kann. Irgendwelche Ideen?

wajiw
quelle

Antworten:

13

Wenn Sie Compiz nicht verwenden, können Sie xdotool verwenden Installieren Sie xdotool .

Beispiel:

xdotool get_desktop

Dies wird zurückgegeben, 0wenn es vom ersten Arbeitsbereich ausgeführt wird, 1wenn es vom zweiten ausgeführt wird usw.

Jesaja
quelle
7

Ein alter und beantworteter Thread, aber ich war kurz nach der gleichen Info. Sie können dies mit Standard-xorg-Tools tun mit:

xprop -root -notype _NET_CURRENT_DESKTOP
mrtimdog
quelle
6

Wenn Sie sind Compiz verwendet, wird dies ein wenig schwieriger.

edit: das funktioniert jetzt sowohl mit als auch ohne compiz, endlich ...

Ich habe dazu ein "kleines" Python-Skript geschrieben:

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

Speichern Sie dies irgendwo und markieren Sie es als ausführbar. Dies gibt nur eine Zahl zwischen 0und die Anzahl der Arbeitsbereiche aus.

So sieht die Aufzählung aus:

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

Sie müssen xdotool installieren, damitInstallieren Sie xdotool dies funktioniert, falls compiz deaktiviert ist.

Stefano Palazzo
quelle
Vielen Dank. Ich musste "--replace" aus dem compiz_running-Test entfernen und schien auch den falschen Wert für vsize (1 vs 2) zu erhalten, wenn ich dies auf Precise 12.04 ausführte, obwohl ccsm General Options angab, dass meine Desktop-Größe / vertikale virtuelle Größe ist 2.
Nealmcb
3

Ohne etwas zu installieren und wenn Sie Metacity verwenden, können Sie Folgendes verwenden:

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
Nyamiou The Galeanthrope
quelle
0

Es scheint, dass mit Unity die akzeptierte Antwort

 xdotool get_desktop_viewport

funktioniert nicht - es wird immer 0 zurückgegeben. Ich denke, der Bildschirm ist als ein wirklich großes Ansichtsfenster konfiguriert, von dem nur ein Teil sichtbar ist. Die Alternative ist etwas schwierig, da Sie die Größe Ihres Arbeitsbereichs kennen müssen. Dh:

 xdotool get_desktop_viewport

gibt so etwas wie "1600 0" zurück, wenn Sie sich im oberen rechten Arbeitsbereich befinden. Die erste Zahl ist wahrscheinlich die Breite der größten Anzeige, die Sie haben.

nealmcb
quelle