GNU/Linux >> Tutoriels Linux >  >> Linux

Un outil pour appliquer automatiquement la configuration RandR lorsqu'un écran externe est branché

En ce qui concerne un outil qui peut stocker des profils de configuration de moniteur par utilisateur et par affichage, autorandr fera exactement cela.

Mon ordinateur portable a une carte NVIDIA, j'utilise donc le backend disper au lieu de xrandr. Autorandr utilisera disper comme backend pour gérer vos moniteurs si vous l'appelez autodisper . Pour le reste de cet article, je l'appellerai autorandr pour plus de cohérence.

Vous pouvez enregistrer des profils avec autorandr --save profile_name . Exécution de autorandr par lui-même vous donnera alors une liste de profils, et identifiera celui qui est détecté comme la configuration actuelle.

Par exemple :

$ autorandr
laptop
syncmaster19 (detected)

Vous pouvez lui dire de charger automatiquement le profil approprié pour la configuration actuelle avec autorandr --change . Cette commande, associée à une règle udev pour l'exécuter lorsqu'elle est branchée à chaud, ferait ce que vous avez demandé.

Par mesure de précaution supplémentaire, j'ai ajouté --default laptop à cette commande, ce qui en fera l'affichage par défaut de l'ordinateur portable s'il n'y a pas de profil enregistré correspondant à la configuration actuelle. Donc la commande complète que j'utilise pour changer d'affichage est :

autorandr --change --default laptop

Malheureusement, ma machine ne donne aucune sortie udev lorsque je connecte mon moniteur à chaud. J'utilise les pilotes propriétaires NVIDIA, ce n'est donc pas surprenant. Je l'ai donc lié à la touche XF68Display (Fn-F8) pour l'instant, ce qui est presque aussi bon.


J'utilise ce script simple (fait maison) qui continue d'interroger RandR et bascule entre LVDS1 et VGA1 lorsque VGA est connecté/déconnecté. (Pour HDMI sorties, dans le fichier de script suivant, modifiez tous les VGA1 à HDMI1 )

C'est une sale solution, mais elle fonctionne très bien.

Il est personnalisé pour ma configuration :vous devrez probablement modifier les noms de sortie RandR (LVDS1 et VGA1 ) et contrairement à moi, vous serez probablement d'accord avec votre mode par défaut RandR pour VGA.

#!/bin/bash

# setting up new mode for my VGA
xrandr --newmode "1920x1080" 148.5 1920 2008 2052 2200 1080 1089 1095 1125 +hsync +vsync
xrandr --addmode VGA1 1920x1080

# default monitor is LVDS1
MONITOR=LVDS1

# functions to switch from LVDS1 to VGA and vice versa
function ActivateVGA {
    echo "Switching to VGA1"
    xrandr --output VGA1 --mode 1920x1080 --dpi 160 --output LVDS1 --off
    MONITOR=VGA1
}
function DeactivateVGA {
    echo "Switching to LVDS1"
    xrandr --output VGA1 --off --output LVDS1 --auto
    MONITOR=LVDS1
}

# functions to check if VGA is connected and in use
function VGAActive {
    [ $MONITOR = "VGA1" ]
}
function VGAConnected {
    ! xrandr | grep "^VGA1" | grep disconnected
}

# actual script
while true
do
    if ! VGAActive && VGAConnected
    then
        ActivateVGA
    fi

    if VGAActive && ! VGAConnected
    then
        DeactivateVGA
    fi

    sleep 1s
done

Étapes complètes :

  1. Mettez le script ci-dessus (homemadeMonitor.sh ) dans votre répertoire préféré

  2. Rendez le fichier .sh exécutable en tapant la commande suivante dans le terminal

    chmod +x homemadeMonitor.sh

  3. Exécutez le fichier .sh

    ./homemadeMonitor.sh


Réponse à la partie "[une] façon de dire qu'un moniteur a été branché" de la question :

La prise en charge varie encore un peu, mais avec les noyaux récents, il existe une prise en charge de la génération d'événements udev lorsqu'un hotplug d'affichage se produit. Avec le noyau 2.6.38 et le matériel ATI X1400, j'obtiens un événement la première fois que je connecte un écran VGA, mais aucun événement lors des déconnexions ou reconnexions ultérieures de l'écran. Le matériel Intel peut avoir un meilleur support. Le pilote propriétaire NVIDIA ne prend actuellement pas en charge KMS; Je n'ai pas essayé de rechercher des événements hotplug sur le matériel NVIDIA, mais je doute que cela fonctionne.

Si vous souhaitez expérimenter avec udev, vous pouvez essayer les étapes suivantes :

  • mettre à jour le noyau le plus récent
  • Assurez-vous que le paramètre du mode noyau (KMS) est activé. S'il est activé, il doit être signalé dans la sortie de votre noyau. Le mien dit [drm] radeon kernel modesetting enabled et [drm] initializing kernel modesetting
  • exécuter udevadm monitor --property et voyez si des événements sont signalés lorsque vous (dé)connectez des écrans

Si vous obtenez des événements udev sur display hotplug, vous pouvez déclencher un script avec une règle udev comme :

ACTION=="change", SUBSYSTEM=="drm", HOTPLUG=="1", RUN+="/path/to/hotplug.sh"

Remarque : Cela ne sera pas fonctionner si vous utilisez un GPU nVIDIA avec le pilote binaire propriétaire, car il n'utilise pas KMS. Vous ne serez pas obtenir tous les événements udev.


Linux
  1. Utilisation de l'outil SS pour le dépannage du réseau

  2. Nutty - Un outil de diagnostic réseau pour Ubuntu

  3. Blender - L'outil de création 3D parfait pour Linux

  4. outil de type teamviewer pour ssh?

  5. Outil de mesure de la qualité de l'entropie ?

Doppler - Un outil de surveillance à distance sans configuration

Afficher l'utilisation de la bande passante réseau à l'aide de l'outil Bandwhich

Afficher les feuilles de triche des commandes Linux avec l'outil Tealdeer

Afficher les informations réseau sous Linux à l'aide de What IP Tool

Une introduction à Cockpit, un outil d'administration basé sur un navigateur pour Linux

Skanlite - Un outil simple d'analyse d'images pour Linux