Como alternar automaticamente monitores com meu dock para laptop

10

Eu tenho um Dell Precision M4300 com um Dell Dock PRO1X executando o Ubuntu Natty.

Quando tenho o laptop acoplado, a tela LCD está desligada e uso dois monitores externos; no entanto, quando desancoco o laptop, ele não muda para a tela do laptop. O mesmo acontece quando eu conecto o laptop, ele não muda para os monitores externos.

Se eu reiniciar o laptop, ele escolherá a configuração correta, mas não mudará automaticamente os monitores com o Ubuntu em execução.

Meu Xorg.conf

    
por Cas 14.05.2011 / 16:43

2 respostas

10

Scripts Dock / UnDock

Eu finalmente reuni uma configuração de script completa que detectará o status da minha estação e alternará os monitores automaticamente.

A primeira coisa que fiz foi me livrar do meu Xorg.conf, pois causou mais problemas que ele resolveu. Como estou usando um cartão nvdia, acabei descobrindo que usar disper foi o melhor caminho a percorrer. Eu tinha descontado antes, já que seus comandos padrão não conseguiam atingir minha configuração de dualview, mas depois descobri que poderia criar um metamodo personalizado para usar com o disperador.

Para criar o metamodo personalizado eu usei os valores armazenados no Xorg.conf junto com testes anteriores com nv-control-dpy e xrandr como um guia. Este metamodo e outros valores de twinview foram adicionados a um arquivo que pode ser passado para dispersar através de stdin .

Devido a ter monitores de tamanhos diferentes com o Twinview, eu preciso usar XCreateMouseVoid , conforme descrito neste question .

Abaixo está um detalhamento completo dos scripts e arquivos com seus conteúdos.

Scripts

  1. Criar script XCreateMouseVoid:

    Nome do 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. Crie o arquivo de configurações do Disper:

    Nome do arquivo: ~/.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. Crie o script de sessão de exportação dbus:

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

    Defina apenas como usuário executável: chmod 700 ~/.export_x_info

    Em seguida, coloque-o em aplicativos de inicialização:

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

    A menos que você reinicie, você precisa rodar ~ / .export_x_info para criar o arquivo .Xdbus

  4. Crie a regra do udev que será executada em um evento de dock:

    Nome do 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. Crie o script associado à regra do udev:

    Nome do 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. Crie o script de remoção (mude your_user para corresponder ao seu nome de usuário):

    Nome do 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. Crie o script dock (mude your_user para corresponder ao seu nome de usuário):

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

Depurar

Para depurar os scripts do dock, você deve habilitar o log de depuração do udev:

udevadm control --log-priority=debug

Em seguida, abra syslog no Visualizador de arquivos de log

Recursos

Leia-me da nVidia: Config Twinview , X Opções de configuração
Autorandr
PPA do Disper
nv-control-dpy
Ubuntu Forum - Scripts Un / Dock
Thinkwiki
udevadm

    
por Cas 14.06.2011 / 00:40
2

Você pode usar o autorar .

  

Detectar automaticamente o hardware de exibição de conexão e carregar a configuração apropriada do X11 usando xrandr ou disper

     

Selecione automaticamente uma configuração de exibição com base em dispositivos conectados

Veja também:

por landroni 01.04.2014 / 06:21