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

11

J'ai un Dell Precision M4300 avec un Dell Dock PRO1X exécutant Ubuntu Natty.

Lorsque mon ordinateur portable est ancré, l'écran LCD est éteint et j'utilise deux moniteurs externes, mais lorsque je déconnecte 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, il ne passe pas aux moniteurs externes.

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

Mon Xorg.conf

Cas
la source

Réponses:

10

Dock / UnDock Scripts

J'ai finalement mis en place une configuration de script complète qui détectera mon statut de station d'accueil et commutera les moniteurs automatiquement.

La première chose que j'ai faite a été de me débarrasser de mon Xorg.conf car cela a causé plus de problèmes qu'il a résolu. Depuis que j'utilise une carte nvdia, j'ai finalement découvert que l'utilisation de disper était la meilleure solution. Je l'avais déjà actualisé car ses commandes standard ne pouvaient pas réaliser ma configuration dualview, mais j'ai 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 pour disparaître via stdin .

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

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


Scripts

  1. Créer un 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 de 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

    Ensuite, mettez-le dans les applications de démarrage:

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

    À moins que vous ne redémarriez, 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 lors d'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éez le script de désancrage (changez votre_utilisateur pour qu'il corresponde à 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éez le script de dock (changez votre_utilisateur pour qu'il corresponde à 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 de dock, vous devez activer la journalisation du débogage udev:

udevadm control --log-priority=debug

Ouvrez ensuite syslog dans la visionneuse de fichiers journaux


Ressources

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

Cas
la source
Cas, il a été suggéré que je commente votre post pour poser une question sur le problème que j'ai avec ceci: askubuntu.com/questions/68737/auto-switching-with-dock
Toby Joiner
Avez-vous le script dell-dock.sh?
Cas
1
Oui, il semble que ce fichier n'existe pas: $ cat /sys/devices/platform/dock.0/docked cat: /sys/devices/platform/dock.0/docked: No such file or directory
Toby Joiner
3

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électionnez automatiquement une configuration d'affichage en fonction des appareils connectés

Voir également:

landroni
la source
Cette solution est indolore et fonctionne très bien.
épicier