Come cambiare automaticamente i monitor con il mio laptop dock


11

Ho un Dell Precision M4300 con un Dell Dock PRO1X con Ubuntu Natty.

Quando il laptop è agganciato, il display LCD è spento e utilizzo due monitor esterni, tuttavia quando scollego il laptop non passa allo schermo del laptop. Lo stesso succede quando aggancio il laptop, non passa ai monitor esterni.

Se riavvio il laptop sceglierà la configurazione corretta ma non cambierà automaticamente i monitor con Ubuntu in esecuzione.

My Xorg.conf

Risposte:


10

Script Dock / UnDock

Ho finalmente messo insieme una configurazione di script completa che rileverà lo stato del mio dock e cambierà automaticamente i monitor.

La prima cosa che ho fatto è stato di sbarazzarmi del mio Xorg.conf in quanto ha causato più problemi che ha risolto. Da quando sto usando una scheda nvdia ho scoperto che usare la disper era il modo migliore di procedere. Lo avevo già scontato in quanto i suoi comandi standard non riuscivano a ottenere la mia configurazione dualview ma poi ho scoperto che potevo creare un metamode personalizzato da usare con disper.

Per creare il metamode personalizzato ho usato i valori memorizzati in Xorg.conf insieme ai test precedenti con nv-control-dpy e xrandr come guida. Questo metamode e altri valori twinview sono stati aggiunti a un file che può essere passato a disperdere tramite stdin .

A causa della presenza di monitor di dimensioni diverse con Twinview, è necessario utilizzare XCreateMouseVoid , come descritto in questa domanda .

Di seguito è riportata una suddivisione completa degli script e dei file con il loro contenuto.


Script

  1. Crea lo script XCreateMouseVoid:

    Nome dello 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. Crea file impostazioni Disper:

    Nome del file: ~/.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. Creare lo script della sessione dbus di esportazione:

    Nome dello 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
    

    Imposta solo come eseguibile dall'utente: chmod 700 ~/.export_x_info

    Quindi inseriscilo in Applicazioni di avvio:

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

    A meno che non si riavvii, è necessario eseguire ~ / .export_x_info per creare il file .Xdbus

  4. Crea la regola udev che verrà eseguita con un evento dock:

    Nome dello 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. Creare lo script associato alla regola udev:

    Nome dello 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. Crea lo script di sgancio (cambia il tuo utente in modo che corrisponda al tuo nome utente):

    Nome dello 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. Creare lo script dock (cambio vostro_utente per abbinare il proprio nome utente):

    Nome dello 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


mettere a punto

Per eseguire il debug degli script dock è necessario abilitare la registrazione debug udev:

udevadm control --log-priority=debug

Quindi aprire syslog nel Visualizzatore file di registro


risorse

Leggimi nVidia: Config Twinview , X Config Options
Autorandr
Disper PPA
nv-control-dpy
Forum di Ubuntu - Script Un / Dock
Thinkwiki
udevadm


Cas, mi è stato suggerito di commentare il tuo post per chiedere del problema che sto avendo con questo: askubuntu.com/questions/68737/auto-switching-with-dock
Toby Joiner

Hai lo script dell-dock.sh?
Cas

1
Sì, sembra che quel file non esista: $ cat /sys/devices/platform/dock.0/docked cat: /sys/devices/platform/dock.0/docked: No such file or directory
Toby Joiner,

3

Puoi usare autorandr .

Rileva automaticamente l'hardware del display di connessione e carica la configurazione X11 appropriata usando xrandr o disper

Seleziona automaticamente una configurazione di visualizzazione in base ai dispositivi collegati

Guarda anche:


Questa soluzione è indolore e funziona alla grande.
drogheria
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.