¿Hay alguna manera de detectar en qué espacio de trabajo se encuentra actualmente desde la línea de comandos?

12

Estoy tratando de descubrir cómo obtener el número del espacio de trabajo de un script de terminal en gnome. ¿Algunas ideas?

wajiw
fuente

Respuestas:

13

Si no está usando Compiz, puede usar xdotool Instalar xdotool .

Ejemplo:

xdotool get_desktop

Esto volverá 0si se ejecuta desde el primer espacio de trabajo, 1si se ejecuta desde el segundo, etc.

Isaias
fuente
7

Un hilo viejo y respondido, pero estaba justo después de la misma información. Puede hacer esto con las herramientas estándar de xorg con:

xprop -root -notype _NET_CURRENT_DESKTOP
mrtimdog
fuente
6

Si está utilizando compiz, esto será un poco más difícil.

editar: esto ahora funciona con y sin compiz, finalmente ...

Escribí un "pequeño" script de Python para hacerlo:

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

Guarde esto en algún lugar y márquelo como ejecutable. Esto generará solo un número entre 0y el número de espacios de trabajo.

Así es como se ve la enumeración:

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

Tienes que instalar xdotool Instalar xdotool para que esto funcione en caso de que compiz esté deshabilitado.

Stefano Palazzo
fuente
Gracias. Tuve que eliminar "--replace" de la prueba compiz_running, y también pareció obtener un valor incorrecto para vsize (1 vs 2) cuando ejecuté esto en Precise 12.04, aunque las Opciones generales de ccsm decían que mi Tamaño de escritorio / Tamaño virtual vertical es 2.
nealmcb
3

Sin instalar nada y si está usando metacity, puede usar esto:

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
fuente
0

Parece que con Unity, la respuesta aceptada

 xdotool get_desktop_viewport

no funciona, siempre devuelve 0. Supongo que la pantalla está configurada como una ventana muy grande de la cual solo una parte es visible. La alternativa es un poco complicada ya que debes conocer el tamaño de tu espacio de trabajo. Es decir:

 xdotool get_desktop_viewport

devolverá algo así como "1600 0" si está en el espacio de trabajo superior derecho. El primer número es probablemente el ancho de la pantalla más grande que tiene.

nealmcb
fuente