Wie kann ich den Namen des aktuellen Arbeitsbereichs nachschlagen?

11

Gibt es eine Möglichkeit für ein Bash-Skript, den Namen des aktuellen Arbeitsbereichs (virtueller Desktop) nachzuschlagen?

Dies scheint sehr nützlich zu sein, um beispielsweise das Verhalten in meiner .bashrc-Datei basierend auf dem Desktop anzupassen, auf dem die Shell erstellt wurde.

DonGar
quelle
Was ist dein Fenstermanager?
Jacob Vlijm
Ich verwende den unter Ubuntu installierten Cinnamon-Desktop. Ich dachte, ich hätte es gesagt, aber als ich die Frage nach unten bearbeitet habe, muss ich zu viel herausgezogen haben.
DonGar
1
Unter Cinnamon gibt dies das letzte Wort im Desktop-Namen an. Das ist gut genug für meinen Anwendungsfall. Desktop =wmctrl -d | grep '*' | sed 's/.* //g'
DonGar

Antworten:

13

Sie können damit wmctrl -dalle Arbeitsbereiche auflisten. Das *repräsentiert den aktuellen Arbeitsbereich:

~$ wmctrl -d
0  * DG: 3840x1080  VP: 0,0  WA: 0,25 3840x1055  1
1  - DG: 3840x1080  VP: N/A  WA: 0,25 3840x1055  2
2  - DG: 3840x1080  VP: N/A  WA: 0,25 3840x1055  3
3  - DG: 3840x1080  VP: N/A  WA: 0,25 3840x1055  4

Um nur den aktuellen Stand zu erhalten, grep nach *:

~$ wmctrl -d | grep -w '*'
0  * DG: 3840x1080  VP: 0,0  WA: 0,25 3840x1055  1

Hoffe das hilft!

Terrance
quelle
Wenn OP Unity verwendet, gibt es nur einen Arbeitsbereich :), ebenfalls in der Ausgabe vonwmctrl -d
Jacob Vlijm
@JacobVlijm Dann würde sich OP wahrscheinlich keine Sorgen machen, wenn es nur einen Arbeitsbereich gäbe. :)
Terrance
Natürlich wird er das, aber dann werden sie Ansichtsfenster genannt und sind nicht direkt abrufbar wmctrl -d.
Jacob Vlijm
@JacobVlijm Nun, ein leuchtendes Licht ist, dass Unity nicht mehr die Standardeinstellung sein wird und nach der Veröffentlichung von 18.04 verschwunden ist. : D
Terrance
Ich mag es wirklich und es wird wahrscheinlich gegabelt.
Jacob Vlijm
11

Ansichtsfenster in Unity

Wenn Sie Unity verwenden , kann das aktuelle Ansichtsfenster nicht direkt von abgerufen werden

wmctrl -d

da Unity Ansichtsfenster hat, die von nicht direkt erkannt werden wmctrl -d. Die Ausgabe zeigt nur einen Arbeitsbereich:

0  * DG: 5040x2100  VP: 1680,1050  WA: 59,24 1621x1026  N/A
  • wo meine Auflösung 1680 x 1050 ist (von xrandr)
  • Der übergreifende Arbeitsbereich (alle Ansichtsfenster) ist 5040x2100. Das sind 3x2-Ansichtsfenster: 5040/1680 = 3 und 2100/1050 = 2.
  • Ich bin derzeit auf (Ansichtsfenster-) Position 1680,1050(x, y)

Das folgende Skript berechnet das aktuelle Ansichtsfenster aus diesen Informationen:

#!/usr/bin/env python3
import subprocess

def get_res():
    # get resolution
    xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
    pos = xr.index("current")
    return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]

def current():
    # get the resolution (viewport size)
    res = get_res()
    # read wmctrl -d
    vp_data = subprocess.check_output(
        ["wmctrl", "-d"]
        ).decode("utf-8").split()
    # get the size of the spanning workspace (all viewports)
    dt = [int(n) for n in vp_data[3].split("x")]
    # calculate the number of columns
    cols = int(dt[0]/res[0])
    # calculate the number of rows
    rows = int(dt[1]/res[1])
    # get the current position in the spanning workspace
    curr_vpdata = [int(n) for n in vp_data[5].split(",")]
    # current column (readable format)
    curr_col = int(curr_vpdata[0]/res[0])
    # current row (readable format)
    curr_row = int(curr_vpdata[1]/res[1])
    # calculate the current viewport
    return curr_col+curr_row*cols+1

print(current())

Benutzen:

  1. Installieren wmctrl

    sudo apt install wmctrl
    
  2. Führen Sie es mit dem Befehl aus

    python3 /path/to/get_viewport.py
    

    Es wird 1, 2, 3 oder das aktuelle Ansichtsfenster ausgegeben. Es zählt automatisch Zeilen / Spalten, die Ihre Ansichtsfenster-Konfiguration enthalten kann.

Erläuterung

Geben Sie hier die Bildbeschreibung ein

Das Skript

  • Ruft die Größe eines Ansichtsfensters (Auflösung) ab xrandr, einschließlich möglicher zusätzlicher Monitore.
  • Ruft die aktuelle Position im übergreifenden Arbeitsbereich ab
  • Galvanisiert die Anzahl der Spalten / Zeilen in Ihrem Ansichtsfenster-Setup
  • Daraus wird das aktuelle Ansichtsfenster berechnet
Jacob Vlijm
quelle
1
Unabhängig davon, wie ich Unity finde, funktioniert dieses Skript wirklich gut! Schön gemacht! +1
Terrance
3

Zumindest in der Gnome-Shell, aber wahrscheinlich auch in anderen WM, können Sie den Xserver direkt fragen (wenn in Wayland, keine Ahnung).

[romano:~/tmp] % desktop=$(xprop -root -notype  _NET_CURRENT_DESKTOP | perl -pe 's/.*?= (\d+)/$1/') 
[romano:~/tmp] % echo $desktop
1

Grundsätzlich wird der Befehl xpropzurückgegeben

 [romano:~/tmp] % xprop -root -notype  _NET_CURRENT_DESKTOP
 _NET_CURRENT_DESKTOP = 1

und dann können Sie die Informationen ein wenig massieren, um das zu bekommen, was Sie brauchen.

Rmano
quelle
Das ist die Nummer des Arbeitsbereichs, nicht der Name. Um den Namen zu erhalten, müssen Sie die Nummer in der Eigenschaft nachschlagen _NET_DESKTOP_NAMES.
Gilles 'SO - hör auf böse zu sein'