J'ai configuré mes raccourcis clavier de sorte que Alt + gauche m'amène à l'espace de travail à gauche et Alt + droite m'emmène à l'espace de travail à droite, mais je préférerais avoir un jeu de touches pour faire défiler. Idéalement, quelque chose comme
workspace 1 + Alt + tab ---> worskspace 2
workspace 2 + Alt + tab ---> worskspace 3
workspace 3 + Alt + tab ---> worskspace 4
workspace 4 + Alt + tab ---> worskspace 1
Le problème est la dernière ligne. Je ne vois aucun moyen de revenir de l'espace de travail 4 à l'espace de travail 1. Comment passer au bon module 4?
Avec un petit script, il est très bien possible de parcourir les espaces de travail (en fait les fenêtres):
en avant:
(Si la dernière fenêtre est atteinte, le script passe à la première)
... ou en arrière:
(Si la première fenêtre est atteinte, le script passe à la dernière)
#!/usr/bin/env python3
import subprocess
import sys
move = sys.argv[1]
# get the needed info from wmctrl -d
wsdata = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
# retrieve total size of workspace
ws = [int(n) for n in wsdata[3].split("x")]
# panel/launcher height/width
pans = [int(n) for n in wsdata[7].split(",")]
# work area
wa = [int(n) for n in wsdata[8].split("x")]
# x/y resolution
res_h = pans[0]+wa[0]; res_v = pans[1]+wa[1]
# current position in the spanning workspace
VP = [int(n) for n in wsdata[5].split(",")]
def last_h():
# test if we are on the last viewport horizontally
return VP[0]+res_h == ws[0]
def first_h():
# test if we are on the first viewport horizontally
return VP[0] == 0
def last_v():
# test if we are on the last viewport vertically
return VP[1]+res_v == ws[1]
def first_v():
# test if we are on the first viewport vertically
return VP[1] == 0
if move == "next":
if last_h() == False:
command = str(VP[0]+res_h)+","+str(VP[1])
Elif last_v() == True:
command = "0,0"
else:
command = "0,"+str(VP[1]+res_v)
if move == "prev":
if first_h() == False:
command = str(VP[0]-res_h)+","+str(VP[1])
Elif first_v() == True:
command = str(ws[0]-res_h)+","+str(ws[1]-res_v)
else:
command = str(ws[0]-res_h)+","+str(VP[1]-res_v)
subprocess.Popen(["wmctrl", "-o", command])
Le script a besoin de wmctrl :
Sudo apt-get install wmctrl
Copiez le script dans un fichier vide, enregistrez-le sous through_viewports.py
Ajoutez deux commandes à deux touches de raccourci différentes:
python3 /path/to/through_viewports.py next
pour passer à la fenêtre suivante et:
python3 /path/to/through_viewports.py prev
aller à la fenêtre précédente
Ouvrez Paramètres système> Clavier> Raccourcis> Raccourcis personnalisés. Clique le +
et ajoutez les deux commandes aux raccourcis que vous aimez.
C'est tout Le script détecte comment vos fenêtres sont configurées et les parcourt.
Dans Unity, les fenêtres sont disposées dans une seule grande matrice, ce qui rend l'ensemble unique espace de travail, le bureau Unity existe.
Utilisation de la commande:
wmctrl -d
dans la sortie, nous pouvons lire toutes les informations dont nous avons besoin pour savoir où nous en sommes actuellement dans la matrice.
0 * DG: 5120x2400 VP: 0,0 WA: 65,24 1215x776 N/A
5120x2400
est la taille totale de toutes les fenêtres (matrice)0,0
est la position x/y de la fenêtre courante dans la matrice (en haut à gauche, pixels)WA: 65,24 1215x776
on peut dériver la résolution de l'écran (65,24
sont la largeur/hauteur du lanceur/panneau, 1215x776
est la zone restante)Une fois que nous avons les informations correctes, le script calcule la position cible dans la matrice et la définit avec la commande:
wmctrl -o x,y
En 12.04, j'avais résolu ce problème en modifiant une clé avec gconf-editor, mais je n'avais pas cette même clé en 16.04, alors voici ce qui a fonctionné pour moi:
Sudo apt-get install compizconfig-settings-manager
qui installe un utilitaire de paramètres avancés de l'interface graphique, puis
ccsm
qui le lance. Et puis je suis allé à Desktop Wall> Viewport Switching> Allow Wrap-Around et j'ai coché la case.