J'ai lu différentes réponses pour avoir des dossiers de bureau séparés dans chaque espace de travail à l'aide de Screenlets, devilspie ou CCSM ... mais ce n'est pas la réponse à ma question. . J'ai installé 14.04 LTS il y a quelques jours et j'ai eu un bon succès en obtenant la plupart de mes applications et de nouvelles applications. Ce que j'aimerais, c'est avoir 4 espaces de travail distincts, chacun avec des icônes différentes pour les environnements que je lance. Par exemple,
Pensez à une tablette Android où chaque écran peut contenir des icônes distinctes.
Cela doit être évident, mais je ne trouve pas de réponse. J'ai 4 jours sur Ubuntu, alors ne présumez pas que je sais ce que je fais!
1. 2. 3. 4.
La solution ci-dessous permet d’avoir facilement 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) seule combinaison de touches de raccourci pour "mémoriser" l'ensemble des icônes du lanceur pour l'espace de travail actuel.
Un script à exécuter en arrière-plan, assurant le suivi de l'espace de travail actuel et définissant le programme de lancement Unity correspondant. Il agit chaque fois que l'utilisateur change d'espace de travail.
Deux petits scripts sont impliqués:
Le premier script fait une chose simple: il enregistre le contenu du programme de lancement actuel dans un fichier (masqué) de votre répertoire personnel, nommé (numéroté) à la place de votre espace de travail actuel.
Le script second surveille ce qu'est l'espace de travail actuel. S'il existe un espace de travail change , le script voit si un fichier de données correspondant (launcher) existe (créé par le premier script). Si tel est le cas, le fichier est lu et le Unity Launcher est modifié, comme indiqué dans le fichier.
C'est ça.
Le script nécessite que wmctrl
soit 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 les mêmes fonctionnalités et que l'un importe à partir de l'autre. Pour la même raison, il est important que vous les nommiez exactement comme indiqué ci-dessous.
Copiez chacun des scripts ci-dessous dans un fichier (différent) vide, enregistrez-les dans le répertoire (créé dans 2.
), exactement nommé ainsi:
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 __== "__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 tel que: .launcher_data_3
est créé dans votre répertoire personnel. Vous devrez probablement appuyer sur Ctrl+H rendre le fichier visible (les fichiers commençant par .
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 du lanceur et appuyez sur votre combinaison de touches pour "mémoriser" l'ensemble défini pour cet espace de travail spécifique.
Vous avez pratiquement terminé maintenant. Testez et exécutez le script d'arrière-plan avec la commande (à partir d'une fenêtre de terminal, maintenez-le actif):
python3 /path/to/launcher_perworkspace.py
Si tout fonctionne correctement et que votre programme de lancement commute par espace de travail, ajoutez la commande suivante à vos applications de démarrage: Dash> Applications de démarrage> Ajouter:
/bin/bash -c "sleep 15&&python3 /path/to/launcher_perworkspace.py"
D'après votre commentaire, je comprends que vous n'êtes pas sûr de lancer le (s) script (s) et que vous craignez de gâcher votre lanceur actuel.
Je suis à peu près sûr que c'est trop (ou trop peu :)) de respect pour ce que fait le script. Cependant, vous pouvez simplement sauvegarder votre Unity Launcher 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 créera 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 fassiez des erreurs dans votre lanceur, à moins de changer le script manuellement.
Comme demandé dans un commentaire, voici une version qui fonctionne sans avoir à utiliser aucune combinaison de raccourcis ; exécutez simplement le script et commencez à configurer vos lanceurs sur des espaces de travail spécifiques. Le script créera des fichiers (invisibles) dans votre répertoire personnel afin de mémoriser votre ensemble de lanceurs (Unity-) sur les différents espaces de travail.
J'ai essayé cela dans la "version 1" du script, mais "incorporer" toujours les deux vérifications de lanceur entre deux vérifications d'espace de travail s'est avéré être un truc pour éviter les comportements indésirables (enregistrement de données incorrectes) lors d'un déplacement rapide dans les espaces de travail.
Comme la première version, ce script utilise wmctrl
:
Sudo apt-get install wmctrl
Copiez le script dans un fichier vide, enregistrez-le sous le nom 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"
#!/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()
Si vous configurez vos espaces de travail avec la version précédente du script, ils doivent également fonctionner pour cette version.
Depuis le 2015-04-23, la question de Dennis J et les encouragements de Parto ont permis de créer un ppa
pour le script, couvert sur webupd8 , y compris une interface graphique pour gérer.
ppa:vlijm/lswitcher
Pour l'installer, lancez:
Sudo add-apt-repository ppa:vlijm/lswitcher
Sudo apt-get update
Sudo apt-get install lswitcher
Depuis, il est emballé pour Trusty & Utopic. J'en ajouterai d'autres après les tests. Je vais aussi ajouter un installateur .deb
, mais je suggérerais d'utiliser la variable ppa
, car ce genre de choses est mis à jour de temps en temps.
Étant donné que l'emplacement des données de la fenêtre a été modifié de ~/
à ~/.config/lswitcher
, vous devez configurer à nouveau votre lanceur Unity si vous avez utilisé le script précédent.