J'ai deux moniteurs. J'ai plusieurs espaces de travail. Je souhaite que mon lanceur ("emplacement du lanceur" dans les paramètres> écrans) soit présent sur mes deux moniteurs dans le même espace de travail, mais que je ne dispose que d'un seul lanceur (sur le moniteur principal) dans l'autre. C'est parce que je veux étendre Tweetdeck sur les deux moniteurs et que le lanceur s'interpose. Est-ce possible?
Espace de travail 1 (bon):
Espace de travail 2 (pas bon):
Espace de travail 2 (bon):
Le placement du lanceur est défini par quelques éléments:
La valeur définie dans /org/compiz/profiles/unity/plugins/unityshell/num-launchers
. Vous pouvez le lire par la commande:
dconf read /org/compiz/profiles/unity/plugins/unityshell/num-launchers
qui générera soit 1
(lanceur sur un écran), soit 0
(lanceur sur tous les écrans).
Pour définir le lanceur visible sur tous les écrans peut être effectué à l'aide de la commande:
dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers 0
Si la valeur est 1
(visible sur un seul écran), nous pouvons définir sur quel écran apparaît le programme de lancement en définissant l'écran ciblé. comme écran primaire , avec une commande xrandr
:
xrandr --output <screen_name> --primary
Ce sont exactement les commandes que le (s) script (s) ci-dessous utilise (s).
Selon l'argument avec lequel vous exécutez le script, le lanceur doit s'afficher sur tous les écrans à l'aide de la commande:
dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers 0
ou sur un seul:
dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers 1
Dans ce dernier cas, l’écran de gauche est également défini comme écran principal.
#!/usr/bin/env python3
import subprocess
import sys
key = "dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers "
arg = sys.argv[1]
if arg == "left":
# the launcher is set to show on all screens
subprocess.Popen(["/bin/bash", "-c", key+"1"])
Elif arg == "all":
# the launcher is set to show only on the left screen
subprocess.Popen(["/bin/bash", "-c", key+"0"])
# make sure the left screen is the primary one
scr_data = subprocess.check_output(["xrandr"]).decode("utf-8").splitlines()
left = [l.split()[0] for l in scr_data if "+0+0" in l][0]
subprocess.Popen(["xrandr", "--output", left, "--primary"])
launcher_pos.py
Testez le script avec les deux commandes (depuis une fenêtre de terminal):
python3 /path/to/launcher_pos.py left
et
python3 /path/to/launcher_pos.py all
si tout fonctionne correctement, ajoutez les commandes à deux combinaisons de touches de raccourci: choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez les deux commandes aux raccourcis disponibles.
Le script ci-dessous garde automatiquement la trace de l’espace de travail actuel (quel que soit le nombre d’espaces de travail que vous avez et dans quelle configuration).
Ce script est exécuté avec les espaces de travail où vous souhaitez que le programme de lancement ne s'affiche que sur la gauche en tant qu'argument. Un exemple:
Si vous exécutez le script avec la commande:
python3 /path/to/launcher_pos.py 2 3
Le résultat est:
import subprocess
import sys
import time
wspace = sys.argv[1:]
key = "dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers "
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(",", "") )]
res = get_res()
def get_dt():
# get the current viewport
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 set_launcher(arg):
if arg == "left":
# the launcher is set to show on all screens
subprocess.Popen(["/bin/bash", "-c", key+"1"])
Elif arg == "all":
# the launcher is set to show only on the left screen
subprocess.Popen(["/bin/bash", "-c", key+"0"])
# make sure the left screen is the primary one
scr_data = subprocess.check_output(["xrandr"]).decode("utf-8").splitlines()
left = [l.split()[0] for l in scr_data if "+0+0" in l][0]
subprocess.Popen(["xrandr", "--output", left, "--primary"])
curr_ws1 = get_dt()
while True:
time.sleep(1)
curr_ws2 = get_dt()
if curr_ws2 != curr_ws1:
if curr_ws2 in wspace:
arg = "left"
else:
arg = "all"
set_launcher(arg)
curr_ws1 = curr_ws2
Le script a besoin de wmctrl
Sudo apt-get install wmctrl
Copiez le script dans un fichier vide, enregistrez-le sous le nom launcher_pos.py
Testez-le avec la commande:
python3 /path/to/launcher_pos.py 1 3
Sur les espaces de travail 1 et 3, le lanceur ne devrait maintenant apparaître que sur la gauche
Si tout fonctionne correctement, ajoutez-le à vos applications de démarrage: Dash> Applications de démarrage> Ajouter. Ajoutez la commande:
/bin/bash -c "sleep 15 && python3 /path/to/launcher_pos.py 1 3"
(Si les espaces de travail 1 et 3 sont ceux pour lesquels vous ne voulez que le lanceur à gauche)