Cómo cambiar monitores automáticamente con la base de mi computadora portátil

11

Tengo un Dell Precision M4300 con un Dell Dock PRO1X que ejecuta Ubuntu Natty.

Cuando tengo el portátil conectado, la pantalla LCD está apagada y uso dos monitores externos, sin embargo, cuando desacople el portátil, no cambiará a la pantalla del portátil. Lo mismo sucede cuando conecto la computadora portátil, no cambia a los monitores externos.

Si reinicio la computadora portátil, elegirá la configuración correcta, pero no cambiará automáticamente los monitores con Ubuntu ejecutándose.

My Xorg.conf

Cas
fuente

Respuestas:

10

Dock / UnDock Scripts

Finalmente reuní una configuración completa de script que detectará el estado de mi base y cambiará los monitores automáticamente.

Lo primero que hice fue deshacerme de mi Xorg.conf ya que causó más problemas que resolvió. Como estoy usando una tarjeta nvdia, eventualmente descubrí que usar disper era la mejor manera de hacerlo. Lo había descontado antes, ya que sus comandos estándar no podían lograr mi configuración de doble vista, pero luego descubrí que podía crear un metamodo personalizado para usar con Disper.

Para crear el metamodo personalizado, utilicé los valores almacenados en Xorg.conf junto con pruebas anteriores con nv-control-dpy y xrandr como guía. Este metamodo y otros valores de vista gemela se agregaron a un archivo que se puede pasar a Disper mediante stdin .

Debido a que tengo monitores de diferentes tamaños con Twinview, necesito usar XCreateMouseVoid , como se describe en esta pregunta .

A continuación se muestra un desglose completo de los scripts y archivos con sus contenidos.


Guiones

  1. Crear script XCreateMouseVoid:

    Nombre del guión: ~/.mousevoid

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

    chmod +x ~/.mousevoid

  2. Crear archivo de configuración de Disper:

    Nombre del archivo: ~/.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. Cree el script de sesión dbus de exportación:

    Nombre del guión: ~/.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
    

    Establecer solo para el usuario ejecutable: chmod 700 ~/.export_x_info

    Luego póngalo en Aplicaciones de inicio:

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

    A menos que reinicie, debe ejecutar ~ / .export_x_info para crear el archivo .Xdbus

  4. Cree la regla de udev que se ejecutará en un evento de acoplamiento:

    Nombre del guión: /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. Cree el script que está asociado con la regla udev:

    Nombre del guión: /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. Cree el script de desacoplamiento (cambie your_user para que coincida con su nombre de usuario):

    Nombre del guión: /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. Cree el script de acoplamiento (cambie su_usuario para que coincida con su nombre de usuario):

    Nombre del guión: /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


Depurar

Para depurar los scripts del dock, debe habilitar el registro de depuración de udev:

udevadm control --log-priority=debug

Luego abra syslog en el Visor de archivos de registro


Recursos

Léame de nVidia: Config Twinview , X Opciones de configuración
Autorandr
Disper PPA
nv-control-dpy
Ubuntu Forum - Un / Dock Scripts
Thinkwiki
udevadm

Cas
fuente
Cas, se sugirió que comentara tu publicación para preguntar sobre el problema que tengo con esto: askubuntu.com/questions/68737/auto-switching-with-dock
Toby Joiner
¿Tiene el script dell-dock.sh?
Cas
1
Sí, parece que ese archivo no existe: $ cat /sys/devices/platform/dock.0/docked cat: /sys/devices/platform/dock.0/docked: No such file or directory
Toby Joiner
3

Puedes usar autorandr .

Detecta automáticamente el hardware de la pantalla de conexión y carga la configuración X11 apropiada usando xrandr o disper

Seleccione automáticamente una configuración de pantalla basada en dispositivos conectados

Ver también:

Landroni
fuente
Esta solución es indolora y funciona muy bien.
supermercado el