Próbuję wymyślić, jak uzyskać numer obszaru roboczego ze skryptu terminalowego w gnome. Jakieś pomysły?
źródło
Próbuję wymyślić, jak uzyskać numer obszaru roboczego ze skryptu terminalowego w gnome. Jakieś pomysły?
Stary wątek z odpowiedzią, ale szukałem tych samych informacji. Możesz to zrobić za pomocą standardowych narzędzi xorg za pomocą:
xprop -root -notype _NET_CURRENT_DESKTOP
Jeśli są za pomocą compiz, będzie to nieco trudniejsze.
edycja: teraz działa zarówno z kompizem, jak i bez niego, w końcu ...
Napisałem „mały” skrypt Pythona, aby to zrobić:
#!/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()
Zapisz to gdzieś i oznacz jako plik wykonywalny. Spowoduje to wyświetlenie tylko liczby między 0
i liczby obszarów roboczych.
Tak wygląda wyliczenie:
+---+---+
| 0 | 1 |
+---+---+
| 2 | 3 |
+---+---+
Musisz zainstalować xdotool, aby działało to w przypadku wyłączenia compiz.
Bez instalowania czegokolwiek i jeśli używasz metacity, możesz użyć tego:
źródło
Wydaje się, że przy Unity przyjęta odpowiedź
nie działa - zawsze zwraca 0. Myślę, że ekran jest skonfigurowany jako naprawdę duży obszar wyświetlania, którego widoczna jest tylko część. Alternatywa jest nieco trudna, ponieważ musisz znać rozmiar swojego obszaru roboczego. To znaczy:
zwróci coś w rodzaju „1600 0”, jeśli jesteś w prawym górnym obszarze roboczym. Pierwsza liczba to prawdopodobnie szerokość największego wyświetlacza, jaki masz.
źródło