web-dev-qa-db-fra.com

Existe-t-il un moyen de détecter l’espace de travail dans lequel vous vous trouvez actuellement à partir de la ligne de commande?

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

10
wajiw

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

Exemple:

xdotool get_desktop

Ceci retournera 0 s'il est exécuté depuis le premier espace de travail, 1 s'il est exécuté depuis le second, etc.

11
Isaiah

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

xprop -root -notype _NET_CURRENT_DESKTOP
7
mrtimdog

Si vous utilisez en utilisant compiz, ce sera un peu plus difficile.

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

J'ai écrit un "petit" python script 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 ceci quelque part et marquez-le comme exécutable. Cela ne produira qu'un nombre entre 0 et le nombre d'espaces de travail.

Voici à quoi ressemble l'énumération:

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

Vous devez installer xdotoolInstall xdotool pour que cela fonctionne si compiz est désactivé.

6
Stefano Palazzo

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
3

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 d'affichage 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

retournera 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.

0
nealmcb