Existe-t-il un moyen de détecter dans quel espace de travail vous vous trouvez actuellement depuis la ligne de commande?

12

J'essaie de comprendre comment obtenir le numéro de l'espace de travail à partir d'un script de terminal dans gnome. Des idées?

wajiw
la source

Réponses:

13

Si vous n'utilisez pas Compiz, vous pouvez utiliser xdotool Installer xdotool .

Exemple:

xdotool get_desktop

Cela reviendra 0si exécuté à partir du premier espace de travail, 1s'il est exécuté à partir du second, etc.

Isaïe
la source
7

Un vieux fil, et répondu, mais j'étais juste après la même info. Vous pouvez le faire avec les outils xorg standard avec:

xprop -root -notype _NET_CURRENT_DESKTOP
mrtimdog
la source
6

Si vous êtes utilisez Compiz, ce sera un peu plus difficile.

edit: cela fonctionne maintenant avec et sans compiz, enfin ...

J'ai écrit un "petit" script python pour le faire:

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

Enregistrez-le quelque part et marquez-le comme exécutable. Cela ne produira qu'un nombre compris entre 0et le nombre d'espaces de travail.

Voici à quoi ressemble l'énumération:

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

Vous devez installer xdotool Installer xdotool pour que cela fonctionne au cas où compiz est désactivé.

Stefano Palazzo
la source
Merci. J'ai dû supprimer "--replace" du test compiz_running, et j'ai également semblé obtenir la mauvaise valeur pour vsize (1 vs 2) lors de l'exécution de cette version sur Precise 12.04, même si ccsm General Options a déclaré que ma taille de bureau / taille virtuelle verticale est 2.
nealmcb
3

Sans rien installer et si vous utilisez metacity, vous pouvez utiliser ceci:

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
la source
0

Il semble qu'avec Unity, la réponse acceptée

 xdotool get_desktop_viewport

ne fonctionne pas - il renvoie toujours 0. Je suppose que l'écran est configuré comme une très grande fenêtre dont seule une partie est visible. L'alternative est un peu délicate car vous devez connaître la taille de votre espace de travail. C'est à dire:

 xdotool get_desktop_viewport

renverra quelque chose comme "1600 0" si vous êtes dans l'espace de travail en haut à droite. Le premier nombre est probablement la largeur du plus grand écran que vous avez.

nealmcb
la source