Existe uma maneira de detectar em qual área de trabalho você está atualmente na linha de comando?

7

Estou tentando descobrir como obter o número do espaço de trabalho de um script de terminal no gnome. Alguma idéia?

    
por wajiw 15.12.2010 / 01:12

5 respostas

9

Se você não estiver usando o Compiz, você pode usar xdotool .

Exemplo:

xdotool get_desktop

Isso retornará 0 se executado a partir da primeira área de trabalho, 1 se executado a partir da segunda, etc.

    
por Isaiah 15.12.2010 / 01:35
7

Um tópico antigo e respondido, mas eu estava apenas após a mesma informação. Você pode fazer isso com ferramentas xorg padrão com:

xprop -root -notype _NET_CURRENT_DESKTOP
    
por mrtimdog 13.06.2013 / 08:58
6

Se você estiver usando o compiz, isso será um pouco mais difícil.

edit: isso agora funciona com e sem compiz, finalmente ...

Eu escrevi um "pequeno" script python para fazer isso:

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

Salve isso em algum lugar e marque-o como executável. Isso produzirá apenas um número entre 0 e o número de espaços de trabalho.

É assim que a enumeração se parece:

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

Você precisa instalar o xdotool para que isso funcione caso o compiz esteja desabilitado.

    
por Stefano Palazzo 15.12.2010 / 02:16
3

Sem instalar nada e se você estiver usando metacity, você pode usar isto:

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
    
por Nyamiou The Galeanthrope 15.12.2010 / 02:11
0

Parece que, com o Unity, a resposta aceita

 xdotool get_desktop_viewport

não funciona - sempre retorna 0. Eu acho que a tela está configurada como uma viewport realmente grande da qual apenas uma parte é visível. A alternativa é um pouco complicada, já que você precisa saber o tamanho do seu espaço de trabalho. Ou seja:

 xdotool get_desktop_viewport

retornará algo como "1600 0" se você estiver no espaço de trabalho superior direito. O primeiro número é provavelmente a largura da maior tela que você tem.

    
por nealmcb 18.08.2013 / 19:00