Cara mengganti monitor secara otomatis dengan laptop dock saya

11

Saya memiliki Dell Precision M4300 dengan Dell Dock PRO1X yang menjalankan Ubuntu Natty.

Ketika saya memiliki laptop terpasang layar lcd mati dan saya menggunakan dua monitor eksternal namun ketika saya melepas laptop itu tidak beralih ke layar laptop. Hal yang sama terjadi ketika saya memasang laptop, itu tidak beralih ke monitor eksternal.

Jika saya me-reboot laptop itu akan memilih setup yang benar tetapi tidak akan secara otomatis mengubah monitor dengan Ubuntu berjalan

Xorg.conf saya

Cas
sumber

Jawaban:

10

Script Dok / Buka Dok

Saya akhirnya telah mengumpulkan pengaturan skrip lengkap yang akan mendeteksi status dok saya dan mengganti monitor secara otomatis.

Hal pertama yang saya lakukan adalah menyingkirkan Xorg.conf saya karena menyebabkan lebih banyak masalah yang diselesaikan. Karena saya menggunakan kartu nvdia saya akhirnya menemukan bahwa menggunakan Disper adalah cara terbaik untuk pergi. Saya telah mendiskonnya sebelumnya karena perintah standarnya tidak dapat mencapai pengaturan dualview saya, tetapi kemudian saya menemukan saya dapat membuat metamode khusus untuk digunakan dengan disper.

Untuk membuat metamode khusus saya menggunakan nilai yang disimpan di Xorg.conf bersama dengan pengujian sebelumnya dengan nv-control-dpy dan xrandr sebagai panduan. Metamode ini dan nilai-nilai twinview lainnya ditambahkan ke file yang dapat diteruskan ke disper melalui stdin .

Karena memiliki monitor berukuran berbeda dengan Twinview, saya perlu menggunakan XCreateMouseVoid , seperti yang dijelaskan dalam pertanyaan ini .

Di bawah ini adalah uraian lengkap skrip dan file dengan isinya.


Skrip

  1. Buat skrip XCreateMouseVoid:

    Nama Skrip: ~/.mousevoid

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

    chmod +x ~/.mousevoid

  2. Buat file pengaturan Disper:

    Nama 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. Buat skrip sesi ekspor dbus:

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

    Setel hanya untuk pengguna yang dapat dieksekusi: chmod 700 ~/.export_x_info

    Kemudian letakkan di Aplikasi Startup:

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

    Kecuali Anda me-restart Anda perlu menjalankan ~ / .export_x_info untuk membuat file .Xdbus

  4. Buat aturan udev yang akan dijalankan pada saat acara dok:

    Nama Skrip: /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. Buat skrip yang dikaitkan dengan aturan udev:

    Nama Skrip: /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. Buat skrip undock (ubah your_user agar sesuai dengan nama pengguna Anda):

    Nama Skrip: /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. Buat skrip dock (ubah your_user agar sesuai dengan nama pengguna Anda):

    Nama Skrip: /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


Debug

Untuk men-debug skrip dock Anda harus mengaktifkan udev debug logging:

udevadm control --log-priority=debug

Kemudian buka syslog di Log File Viewer


Sumber daya

nVidia Readme: Config Twinview , X Opsi Config
Autorandr
Disper PPA
nv-control-dpy
Forum Ubuntu - Un / Dok Skrip
Thinkwiki
udevadm

Cas
sumber
Cas, disarankan agar saya mengomentari kiriman Anda untuk bertanya tentang masalah yang saya alami dengan ini: askubuntu.com/questions/68737/auto-switching-with-dock
Toby Joiner
Apakah Anda memiliki skrip dell-dock.sh?
Cas
1
Ya, tampaknya file itu tidak ada: $ cat /sys/devices/platform/dock.0/docked cat: /sys/devices/platform/dock.0/docked: No such file or directory
Toby Joiner
3

Anda dapat menggunakan autorandr .

Deteksi otomatis perangkat keras layar sambungkan dan muat pengaturan X11 yang sesuai menggunakan xrandr atau disper

Secara otomatis memilih konfigurasi tampilan berdasarkan perangkat yang terhubung

Lihat juga:

Landroni
sumber
Solusi ini tidak menyakitkan dan berfungsi dengan baik.
groceryheist