Existe-t-il un moyen pour un script bash de rechercher le nom de l'espace de travail actuel (bureau virtuel)?
Cela semble vraiment utile, par exemple pour personnaliser les comportements dans mon fichier .bashrc en fonction du bureau sur lequel le shell a été créé.
Vous pouvez le faire avec wmctrl -d
pour répertorier tous les espaces de travail. Le *
représente l'espace de travail actuel:
~$ 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
Donc, pour obtenir uniquement le courant, grep pour le *
:
~$ wmctrl -d | grep -w '*'
0 * DG: 3840x1080 VP: 0,0 WA: 0,25 3840x1055 1
J'espère que cela t'aides!
Si vous utilisez Unity , la fenêtre d'affichage actuelle ne peut pas être extraite directement de
wmctrl -d
depuis que Unity a des fenêtres, qui ne sont pas détectées directement par wmctrl -d
. La sortie ne montrera qu'un seul espace de travail:
0 * DG: 5040x2100 VP: 1680,1050 WA: 59,24 1621x1026 N/A
xrandr
)5040x2100
. Cela correspond à 3 vues sur 2: 5040/1680 = 3 et 2100/1050 = 2.1680,1050
(x, y)Le script ci-dessous calcule la fenêtre d'affichage actuelle à partir de ces informations:
#!/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())
Installer wmctrl
Sudo apt install wmctrl
Exécuter par la commande
python3 /path/to/get_viewport.py
Il affichera 1, 2, 3, ou quelle que soit la fenêtre d'affichage actuelle. Il compte automatiquement les lignes/colonnes que votre configuration de fenêtre peut inclure.
Le scénario
xrandr
, y compris les moniteurs supplémentaires possibles.Au moins dans Gnome Shell, mais probablement dans d’autres WM, vous pouvez demander directement au serveur X (si vous êtes dans Wayland, aucune idée).
[romano:~/tmp] % desktop=$(xprop -root -notype _NET_CURRENT_DESKTOP | Perl -pe 's/.*?= (\d+)/$1/')
[romano:~/tmp] % echo $desktop
1
En gros, la commande xprop
retournera
[romano:~/tmp] % xprop -root -notype _NET_CURRENT_DESKTOP
_NET_CURRENT_DESKTOP = 1
et puis vous pouvez masser un peu l'information pour obtenir ce dont vous avez besoin.