У меня есть док-станция Thunderbolt 3, которую я хотел автоматизировать для автоматического запуска скрипта после его подключения и отключения. Я могу отлично запустить свой скрипт «plug out», но мой скрипт «plug in» не работает. Я протестировал его вручную, и все, кажется, работает нормально. Но запуск udev, похоже, не работает должным образом. Я не могу найти никаких ошибок, выдаваемых udev. Любые советы работают.
/etc/udev/rules.d/81-thinkpad-dock.rules
SUBSYSTEM=="input", ACTION=="add|remove", ENV{ID_VENDOR_ID}=="17ef", ENV{ID_MODEL_ID}=="3083", TAGS=="power-switch", RUN+="/etc/sbin/thinkpad-dock.sh"
/etc/sbin/thinkpad-dock.sh
#!/bin/sh -e
sleep 1
username=adam
if [[ "$ACTION" == "add" ]]; then
DOCKED=1
logger -t DOCKING "Detected condition: docked"
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
function switch_to_local {
export DISPLAY=$1
VIRTUAL_OUTPUT_PID=$(ps aux | grep -i "intel-virtual-output" | awk 'NR==1{print $2}')
kill -9 "$VIRTUAL_OUTPUT_PID"
su $username -c '
xrandr --output eDP1 --auto --primary \
--output VIRTUAL1 --off \
--output VIRTUAL2 --off'
}
function switch_to_external {
sleep 10
su $username -c 'optirun intel-virtual-output'
logger -t DOCKING "finished running"
}
case "$DOCKED" in
"0")
#undocked event
switch_to_local :0 ;;
"1")
#docked event
switch_to_external :0 ;;
esac