web-dev-qa-db-fra.com

Comment mettre le lanceur de l'unité dans différentes positions sur différents moniteurs

J'ai deux moniteurs: l'un est un grand moniteur 2560x1600, que j'utilise comme moniteur principal et sur lequel je travaille le plus, et l'autre est un moniteur 1360x768 configuré verticalement pour être utilisé comme moniteur 'off' - pour des tâches comme mon calendrier et email, popups de notification, ou pour un navigateur web en jouant, etc.

Je l'ai actuellement configuré pour que le lanceur d'unité ne soit situé que sur le bord gauche du moniteur principal.

J'aimerais pouvoir disposer d'un lanceur d'unité distinct pour chaque moniteur. L'avantage est que les applications de chaque moniteur sont uniquement associées au lanceur situé sur ce moniteur, ce qui permet de garder le bureau organisé.

Malheureusement, l’écran horizontal est rare sur le moniteur éteint - je ne veux pas utiliser 48 pixels supplémentaires d’espace horizontal juste pour cela.

Une solution à ce problème consisterait à modifier le paramètre de position du lanceur (par exemple, à l'aide de l'outil Unity Tweak ou similaire) en bas. Cependant, ce paramètre affecterait la position du lanceur sur les deux écrans et je souhaite que le lanceur reste sur le bord gauche de mon moniteur principal.

Comment puis-je configurer l'unité pour utiliser différentes positions de lanceur sur différents moniteurs?

Une autre solution serait d’avoir le lanceur d’unités sur le masquage automatique du moniteur, mais je veux que la barre de lanceur reste statique sur mon moniteur principal. S'il existe un moyen de configurer le comportement de masquage automatique, moniteur par moniteur, cette solution serait également acceptable.

Je préférerais m'en tenir à l'environnement de bureau unitaire par défaut, mais s'il y a un autre DE qui gère très bien plusieurs moniteurs, je serais peut-être intéressé.

4
AJMansfield

Déplacement automatique du lanceur, en fonction de l'écran actif

Une solution possible consiste à modifier automatiquement la position du lanceur en fonction de la position actuelle de la souris:

  • si c'est sur l'écran de gauche, déplacez le lanceur vers la gauche
  • si c'est sur l'écran de droite, déplacez-le vers le bas

Dans le test que j'ai effectué, cela fonctionnait étonnamment bien et les fenêtres s'adaptaient bien au changement.

Le scénario

#!/usr/bin/env python3
import subprocess
import time

scr_data = subprocess.check_output(["xrandr"]).decode("utf-8")
border = int([s.split("x")[0] for s in scr_data.split() if "+0+0" in s][0])
left_scr = [l.split()[0] for l in scr_data.splitlines() if "+0+0" in l][0]

key = "com.canonical.Unity.Launcher"
item = "launcher-position"

def catch_mouse():
    return int(subprocess.check_output([
        "xdotool", "getmouselocation"
        ]).decode("utf-8").split()[0].split(":")[1])

test1 = ""

while True:
    time.sleep(1)
    test2 = catch_mouse() <= border
    if test2 != test1:
        if test2 == True:
            cmd = ["gsettings", "set", key, item, "Left"]
        else:
            cmd = ["gsettings", "set", key, item, "Bottom"]
        subprocess.Popen(cmd)
    test1 = test2

Comment utiliser

  1. Le script a besoin de xdotool:

    Sudo apt-get install xdotool
    
  2. Copiez le script dans un fichier vide, enregistrez-le sous le nom move_launcher.py

  3. Test-le exécuter par la commande (à partir d'un terminal)

    python3 /path/to/move_launcher.py
    
  4. Si tout fonctionne correctement, ajoutez à Applications de démarrage: Dash> Applications de démarrage> Ajouter. Ajouter la commande:

    /binh/bash -c "sleep 15 && python3 && /path/to/move_launcher.py
    

MODIFIER

... ou plus avancé, seul un lanceur sur l'écran actif sur une position arbitraire.

... un script qui ne configurera qu'un seul lanceur (sur l'écran de gauche, sur le côté gauche):

