it-swarm.com.de

So wechseln Sie automatisch die Monitore mit meiner Laptop-Dockingstation

Ich habe ein Dell Precision M4300 mit einem Dell Dock PRO1X, auf dem Ubuntu Natty ausgeführt wird.

Wenn ich den Laptop angedockt habe, ist das LCD-Display ausgeschaltet und ich verwende zwei externe Monitore. Wenn ich den Laptop abdocke, wird jedoch nicht auf den Laptopbildschirm umgeschaltet. Das gleiche passiert, wenn ich den Laptop andocke, es wird nicht auf die externen Monitore umgeschaltet.

Wenn ich den Laptop neu starte, wählt er das richtige Setup, wechselt jedoch nicht automatisch die Monitore, wenn Ubuntu ausgeführt wird.

Mein Xorg.conf

10
Cas

Dock/UnDock-Skripte

Ich habe endlich ein komplettes Skript-Setup zusammengestellt, das meinen Dock-Status erkennt und die Monitore automatisch schaltet.

Das erste, was ich tat, war, meine Xorg.conf loszuwerden, da sie mehr Probleme verursachte, die sie löste. Da ich eine nvdia-Karte benutze, stellte ich schließlich fest, dass die Verwendung von disper der beste Weg war. Ich hatte es zuvor abgezinst, da seine Standardbefehle mein Dualview-Setup nicht erreichen konnten, aber dann stellte ich fest, dass ich einen benutzerdefinierten Metamode für die Verwendung mit Disper erstellen konnte.

Um den benutzerdefinierten Metamode zu erstellen, habe ich die in Xorg.conf gespeicherten Werte zusammen mit vorherigen Tests mit nv-control-dpy und verwendet ) xrandr als Richtlinie. Dieser Metamode und andere Twinview-Werte wurden zu einer Datei hinzugefügt, die über stdin an disperger übergeben werden kann.

Aufgrund der unterschiedlichen Monitorgröße mit Twinview muss ich XCreateMouseVoid verwenden, wie in Frage beschrieben.

Nachfolgend finden Sie eine vollständige Aufschlüsselung der Skripte und Dateien mit ihrem Inhalt.


Skripte

  1. XCreateMouseVoid-Skript erstellen:

    Skriptname: ~/.mousevoid

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

    chmod +x ~/.mousevoid

  2. Disper-Einstellungsdatei erstellen:

    Dateiname: ~/.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. Erstellen Sie das Export-Dbus-Sitzungsskript:

    Skriptname: ~/.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
    

    Auf nur vom Benutzer ausführbare Dateien setzen: chmod 700 ~/.export_x_info

    Dann legen Sie es in Startup Applications:

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

    Sofern Sie nicht neu starten, müssen Sie ~/.export_x_info ausführen, um die . Xdbus -Datei zu erstellen

  4. Erstellen Sie die udev-Regel, die bei einem Dock-Ereignis ausgeführt wird:

    Skriptname: /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. Erstellen Sie das Skript, das der udev-Regel zugeordnet ist:

    Skriptname: /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. Erstellen Sie das Undock-Skript (Ändern ihr_Benutzer passend zu Ihrem Benutzernamen):

    Skriptname: /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. Erstellen Sie das Dock-Skript (Ändern ihr_Benutzer passend zu Ihrem Benutzernamen):

    Skriptname: /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


Debuggen

Um die Dock-Skripte zu debuggen, müssen Sie die udev-Debug-Protokollierung aktivieren:

udevadm control --log-priority=debug

Öffnen Sie dann syslog in Log File Viewer


Ressourcen

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

10
Cas

Sie können autorandr verwenden.

Erkennen Sie die Verbindungs-Display-Hardware automatisch und laden Sie das entsprechende X11-Setup mit xrandr oder disper

Automatische Auswahl einer Anzeigekonfiguration basierend auf den angeschlossenen Geräten

Siehe auch:

2
landroni