Saya mencoba mencari cara untuk mendapatkan nomor ruang kerja dari skrip terminal di gnome. Ada ide?
sumber
Saya mencoba mencari cara untuk mendapatkan nomor ruang kerja dari skrip terminal di gnome. Ada ide?
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
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 0
dan jumlah ruang kerja.
Begini tampilannya:
+---+---+
| 0 | 1 |
+---+---+
| 2 | 3 |
+---+---+
Anda harus menginstal xdotool agar ini berfungsi jika compiz dinonaktifkan.
Tanpa memasang apa pun dan jika Anda menggunakan metacity, Anda dapat menggunakan ini:
sumber
Tampaknya dengan Unity, jawaban diterima
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:
akan mengembalikan sesuatu seperti "1600 0" jika Anda berada di ruang kerja kanan atas. Angka pertama mungkin adalah lebar layar terbesar yang Anda miliki.
sumber