web-dev-qa-db-fra.com

Comment désactiver automatiquement l'affichage par défaut et définir la résolution si je connecte un affichage spécifique?

Chaque fois que je me connecte à un moniteur externe spécifique, la résolution par défaut n'est pas celle que je veux et je dois la régler à nouveau.

Comment enregistrer une résolution spécifique pour un écran spécifique et désactiver mon écran par défaut si je connecte cet écran?

2
Lawand

Régler la résolution en fonction de la présence d'un écran attaché (spécifique)

Ci-dessous deux options:

  1. Régler la résolution de l’écran et changer d’écran (détection automatique du deuxième écran) par une touche de raccourci
  2. Exécutez un script en arrière-plan pour éteindre automatiquement l'écran principal et changer la résolution

Option 1; raccourci

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

# set the default screen
default = "DVI-I-1"
# set the specific external screen
external = "VGA-1"
# set the resolution of the single screen setup
singleres = "1680x1050"
# set the resolution of the specific external screeen
extrares = "1280x1024"

def get(cmd):
    return subprocess.check_output(cmd).decode("utf-8")

def run(cmd):
    subprocess.call(cmd)

def get_screens():
    return [l.split()[0] for l in get("xrandr").splitlines() if " connected" in l]

def set_screen(n_scr, screens):
    if n_scr == 1:
        run(["xrandr", "--output", default, "--auto"])
        run(["xrandr", "-s", singleres])
        print("1 screen")
    Elif all([n_scr == 2, external in screens]):    
        run(["xrandr", "--output", default, "--off"])
        run(["xrandr", "-s", extrares])
        print("2 screens")

screens = get_screens()
n_scr2 = len(screens)
set_screen(n_scr2, screens)

Option 2; une version de fond

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

# set the default screen
default = "DVI-I-1"
# set the specific external screen
external = "VGA-1"
# set the resolution of the single screen setup
singleres = "1680x1050"
# set the resolution of the specific external screeen
extrares = "1280x1024"

def get(cmd):
    try:
        return subprocess.check_output(cmd).decode("utf-8")
    except subprocess.CalledProcessError:
        pass

def run(cmd):
    subprocess.call(cmd)

def get_screens(scrdata):
    return [l.split()[0] for l in scrdata.splitlines() if " connected" in l]

def set_screen(n_scr, screens):
    if n_scr == 1:
        run(["xrandr", "--output", default, "--auto"])
        run(["xrandr", "-s", singleres])
        print("1 screen")
    Elif all([n_scr == 2, external in screens]):    
        run(["xrandr", "--output", default, "--off"])
        run(["xrandr", "-s", extrares])
        print("2 screens")

n_scr1 = None

while True:
    time.sleep(4)
    scrdata = get("xrandr")
    if scrdata:
        screens = get_screens(scrdata)
        n_scr2 = len(screens)
        if n_scr2 != n_scr1:
            set_screen(n_scr2, screens)
        n_scr1 = n_scr2

Comment utiliser

  1. Copiez l'un des scripts ci-dessus dans un fichier vide, enregistrez-le sous le nom set_screens.py
  2. Remplacez dans la section head du script les valeurs pour:

    # set the default screen
    default = "DVI-I-1"
    # set the specific external screen
    external = "VGA-1"
    # set the resolution of the single screen setup
    singleres = "1680x1050"
    # set the resolution of the specific external screeen
    extrares = "1280x1024"
    

    (les paramètres actuels sont juste pour ma configuration de test)

  3. Testez, exécutez et appliquez le script:

    • si vous utilisez l'option 1, le raccourci :

      Ouvrez un terminal, exécutez le script par la suite avec et sans l'écran externe, avec la commande:

      python3 /path/to/set_screens.py
      

      Il convient de définir les écrans comme prévu.

      Ajoutez ensuite, si tout fonctionne bien, le script à un raccourci: Choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande:

      python3 /path/to/set_screens.py
      
    • si vous utilisez l'option 2, le script d'arrière-plan :

      Ouvrez un terminal, lancez le script avec la commande:

      python3 /path/to/set_screens.py
      

      et connectez/déconnectez le moniteur externe. Cela devrait changer la résolution et allumer/éteindre votre moniteur par défaut comme prévu.

      Ajoutez ensuite, si tout fonctionne bien, le script dans Applications de démarrage: Dash> Applications de démarrage> Ajouter. Ajoutez la commande:

      /bin/bash -c "sleep 10 && python3 /path/to/set_screens.py"
      
1
Jacob Vlijm