如何使用笔记本电脑底座自动切换显示器


11

我有一台带有运行Ubuntu Natty的Dell Dock PRO1X的Dell Precision M4300。

当我将笔记本电脑对接时,液晶显示器将关闭,并且使用两个外接显示器,但是当我断开笔记本电脑的对接时,它不会切换到笔记本电脑的屏幕。当我停靠笔记本电脑时,不会切换到外接显示器,也会发生同样的情况。

如果我重新启动笔记本电脑,它将选择正确的设置,但是在Ubuntu运行时它不会自动更改显示器。

我的Xorg.conf

Answers:


10

停靠/取消停靠脚本

我终于完成了一个完整的脚本设置,它将检测我的扩展坞状态并自动切换监视器。

我做的第一件事是摆脱Xorg.conf,因为它导致了更多的问题得以解决。由于我使用的是nvdia卡,所以我最终发现使用分散是最好的方法。由于它的标准命令无法实现我的Dualview设置,所以我对其进行了打折,但是后来发现可以创建一个用于分散的自定义元模式。

为了创建自定义元模式,我使用了存储在Xorg.conf中的值以及先前的测试,并以nv-control-dpyxrandr为指导。此元模式和其他twinview值已添加到一个文件中,可以通过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规则:

    脚本名称: /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. 创建undock脚本(更改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

然后在“ 日志文件查看器”中打开系统日志


资源资源

nVidia自述文件:配置TwinviewX配置选项
Autorandr
Disper PPA
nv-control-dpy
Ubuntu论坛
-Un / Dock脚本Thinkwiki
udevadm


Cas,有人建议我在您的帖子中发表评论,以询问有关此问题的问题: askubuntu.com/questions/68737/auto-switching-with-dock
Toby Joiner,

您是否有脚本dell-dock.sh?
2012年

1
是的,似乎该文件不存在: $ cat /sys/devices/platform/dock.0/docked cat: /sys/devices/platform/dock.0/docked: No such file or directory
Toby Joiner 2012年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.