我有一台 Dell Precision M4300,带有运行 Ubuntu Natty 的 Dell Dock PRO1X。
当我将笔记本电脑对接时,液晶显示屏关闭,我使用两个外接显示器,但是当我将笔记本电脑从对接处移除时,它不会切换到笔记本电脑屏幕。当我将笔记本电脑对接时也会发生同样的情况,它不会切换到外接显示器。
如果我重新启动笔记本电脑,它将选择正确的设置,但不会在运行 Ubuntu 时自动更改显示器。
我的Xorg配置文件
答案1
停靠/取消停靠脚本
我终于整理出了一个完整的脚本设置,它可以检测我的基座状态并自动切换显示器。
我做的第一件事就是删除我的 Xorg.conf,因为它引起的问题比它解决的问题还多。由于我使用的是 nvdia 卡,我最终发现使用分散是最好的选择。我之前曾对它不屑一顾,因为它的标准命令无法实现我的双屏显示设置,但后来我发现我可以创建一个自定义元模式来与 disper 一起使用。
为了创建自定义元模式,我使用了存储在 Xorg.conf 中的值以及之前的测试nv-控制-dpy和兰德作为指南。此元模式和其他 twinview 值已添加到可以通过 disper 传递的文件中标准输入。
由于 Twinview 的显示器尺寸不同,我需要使用新建MouseVoid,正如本文所述问题。
以下是脚本和文件及其内容的完整分类。
脚本
创建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 来创建.Xd总线文件
创建将在 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
创建取消停靠脚本(更改你的用户以匹配您的用户名):
脚本名称:
/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
创建 dock 脚本(更改你的用户以匹配您的用户名):
脚本名称:
/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 自述文件:配置 Twinview,X 配置选项
自动随机数
分散PPA
nv-控制-dpy
Ubuntu 论坛 - Un/Dock 脚本
思考维基
乌德瓦德