So schalte ich Monitore automatisch mit meinem Laptop-Dock um

11

Ich habe einen Dell Precision M4300 mit einem Dell Dock PRO1X unter Ubuntu Natty.

Wenn ich den Laptop angedockt habe, ist das LCD-Display ausgeschaltet und ich verwende zwei externe Monitore. Wenn ich den Laptop abdocke, wechselt er jedoch nicht zum Laptop-Bildschirm. Das gleiche passiert, wenn ich den Laptop andocke, er wechselt nicht zu den externen Monitoren.

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

Meine Xorg.conf

Cas
quelle

Antworten:

10

Dock / UnDock-Skripte

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

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

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

Aufgrund der unterschiedlichen Größe von Monitoren mit Twinview muss ich XCreateMouseVoid verwenden , wie in dieser Frage beschrieben .

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


Skripte

  1. Erstellen Sie ein XCreateMouseVoid-Skript:

    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
    

    Nur auf vom Benutzer ausführbare Datei festlegen: 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, mit der 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 Sie Ihren_Benutzer entsprechend 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 Sie Ihren_Benutzer entsprechend 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 das Syslog im Log File Viewer


Ressourcen

nVidia Readme: Config Twinview , X
Konfigurationsoptionen Autorandr
Disper PPA
nv-control-dpy
Ubuntu-Forum - Un / Dock-Skripte
Thinkwiki
udevadm

Cas
quelle
Cas, es wurde vorgeschlagen, dass ich Ihren Beitrag kommentiere, um nach dem Problem zu fragen, das ich damit habe: askubuntu.com/questions/68737/auto-switching-with-dock
Toby Joiner
Haben Sie das Skript dell-dock.sh?
Cas
1
Ja, es scheint, dass diese Datei nicht existiert: $ cat /sys/devices/platform/dock.0/docked cat: /sys/devices/platform/dock.0/docked: No such file or directory
Toby Joiner
3

Sie können autorandr verwenden .

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

Wählen Sie automatisch eine Anzeigekonfiguration basierend auf den angeschlossenen Geräten aus

Siehe auch:

Landroni
quelle
Diese Lösung ist schmerzfrei und funktioniert hervorragend.
Lebensmittelhändler