Existe-t-il un moyen de rendre docky disponible uniquement dans un espace de travail et non dans un autre espace de travail dans Ubuntu 14.04.
Basé exactement sur le même mécanisme que cette réponse , sous un script d'arrière-plan qui démarre/arrête le lanceur Docky
, en fonction de l'espace de travail actuel.
Le mécanisme lui-même est à peu près testé. Cela dit, dans la question liée, il est testé en définissant différents lanceurs Unity et en définissant différents fonds d'écran par espace de travail, sans démarrer/arrêter Docky
. Cela ne devrait cependant faire aucune différence, et pendant les heures où je l'ai testé, il a fonctionné sans une seule erreur.
Le script a besoin de wmctrl
:
Sudo apt-get install wmctrl
Copiez le script ci-dessous dans un fichier vide, enregistrez-le sous docky_perworkspace.py
Testez le script:
Docky
Démarrez le script avec la commande:
python3 /path/to/docky_perworkspace.py
Docky fonctionne désormais sur tous les espaces de travail. Accédez aux espaces de travail que vous ne souhaitez pas que Docky
apparaisse et s'exécute (dans l'espace de travail):
pkill docky
N.B. Utilisation pkill docky
, ne fermez pas docky depuis son propre menu!
Si tout fonctionne bien, ajoutez-le à vos applications de démarrage: Dash> Startup Applications> Add the command:
/bin/bash -c "sleep 15&&python3 /path/to/docky_perworkspace.py"
#!/usr/bin/env python3
import subprocess
import os
import time
datadir = os.environ["HOME"]+"/.config/docky_run"
if not os.path.exists(datadir):
os.makedirs(datadir)
workspace_data = datadir+"/docky_set_"
def get_runs():
try:
subprocess.check_output(["pgrep", "docky"]).decode("utf-8")
return True
except:
return False
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()
runs1 = get_runs()
while True:
time.sleep(1)
runs2 = get_runs()
curr_ws2 = current()
datafile = workspace_data+curr_ws2
if curr_ws2 == curr_ws1:
if runs2 != runs1:
open(datafile, "wt").write(str(runs2))
else:
if not os.path.exists(datafile):
open(datafile, "wt").write(str(runs2))
else:
curr_set = eval(open(datafile).read())
if all([curr_set == True, runs2 == False]):
subprocess.Popen(["docky"])
Elif all([curr_set == False, runs2 == True]):
subprocess.Popen(["pkill", "docky"])
curr_ws1 = curr_ws2
runs1 = get_runs()
Le script garde une trace de l'espace de travail actuel (quel que soit le nombre d'espaces de travail dont vous disposez). Par espace de travail, un fichier est créé dans /.config/docky_run
, dans lequel est "écrit" si docky doit être présent ou non sur l'espace de travail référent (True
ou False
)
Si vous restez sur le même espace de travail, mais que docky est soit démarré, soit tué (son pid
apparaît ou se termine), le script "comprend" que c'est vous qui avez effectué la modification sur l'espace de travail référent, et le fichier est mis à jour .
Si l'espace de travail change cependant, le script voit si le fichier existe, le lit et démarre ou tue Docky (ou ne fait rien si ce n'est pas nécessaire), selon au contenu du dossier et à la situation actuelle. Si le fichier n'existe pas encore (car vous utilisez l'espace de travail pour la première fois depuis que vous avez démarré le script pour la première fois), le fichier est créé et défini sur la situation actuelle (dernière).
Étant donné que les paramètres par espace de travail sont mémorisés dans les fichiers, ils seront mémorisés même après un redémarrage.