udevスクリプトで「optirun intel-virtual-output」が機能しません。

udevスクリプトで「optirun intel-virtual-output」が機能しません。

Thunderbolt 3ドックがあり、それを接続してから分離した後、自動的にスクリプトを実行したいと思います。 「プラグイン」スクリプトは完全に実行できますが、「プラグイン」スクリプトは機能しません。手動でテストしましたが、すべてが正常に動作しているようです。しかし、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

ベストアンサー1

おすすめ記事