まず、システムで使用するデフォルトユーザーはrootです。これは
、現在よりよく実装されていない他のプロセスや機能に必要です
。オペレーティングシステム:Fedora 35
HDMIデバイスが接続されている場合、スクリプトをトリガーするudevルールがあります。
ACTION=="change", SUBSYSTEM=="drm", ENV{DISPLAY}=":0",ENV{XAUTHORITY}="/root/.Xauthority", RUN+="/bin/bash hdmi_hotplug_detection.sh"
スクリプトの内部には解像度などを変更するロジックがあります。
また、実行中のサービスを再起動したいと思います。- ユーザーコンテキスト。
xrandr --output HDMI-1 --auto
/usr/bin/systemctl --user restart daemon.service
udev がスクリプトをトリガーすると失敗します。
しかし、私が電話するとシステム制御コマンドはこれでsudo
期待どおりに機能します。
xrandr --output HDMI-1 --auto
sudo /usr/bin/systemctl --user restart daemon.service
xrandr
sudoなしで動作します。
私はスクリプトに1つを追加しましたがecho $(whoami)
(udevでトリガされていても)rootとして実行されると指定されているので、
sudoは必要ないと思いますか? !
=========
この動作の主な問題は、このスクリプトを手動またはpyhtonスクリプトでトリガーすることです。これは次の理由で失敗しますsudo
。
Failed to connect to bus: $DBUS_SESSION_BUS_ADDRESS and $XDG_RUNTIME_DIR not defined (consider using --machine=<user>@.host --user to connect to bus of other user)
この行動の理由は何ですか?
なぜ必要ですかsudo
?
私の解決策は次のとおりです
if [[ $1 = "-no-sudo" ]]; then
systemctl='/usr/bin/systemctl'
else
systemctl='sudo /usr/bin/systemctl'
fi
$systemctl --user restart daemon.service
したがって、udevはsudoで始まり、sudoなしで起動できます。