如何使用笔记本电脑底座自动切换显示器
我有一台Dell Precision M4300,戴着Dell Dock PRO1X,运行Ubuntu Natty。
当笔记本电脑停靠时,液晶显示器关闭,我使用两个外接显示器,但当我取消对接笔记本电脑时,它不会切换到笔记本电脑的屏幕。 当我停靠笔记本电脑时也会发生同样的情况,它不会切换到外接显示器。
如果我重新启动笔记本电脑,它将选择正确的设置,但它不会自动更改运行Ubuntu的显示器。
我的Xorg.conf
Dock / UnDock脚本
我终于整理了一个完整的脚本设置,它将检测我的停靠状态并自动切换显示器。
我做的第一件事是摆脱我的Xorg.conf,因为它导致了更多的问题,它解决了。 由于我使用的是nvdia卡,我最终发现使用disper是最好的方法。 我之前打了折扣,因为它的标准命令无法实现我的双视图设置,但后来我发现我可以创建一个与disper一起使用的自定义元模式。
为了创建自定义元模式,我使用了存储在Xorg.conf中的值以及之前使用nv-control-dpy和xrandr作为指导的测试。 这个元模式和其他twinview值被添加到一个文件中,该文件可以通过stdin传递给disper。
由于Twinview具有不同大小的显示器,我需要使用XCreateMouseVoid ,如本问题所述 。
下面是脚本和文件及其内容的完整细分。
脚本
-
创建XCreateMouseVoid脚本:
脚本名称:
~/.mousevoid
#!/bin/bash echo "Mouse Void" /opt/XCreateMouseVoid/XCreateMouseVoid 0 1112 1280 88 & /opt/XCreateMouseVoid/XCreateMouseVoid 0 0 1280 88 &
chmod +x ~/.mousevoid
-
创建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
-
创建导出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文件
-
创建将在dock事件上运行的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
-
创建与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
-
创建取消停靠脚本(更改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
-
创建停靠脚本(更改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
资源
nVidia自述文件: 配置Twinview , X配置选项
Autorandr
分散PPA
NV-控制DPY
Ubuntu论坛 - Un / Dock脚本
Thinkwiki
udevadm
您可以使用autorandr 。
自动检测连接显示硬件并使用xrandr或disper加载适当的X11设置
根据连接的设备自动选择显示配置
也可以看看:
- 使用Autorandr解决Linux中的优点问题
- 插入外部显示器时自动应用RandR配置的工具
- 如何轻松切换到外接显示器