Définition d'un lanceur Unity différent par espace de travail:
1. 2. 3. 4.
La solution ci-dessous permet facilement d'avoir un ensemble différent d'icônes de lanceur par espace de travail, quel que soit le nombre d'espaces de travail dont vous disposez.
La configuration comprend deux parties:
Une (une) combinaison de touches de raccourci pour "se souvenir" de l'ensemble des icônes du lanceur pour l'espace de travail actuel.
Un script à exécuter en arrière-plan, gardant une trace de l'espace de travail actuel et définissant le lanceur Unity correspondant. Il agit chaque fois que l'utilisateur change d'espace de travail.
Comment ça marche
Deux petits scripts sont impliqués:
Le premier script fait une chose simple: il écrit le contenu du lanceur actuel dans un fichier (caché) dans votre répertoire personnel, nommé (numéroté) d'après votre espace de travail actuel.
Le deuxième script garde un œil sur l'espace de travail actuel. S'il y a un changement d' espace de travail , le script voit s'il existe un fichier de données (lanceur-) correspondant (créé par le premier script). Si tel est le cas, il lit le fichier et modifie le lanceur Unity, comme se souvient le fichier.
C'est ça.
Comment installer
Le script doit wmctrl
être installé:
sudo apt-get install wmctrl
Créez un répertoire dans lequel les deux scripts seront stockés. Il est important que les deux scripts soient conservés ensemble dans un répertoire, car ils partagent des fonctionnalités et l'un est importé de l'autre. Pour la même raison, il est important de les nommer exactement comme indiqué ci-dessous.
Copiez chacun des scripts ci-dessous dans un fichier (différent) vide, enregistrez-les dans le répertoire (créé en 2.
), exactement nommé comme:
set_workspace.py
#!/usr/bin/env python3
import subprocess
import os
workspace_data = os.environ["HOME"]+"/.launcher_data_"
key = ["gsettings get ", "gsettings set ", "com.canonical.Unity.Launcher favorites"]
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 current viewport
res = get_res()
vp_data = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
dt = [int(n) for n in vp_data[3].split("x")]
cols = int(dt[0]/res[0])
curr_vpdata = [int(n) for n in vp_data[5].split(",")]
curr_col = int(curr_vpdata[0]/res[0])+1; curr_row = int(curr_vpdata[1]/res[1])
return str(curr_col+curr_row*cols)
def remember_current():
currlauncher = subprocess.check_output(["/bin/bash", "-c", key[0]+key[2]]).decode("utf-8").strip()
f = workspace_data+current()
open(f, "w").write(currlauncher)
if __name__ == "__main__":
remember_current()
launcher_perworkspace.py
#!/usr/bin/env python3
import subprocess
import set_workspace
import time
workspace_data = set_workspace.workspace_data
key = set_workspace.key
def check_datafile(desktop):
f = workspace_data+str(desktop)
try:
new_launcher = open(f).read()
command = key[1]+key[2]+' "'+str(new_launcher)+'"'
subprocess.Popen(["/bin/bash", "-c", command])
except FileNotFoundError:
pass
curr_dt1 = set_workspace.current()
check_datafile(curr_dt1)
while True:
time.sleep(1)
curr_dt2 = set_workspace.current()
if curr_dt2 != curr_dt1:
check_datafile(curr_dt2)
curr_dt1 = curr_dt2
Ajoutez le premier script ( set_workspace.py
) à une combinaison de touches de raccourci de votre choix: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande:
python3 /path/to/set_workspace.py
Exécutez la combinaison de touches et voyez si un fichier, comme: .launcher_data_3
est créé dans votre répertoire personnel. Vous devrez probablement appuyer sur Ctrl+ Hpour rendre le fichier visible (les fichiers commençant par un .
sont invisibles par défaut).
Naviguez dans vos espaces de travail et répétez la procédure: définissez une combinaison d'icônes de lanceur et appuyez sur votre combinaison de touches pour "mémoriser" l'ensemble pour cet espace de travail spécifique.
Vous avez pratiquement terminé maintenant. Testez le script d'arrière-plan avec la commande (à partir d'une fenêtre de terminal, continuez à l'exécuter):
python3 /path/to/launcher_perworkspace.py
Si tout fonctionne correctement et que votre lanceur bascule par espace de travail, ajoutez la commande suivante à vos applications de démarrage: Dash> Startup Applications> Add:
/bin/bash -c "sleep 15&&python3 /path/to/launcher_perworkspace.py"
Remarques
- Si vous souhaitez modifier l'ensemble des icônes de lancement pour un espace de travail spécifique, accédez simplement à l'espace de travail, ajoutez / supprimez des icônes comme vous le souhaitez et appuyez sur votre combinaison de touches (pas besoin de redémarrer le script d'arrière-plan).
- D'après les commentaires, j'ai l'impression qu'il y a un malentendu sur le raccourci pour se souvenir du lanceur actuel pour l'espace de travail actuel. Vous n'avez besoin que d' un seul raccourci clavier pour «enregistrer» le lanceur actuel pour l'espace de travail actuel. Il fonctionnera exactement de la même manière, quel que soit l'espace de travail dans lequel vous vous trouvez. Le script lui-même déterminera quel est l'espace de travail actuel.
modifier
D'après votre commentaire, je comprends que vous n'êtes pas sûr d'exécuter le (s) script (s) et vous avez peur de gâcher votre lanceur actuel.
Je suis presque sûr que c'est trop (ou trop peu :)) de respect pour ce que fait le script. Cependant, vous pouvez simplement sauvegarder votre lanceur Unity actuel avec la commande:
printf 'gsettings set com.canonical.Unity.Launcher favorites "' > ~/launcher_output&&printf "$(gsettings get com.canonical.Unity.Launcher favorites)">>~/launcher_output&&printf '"'>>~/launcher_output
Cela va créer un fichier ~/launcher_output
contenant la commande complète pour restaurer votre Unity Launcher à la situation initiale. En cas d'urgence, copiez simplement le contenu du fichier et collez-le dans le terminal.
Mais encore une fois, il est très peu probable que vous gâchiez votre lanceur, sauf si vous modifiez le script manuellement.
MODIFICATION IMPORTANTE (2)
Comme demandé dans un commentaire, une version qui s'exécute sans avoir à utiliser de combinaison de raccourcis; exécutez simplement le script et commencez à configurer vos lanceurs sur les espaces de travail spécifiques. Le script créera des fichiers (invisibles) dans votre répertoire personnel, pour se souvenir de votre ensemble de lanceurs (Unity) sur les différents espaces de travail.
J'ai essayé cela dans la "version 1" du script, mais "incorporant" toujours les deux lanceurs-vérifications entre deux vérifications d'espace de travail s'est avéré être l'astuce pour empêcher un comportement indésirable (enregistrement de données incorrectes) lors du déplacement rapide dans les espaces de travail.
Comment utiliser
Comme la première version, ce script utilise wmctrl
:
sudo apt-get install wmctrl
Copiez le script dans un fichier vide, enregistrez-le sous launcher_toworkspace.py
Exécutez-le avec la commande:
python3 /path/to/launcher_toworkspace.py
Si cela fonctionne comme prévu, ajoutez la commande suivante à vos applications de démarrage:
/bin/bash -c "sleep 15&&python3 /path/to/launcher_toworkspace.py"
Le script
#!/usr/bin/env python3
import subprocess
import os
import time
datadir = os.environ["HOME"]+"/.config/lswitcher"
if not os.path.exists(datadir):
os.makedirs(datadir)
workspace_data = datadir+"/launcher_data_"
key = [
"gsettings get ",
"gsettings set ",
"com.canonical.Unity.Launcher favorites",
]
def get_launcher():
return subprocess.check_output(
["/bin/bash", "-c", key[0]+key[2]]
).decode("utf-8").strip()
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 current viewport
res = get_res()
vp_data = subprocess.check_output(
["wmctrl", "-d"]
).decode("utf-8").split()
dt = [int(n) for n in vp_data[3].split("x")]
cols = int(dt[0]/res[0])
curr_vpdata = [int(n) for n in vp_data[5].split(",")]
curr_col = int(curr_vpdata[0]/res[0])+1
curr_row = int(curr_vpdata[1]/res[1])
return str(curr_col+curr_row*cols)
curr_ws1 = current()
currlauncher1 = get_launcher()
while True:
time.sleep(1)
currlauncher2 = get_launcher()
curr_ws2 = current()
datafile = workspace_data+curr_ws2
if curr_ws2 == curr_ws1:
if currlauncher2 != currlauncher1:
open(datafile, "wt").write(currlauncher2)
else:
if not os.path.exists(datafile):
open(datafile, "wt").write(currlauncher2)
else:
curr_set = open(datafile).read()
command = key[1]+key[2]+' "'+str(curr_set)+'"'
subprocess.Popen(["/bin/bash", "-c", command])
curr_ws1 = curr_ws2
currlauncher1 = get_launcher()
Remarque
Si vous configurez vos espaces de travail avec la version précédente du script, ils devraient également fonctionner pour cette version.
PPA
Selon 2015-04-23, la belle question de Dennis J, et l'encouragement de Parto, ont conduit à créer un ppa
pour le script, couvert sur webupd8 , y compris une interface graphique pour le gérer.
ppa:vlijm/lswitcher
Pour l'installer, exécutez:
sudo add-apt-repository ppa:vlijm/lswitcher
sudo apt-get update
sudo apt-get install lswitcher
Depuis, il est conditionné pour Trusty & Utopic. J'en ajouterai d'autres après le test. J'ajouterai également un programme d' .deb
installation, mais je suggère d'utiliser le ppa
, car généralement ce genre de choses est mis à jour de temps en temps.
Étant donné que l'emplacement des données de la fenêtre d'affichage est passé de ~/
à ~/.config/lswitcher
, vous devrez reconfigurer votre lanceur Unity si vous avez utilisé le script précédent.