Answers:
我终于完成了一个完整的脚本设置,它将检测我的扩展坞状态并自动切换监视器。
我做的第一件事是摆脱Xorg.conf,因为它导致了更多的问题得以解决。由于我使用的是nvdia卡,所以我最终发现使用分散是最好的方法。由于它的标准命令无法实现我的Dualview设置,所以我对其进行了打折,但是后来发现可以创建一个用于分散的自定义元模式。
为了创建自定义元模式,我使用了存储在Xorg.conf中的值以及先前的测试,并以nv-control-dpy和xrandr为指导。此元模式和其他twinview值已添加到一个文件中,可以通过stdin传递该文件以进行分散。
由于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文件
创建将在停靠事件时运行的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
创建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
创建停靠脚本(更改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自述文件:配置Twinview,X配置选项
Autorandr
Disper PPA
nv-control-dpy
Ubuntu论坛
-Un / Dock脚本Thinkwiki
udevadm
$ cat /sys/devices/platform/dock.0/docked cat: /sys/devices/platform/dock.0/docked: No such file or directory