C'è un modo per rilevare lo spazio di lavoro in cui ti trovi attualmente dalla riga di comando?


12

Sto cercando di capire come ottenere il numero dell'area di lavoro da uno script terminale in gnome. Qualche idea?

Risposte:


13

Se non stai usando Compiz, puoi usare xdotool Installa xdotool .

Esempio:

xdotool get_desktop

Questo restituirà 0se eseguito dal primo spazio di lavoro, 1se eseguito dal secondo ecc.


7

Un vecchio thread con risposta, ma ero subito dopo le stesse informazioni. Puoi farlo con gli strumenti xorg standard con:

xprop -root -notype _NET_CURRENT_DESKTOP

6

Se si sta utilizzando compiz, questo sarà un po 'più difficile.

modifica: ora funziona sia con che senza compiz, finalmente ...

Ho scritto un "piccolo" script Python per farlo:

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

Salvalo da qualche parte e contrassegnalo come eseguibile. Questo produrrà solo un numero compreso tra 0e il numero di aree di lavoro.

Ecco come appare l'enumerazione:

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

Devi installare xdotool Installa xdotool per farlo funzionare nel caso in cui compiz sia disabilitato.


Grazie. Ho dovuto rimuovere "--replace" dal test compiz_running e mi è sembrato anche di ottenere un valore errato per vsize (1 vs 2) durante l'esecuzione su Precise 12.04, anche se ccsm General Options ha detto che la mia dimensione desktop / dimensione virtuale verticale è 2.
nealmcb,

3

Senza installare nulla e se si utilizza metacity, è possibile utilizzare questo:

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

Sembra che con Unity, la risposta accettata

 xdotool get_desktop_viewport

non funziona - restituisce sempre 0. Immagino che lo schermo sia configurato come una finestra davvero grande di cui solo una parte è visibile. L'alternativa è un po 'complicata poiché devi conoscere le dimensioni del tuo spazio di lavoro. Vale a dire:

 xdotool get_desktop_viewport

restituirà qualcosa come "1600 0" se ci si trova nell'area di lavoro in alto a destra. Il primo numero è probabilmente la larghezza del display più grande che hai.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.