因此,我正在尝试配置 udev 规则以自动配置我的 DE/WM(无论我目前正在使用哪个(现在是 i3,可能需要坚持使用一段时间...)以在对接时配置我的外部显示器(并在我解除对接时切换回内部显示器)。
我找到了这个脚本和 udev 规则https://gist.github.com/seanf/e3be5bf745395d50e975
我修改了脚本来匹配我的配置以及我希望监视器发生的情况......
#! /bin/sh -e
# Save this file as /etc/sbin/thinkpad-dock.sh
# NB: you will need to modify the username and tweak the xrandr
# commands to suit your setup.
# wait for the dock state to change
sleep 1
username=jgould
#export IFS=$"\n"
14 if [[ "$ACTION" == "add" ]] ; then
DOCKED=1
logger -t DOCKING "Detected condition: docked"
17 elif [[ "$ACTION" == "remove" ]] ; then
DOCKED=0
logger -t DOCKING "Detected condition: un-docked"
#else
# logger -t DOCKING "Detected condition: unknown"
# echo Please set env var \$ACTION to 'add' or 'remove'
# exit 1
fi
case "$DOCKED" in
"0")
#undocked event
switch_to_local :0 ;;
"1")
#docked event
switch_to_external :0 ;;
esac
# invoke from XSetup with NO_KDM_REBOOT otherwise you'll end up in a KDM reboot loop
NO_KDM_REBOOT=0
for p in $*; do
case "$p" in
"NO_KDM_REBOOT") NO_KDM_REBOOT=1 ;;
"SWITCH_TO_LOCAL") DOCKED=0 ;;
esac
done
44 function switch_to_local {
export DISPLAY=:0
#export XAUTHORITY=$(find /var/run/kdm -name "A${DISPLAY}-*")
#export XAUTHORITY=/var/run/lightdm/sflaniga/xauthority
logger -t DOCKING "Switching off HDMI2/3 and switching on LVDS1"
su $username -c ' /usr/bin/xrandr --output HDMI-1 --off --output HDMI-2 --off --output HDMI-3 --off --output VGA-1 --off --output LVDS-1 --auto '
}
function switch_to_external {
export DISPLAY=:0
#export XAUTHORITY=/var/run/lightdm/sflaniga/xauthority
#export XAUTHORITY=$(find /var/run/kdm -name "A${DISPLAY}-*")
# The Display port on the docking station is on HDMI2 - let's use it and turn off local display
logger -t DOCKING "Switching off LVDS1 and switching on HDMI2/3"
su $username -c ' /usr/bin/xrandr --output LVDS-1 --off --output HDMI-1 --off --output HDMI-3 --auto --primary --output HDMI-2 --auto --left-of HDMI-3 '
}
#case "$DOCKED" in
# "0")
# #undocked event
# switch_to_local :0 ;;
# "1")
# #docked event
# switch_to_external :0 ;;
#esac
可以通过将操作(添加或删除,取决于您测试的方式)传递给 /sbin/thinkpad.sh 来测试脚本
jgould@Ash:~$ ACTION=remove /sbin/thinkpad-dock.sh
/sbin/thinkpad-dock.sh: 14: /sbin/thinkpad-dock.sh: [[: not found
/sbin/thinkpad-dock.sh: 17: /sbin/thinkpad-dock.sh: [[: not found
/sbin/thinkpad-dock.sh: 44: /sbin/thinkpad-dock.sh: function: not found
这就是结果,但是 syslog 提供的信息不太有用(至少对我来说):
6 月 3 日 23:52:33 Ash systemd-udevd[4521]: 进程“/sbin/thinkpad-dock.sh”>失败,退出代码为 2。6 月 3 日 23:52:33 Ash systemd-udevd[4527]: 进程“/sbin/thinkpad-dock.sh”>失败,退出代码为 2。6 月 3 日 23:52:33 Ash systemd-udevd[4524]: 进程“/sbin/thinkpad-dock.sh”>失败,退出代码为 2。6 月 3 日 23:52:33 Ash systemd-udevd[4520]: 进程“/sbin/thinkpad-dock.sh”>失败,退出代码为 2。
过去几天我一直在研究这个问题,我已经阅读了 udev 规则,我很确定那部分是正确的,系统日志说当我们停靠和脱离停靠时,我们正朝着正确的方向移动。
我不知道到底发生了什么……
有任何想法吗?