Ich kann "optirun intel-virtual-output" in meinem Udev-Skript nicht zum Laufen bringen

Ich kann "optirun intel-virtual-output" in meinem Udev-Skript nicht zum Laufen bringen

Ich habe ein Thunderbolt 3-Dock, das ich so automatisieren wollte, dass es automatisch ein Skript ausführt, sobald es ein- und ausgesteckt wird. Ich kann mein „Ausstecken“-Skript problemlos ausführen, aber mein „Einstecken“-Skript funktioniert nicht. Ich habe es manuell getestet und alles scheint gut zu funktionieren. Aber wenn Udev ausgeführt wird, scheint es nicht richtig zu funktionieren. Ich kann keine von Udev ausgegebenen Fehler finden. Jede Hilfe funktioniert.

/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

verwandte Informationen