วิธีสลับจอภาพโดยอัตโนมัติด้วยแท่นวางแล็ปท็อปของฉัน


11

ฉันมี Dell Precision M4300 ที่มี Dell Dock PRO1X ที่ใช้ Ubuntu Natty

เมื่อฉันเชื่อมต่อแล็ปท็อปจอแสดงผลแอลซีดีปิดอยู่และฉันใช้จอภาพภายนอกสองจอ แต่เมื่อฉันปลดแล็ปท็อปมันไม่ได้เปลี่ยนไปใช้หน้าจอแล็ปท็อป สิ่งเดียวกันเกิดขึ้นเมื่อฉันเชื่อมต่อแล็ปท็อปมันไม่ได้สลับไปยังจอภาพภายนอก

ถ้าฉันรีบูทแล็ปท็อปมันจะเลือกการตั้งค่าที่ถูกต้อง แต่มันจะไม่เปลี่ยนมอนิเตอร์โดยอัตโนมัติเมื่อใช้ Ubuntu

Xorg.confของฉัน

คำตอบ:


10

สคริปต์ Dock / UnDock

ในที่สุดฉันก็รวมการตั้งค่าสคริปต์ที่สมบูรณ์ซึ่งจะตรวจจับสถานะท่าเรือของฉันและสลับจอภาพโดยอัตโนมัติ

สิ่งแรกที่ฉันทำคือการกำจัด Xorg.conf ของฉันเพราะมันทำให้เกิดปัญหามากขึ้นว่ามันจะแก้ไข ตั้งแต่ฉันใช้การ์ด nvdia ในที่สุดฉันก็พบว่าการใช้disperเป็นวิธีที่ดีที่สุด ฉันเคยลดราคามาก่อนเนื่องจากคำสั่งมาตรฐานไม่สามารถใช้การตั้งค่าดูอัลของฉันได้ แต่ฉันพบว่าฉันสามารถสร้างเมตาโมดูที่กำหนดเองเพื่อใช้กับ disper ได้

ในการสร้าง metamode ที่กำหนดเองฉันใช้ค่าที่เก็บไว้ใน Xorg.conf พร้อมกับการทดสอบก่อนหน้าด้วยnv-control-dpyและxrandrเป็นแนวทาง MetaMode และ TwinView อื่น ๆ นี้ค่าถูกเพิ่มเข้าไปในแฟ้มที่สามารถส่งผ่านไป disper ผ่านstdin

เนื่องจากมีจอภาพขนาดแตกต่างกันกับ Twinview ฉันจำเป็นต้องใช้XCreateMouseVoidดังที่อธิบายไว้ในคำถามนี้

ด้านล่างนี้เป็นรายละเอียดที่สมบูรณ์ของสคริปต์และไฟล์ที่มีเนื้อหา


สคริป

  1. สร้างสคริปต์ XCreateMouseVoid:

    ชื่อสคริปต์: ~/.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:

    ชื่อไฟล์: ~/.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. สร้างสคริปต์เซสชันส่งออก dbus:

    ชื่อสคริปต์: ~/.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
    

    ตั้งค่าเป็นปฏิบัติการที่ผู้ใช้เท่านั้น: chmod 700 ~/.export_x_info

    จากนั้นวางไว้ในแอปพลิเคชันเริ่มต้น:

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

    นอกจากว่าคุณจะต้องรีสตาร์ทคุณต้องรัน ~ / .export_x_info เพื่อสร้างไฟล์. Xdbus

  4. สร้างกฎ udev ที่จะทำงานกับเหตุการณ์ dock:

    ชื่อสคริปต์: /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. สร้างสคริปต์ที่เกี่ยวข้องกับกฎ udev:

    ชื่อสคริปต์: /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. สร้างสคริปต์ปลดการเชื่อมต่อ (เปลี่ยนyour_userเพื่อให้ตรงกับชื่อผู้ใช้ของคุณ):

    ชื่อสคริปต์: /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. สร้างสคริปต์ท่าเรือ (เปลี่ยนyour_userเพื่อให้ตรงกับชื่อผู้ใช้ของคุณ):

    ชื่อสคริปต์: /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


ตรวจแก้จุดบกพร่อง

ในการดีบักสคริปต์ dock คุณต้องเปิดใช้งานการบันทึกการแก้ปัญหา udev:

udevadm control --log-priority=debug

จากนั้นเปิดsyslogในLog File Viewer


ทรัพยากร

nVidia Readme: กำหนดค่า Twinview , X ตัวเลือกการ
กำหนดค่า Autorandr
Disper PPA ฟอรั่ม Ubuntu
nv-control-dpy
- Un / Dock Scripts
Thinkwiki
udevadm


Cas มันก็บอกว่าผมแสดงความคิดเห็นในโพสต์ของคุณจะถามเกี่ยวกับปัญหาที่ฉันมีกับนี้: askubuntu.com/questions/68737/auto-switching-with-dock
Toby ช่างไม้

คุณมีสคริปต์ dell-dock.sh หรือไม่
Cas

1
ใช่ดูเหมือนว่าไฟล์นั้นไม่มีอยู่: $ cat /sys/devices/platform/dock.0/docked cat: /sys/devices/platform/dock.0/docked: No such file or directory
Toby Joiner

3

คุณสามารถใช้autorandr

ตรวจสอบฮาร์ดแวร์การเชื่อมต่อจอแสดงผลโดยอัตโนมัติและโหลดการตั้งค่า X11 ที่เหมาะสมโดยใช้ xrandr หรือ disper

เลือกการกำหนดค่าการแสดงผลโดยอัตโนมัติตามอุปกรณ์ที่เชื่อมต่อ

ดูสิ่งนี้ด้วย:


วิธีนี้ไม่เจ็บปวดและใช้งานได้ดี
ของชำ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.