![enter image description here

... pendant que vous travaillez sur l'écran de gauche. Cela vous donnera une vue en taille réelle sur le bon écran ...

... et un lanceur au bas du deuxième écran:

enter image description here

... Si vous vous déplacez vers l'écran de droite, en indiquant le lanceur dont vous avez besoin à la position souhaitée sur l'écran de droite .

Comme mentionné, dans le (s) test (s), les fenêtres se sont adaptées en douceur, sans erreur.

Le scénario

#!/usr/bin/env python3
import subprocess
import time

scr_data = subprocess.check_output(["xrandr"]).decode("utf-8")
border = int([s.split("x")[0] for s in scr_data.split() if "+0+0" in s][0])
left_scr = [l.split()[0] for l in scr_data.splitlines() if "+0+0" in l][0]
right_scr = [l.split()[0] for l in scr_data.splitlines() if all([
    not "+0+0" in l, l.count("+") == 2])][0]

key = "com.canonical.Unity.Launcher"
item = "launcher-position"

subprocess.call(["dconf", "write",
        "/org/compiz/profiles/unity/plugins/unityshell/num-launchers", "1"])

def catch_mouse():
    return int(subprocess.check_output([
        "xdotool", "getmouselocation"
        ]).decode("utf-8").split()[0].split(":")[1])

test1 = ""

while True:
    time.sleep(1)
    test2 = catch_mouse() <= border
    if test2 != test1:
        if test2 == True:
            cmd1 = ["xrandr", "--output", left_scr, "--primary"]
            cmd2 = ["gsettings", "set", key, item, "Left"]
        else:
            cmd1 = ["xrandr", "--output", right_scr, "--primary"]
            cmd2 = ["gsettings", "set", key, item, "Bottom"]
        subprocess.Popen(cmd1)
        subprocess.call(cmd2)
    test1 = test2

Utiliser

  • Cette version fonctionne exactement comme la première.

Remarque

Ce ne sont que deux exemples. Beaucoup de choses sont possibles.

Deux lanceurs, en même temps sur une position différente par écran , est actuellement impossible cependant, jusqu'à ce que quelqu'un crée l'option ...

7
Jacob Vlijm

Je ne vois pas de mécanisme permettant de choisir un emplacement différent pour un seul lanceur (par exemple, Unity) sur différents moniteurs.

Vu le problème de l'immobilier (horizontal limité), je peux voir que placer un lanceur au bas de l'écran et le masquer automatiquement serait une solution.

Dans Ubuntu 16.04 LTS, vous pouvez déplacer le lanceur vers le bas, mais je me rends compte que cela entraîne l’absence du lanceur sur le côté gauche de votre moniteur principal (votre autre problème).

Et si vous aviez deux lanceurs (cachés) sur les deux écrans? Un à gauche et un en bas de l'écran?

Voir cet article pour un mécanisme d'utilisation d'un lanceur alternatif (Cairo Dock): http://www.howtogeek.com/202708/how-to-convert-the-unity-launcher-into-a-dock- style-launcher /

J'ai testé cela (14.04 LTS) et je peux confirmer l'installation d'Unity Tweak Tool et Cairo Dock vous fournira deux lanceurs (masqués, si vous le souhaitez) sur les deux écrans - un (Unity Launcher) à gauche et un autre. (Cairo Dock) en bas de l'écran.

D'après mon évaluation de vos besoins, cela répondrait aux deux, mais cela signifierait que deux lanceurs soient exécutés sur les deux écrans afin que vous puissiez choisir lequel utiliser lorsque cela vous convient.

Cairo-Dock vous permet, si vous possédez plusieurs moniteurs, de gérer l'emplacement du Dock/Launcher afin qu'il apparaisse à un emplacement spécifique sur un seul moniteur en exploitant les fonctionnalités de Xinerama.

Je ne pense pas que cela apporterait des avantages significatifs si le Dock/Launcher est toujours masqué automatiquement, mais cela pourrait vous offrir une certaine flexibilité et potentiellement une solution à laquelle je ne peux pas penser ... :)

Voir ici pour l'option: https://glx-dock.org/bg_topic.php?t=5632

1
Simon