联想 Thinkpad T420,Mini Dock 3 外接显示器,udev 规则和功能失调的脚本......(Ubuntu 18.04,带有 i3 WM)

联想 Thinkpad T420,Mini Dock 3 外接显示器,udev 规则和功能失调的脚本......(Ubuntu 18.04,带有 i3 WM)

因此,我正在尝试配置 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 规则,我很确定那部分是正确的,系统日志说当我们停靠和脱离停靠时,我们正朝着正确的方向移动。

我不知道到底发生了什么……

有任何想法吗?

相关内容