Apakah ada cara untuk mendeteksi ruang kerja Anda saat ini dari baris perintah?

12

Saya mencoba mencari cara untuk mendapatkan nomor ruang kerja dari skrip terminal di gnome. Ada ide?

wajiw
sumber

Jawaban:

13

Jika Anda tidak menggunakan Compiz, Anda dapat menggunakan xdotool Instal xdotool .

Contoh:

xdotool get_desktop

Ini akan kembali 0jika dijalankan dari ruang kerja pertama, 1jika dijalankan dari yang kedua dll.

Yesaya
sumber
7

Sebuah utas lama, dan jawab, tetapi saya hanya mencari info yang sama. Anda dapat melakukan ini dengan alat xorg standar dengan:

xprop -root -notype _NET_CURRENT_DESKTOP
mrtimdog
sumber
6

Jika Anda sedang menggunakan compiz, ini akan menjadi sedikit lebih sulit.

sunting: ini sekarang berfungsi baik dengan dan tanpa compiz, akhirnya ...

Saya menulis skrip python "kecil" untuk melakukannya:

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

Simpan ini di suatu tempat dan tandai sebagai executable. Ini hanya akan menghasilkan angka antara 0dan jumlah ruang kerja.

Begini tampilannya:

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

Anda harus menginstal xdotool Instal xdotool agar ini berfungsi jika compiz dinonaktifkan.

Stefano Palazzo
sumber
Terima kasih. Saya harus menghapus "--replace" dari tes compiz_running, dan juga sepertinya mendapatkan nilai yang salah untuk vsize (1 vs 2) ketika menjalankan ini pada Precise 12.04, walaupun ccsm General Options mengatakan Ukuran Desktop saya / Ukuran Virtual Vertikal adalah 2.
nealmcb
3

Tanpa memasang apa pun dan jika Anda menggunakan metacity, Anda dapat menggunakan ini:

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

Tampaknya dengan Unity, jawaban diterima

 xdotool get_desktop_viewport

tidak berfungsi - selalu mengembalikan 0. Saya kira layar dikonfigurasikan sebagai viewport yang sangat besar yang hanya sebagian yang terlihat. Alternatifnya agak rumit karena Anda harus tahu ukuran ruang kerja Anda. Yaitu:

 xdotool get_desktop_viewport

akan mengembalikan sesuatu seperti "1600 0" jika Anda berada di ruang kerja kanan atas. Angka pertama mungkin adalah lebar layar terbesar yang Anda miliki.

nealmcb
sumber