web-dev-qa-db-fra.com

Comment changer automatiquement de moniteur avec la station d'accueil pour ordinateur portable

J'ai un Dell Precision M4300 avec un Dell Dock PRO1X sous Ubuntu Natty.

Lorsque l'ordinateur portable est amarré, l'écran LCD est éteint et j'utilise deux écrans externes. Toutefois, lorsque je désancre l'ordinateur portable, il ne passe pas à l'écran de l'ordinateur portable. La même chose se produit lorsque je connecte l'ordinateur portable, celui-ci ne bascule pas vers les moniteurs externes.

Si je redémarre l'ordinateur portable, il choisira la configuration correcte mais ne changera pas automatiquement les moniteurs lorsque Ubuntu est en cours d'exécution.

Mon Xorg.conf

10
Cas

Scripts Dock/UnDock

J'ai enfin mis en place une configuration de script complète qui détecte l'état de mon dock et permute les moniteurs automatiquement.

La première chose que j'ai faite a été de me débarrasser de mon Xorg.conf car il causait plus de problèmes qu'il ne résolvait pas. Depuis que j’utilise une carte nvdia, j’ai finalement trouvé que l’utilisation de disper était la meilleure façon de faire. Je l'avais escompté auparavant car ses commandes standard ne pouvaient pas réaliser ma configuration dualview, mais j'ai alors découvert que je pouvais créer un métamode personnalisé à utiliser avec disper.

Pour créer le métamode personnalisé, j’ai utilisé les valeurs stockées dans Xorg.conf avec les tests précédents avec nv-control-dpy et xrandr comme guide. Ce métamode et d'autres valeurs twinview ont été ajoutés à un fichier qui peut être transmis au disper via stdin .

En raison de la présence de moniteurs de tailles différentes avec Twinview, je dois utiliser XCreateMouseVoid , comme décrit dans ce question .

Vous trouverez ci-dessous une liste complète des scripts et des fichiers avec leur contenu.


Les scripts

  1. Créez le script XCreateMouseVoid:

    Nom du script: ~/.mousevoid

    #!/bin/bash
    echo "Mouse Void"
    /opt/XCreateMouseVoid/XCreateMouseVoid 0 1112 1280 88 &
    /opt/XCreateMouseVoid/XCreateMouseVoid 0 0 1280 88 &
    

    chmod +x ~/.mousevoid

  2. Créer un fichier de paramètres Disper:

    Nom du fichier: ~/.disperDocked

    backend: nvidia
    associated displays: CRT-0, DFP-0, DFP-1
    metamode: CRT-0: 1280x1024_60 @1280x1024 +0+88, DFP-1: 1920x1200 @1920x1200 +1280+0
    scaling: default, default, stretched
    xinerama info order: DFP-1, CRT-0, DFP-0
    
  3. Créez le script de session d'exportation dbus:

    Nom du script: ~/.export_x_info

    #!/bin/bash
    # Export the dbus session address on startup so it can be used by any other environment
    sleep 5
    touch $HOME/.Xdbus
    chmod 600 $HOME/.Xdbus
    env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.Xdbus
    echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.Xdbus
    # Export XAUTHORITY value on startup so it can be used by cron
    env | grep XAUTHORITY >> $HOME/.Xdbus
    echo 'export XAUTHORITY' >> $HOME/.Xdbus
    

    Défini sur l'exécutable utilisateur uniquement: chmod 700 ~/.export_x_info

    Puis mettez-le dans les applications de démarrage:

    Name: X Environment Variables
    Command: /home/your_user/.export_x_info
    

    Sauf si vous redémarrez, vous devez exécuter ~/.export_x_info pour créer le fichier . Xdbus .

  4. Créez la règle udev qui s'exécutera avec un événement de dock:

    Nom du script: /etc/udev/rules.d/81-Dell-dock.rules

    KERNEL=="dock.0", ACTION=="change", RUN+="/usr/local/sbin/Dell-dock"

    chmod +x /etc/udev/rules.d/81-Dell-dock.rules

  5. Créez le script associé à la règle udev:

    Nom du script: /usr/local/sbin/Dell-dock

    #!/bin/sh
    # wait for the dock state to change
    sleep 0.5
    DOCKED=$(cat /sys/devices/platform/dock.0/docked)
    case "$DOCKED" in
       "0")
           echo "Run UnDocking Script..."
            /usr/local/sbin/undock
            ;;
        "1") 
            echo "Run Docking Script..."
            /usr/local/sbin/dock
            ;;
    esac
    exit 0
    

    chmod +x /usr/local/sbin/Dell-dock

  6. Créer le script de désancrage (modifier votre_utilisateur pour correspondre à votre nom d'utilisateur):

    Nom du script: /usr/local/sbin/undock

    #!/bin/bash
    USER=your_user
    export HOME=/home/$USER
    source $HOME/.Xdbus
    export DISPLAY=:0
    echo "UnDocking Script"
    echo "Switch primary monitor"
    Sudo -u $USER disper -s
    echo "Killall XCreateMouseVoid"
    pkill XCreate
    echo "Restart conky"
    pkill conky
    Sudo -u $USER conky &
    

    chmod +x /usr/local/sbin/undock

  7. Créer le script de dock (changer votre_utilisateur pour correspondre à votre nom d'utilisateur):

    Nom du script: /usr/local/sbin/dock

    #!/bin/bash
    USER=your_user
    export HOME=/home/$USER
    source $HOME/.Xdbus
    export DISPLAY=:0
    echo "Docking Script"
    echo "Switch to Dualview"
    Sudo -u $USER disper -i < $HOME/.disperDocked
    echo "Start XCreateMouseVoid"
    pkill XCreate
    Sudo -u $USER $HOME/.mousevoid
    echo "Restart conky"
    pkill conky
    Sudo -u $USER conky &
    

    chmod +x /usr/local/sbin/dock


Déboguer

Pour déboguer les scripts du dock, vous devez activer la journalisation de débogage udev:

udevadm control --log-priority=debug

Puis ouvrez syslog dans la visionneuse de fichiers journaux


Ressources

nVidia Readme: Config Twinview , Options de configuration X
Autorandr
Disper PPA
nv-control-dpy
Forum Ubuntu - Scripts Un/Dock
Thinkwiki
devadm

10
Cas

Vous pouvez utiliser autorandr .

Détectez automatiquement le matériel d'affichage de connexion et chargez la configuration X11 appropriée à l'aide de xrandr ou de disper

Sélection automatique d'une configuration d'affichage basée sur les périphériques connectés

Voir également:

2
landroni