sudo crontab 알림 전송이 작동하지 않습니다

sudo crontab 알림 전송이 작동하지 않습니다

비슷한 게시물을 읽었습니다.여기,여기,여기그리고여기DISPLAY언급된 몇 가지 환경 변수 가 있으며 DBUS_SESSION_BUS_ADDRESS내 사용자 crontab에서 작동하도록 알림 보내기를 활성화하는 사용자 crontab 상단에 이를 설정합니다. 하지만 에 똑같은 crontab을 설정하면 작동하지 않습니다 sudo crontab -e. 그러면 안되는 이유는 무엇입니까? 어떻게 작동하게 할 수 있나요?

테스트 파일

#! /bin/bash
env > $1
notify-send "I want to see this"

크론탭 -e

SHELL=/bin/bash
PATH="/usr/bin:/home/ripytide/scripts/"
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
DISPLAY=:0                                                                     
* * * * * test.sh /home/ripytide/crontab.env

sudo crontab-e

SHELL=/bin/bash
PATH="/usr/bin:/home/ripytide/scripts/"
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
DISPLAY=:0                                                                     
* * * * * test.sh /home/ripytide/sudocrontab.env

crontab.env

SHELL=/bin/bash
PWD=/home/ripytide
LOGNAME=ripytide
_=/usr/bin/env
HOME=/home/ripytide
LANG=en_GB.UTF-8
USER=ripytide
DISPLAY=:0
SHLVL=1
PATH=/usr/bin:/home/ripytide/scripts/
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus

sudocrontab.env

SHELL=/bin/bash
PWD=/root
LOGNAME=root
_=/usr/bin/env
HOME=/root
LANG=en_GB.UTF-8
USER=root
DISPLAY=:0
SHLVL=1
PATH=/usr/bin:/home/ripytide/scripts/
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus

답변1

D-Bus는 호출 프로세스의 UID와 세션 데몬이 동일한지 확인합니다. 스크립트는 notify-send대상 사용자로 실행되어야 합니다. 스크립트를 루트로 실행하려면 스크립트에 sudo -u user notify-send ….

스크립트의 환경이 환경에 도달하지 않도록 sudo환경을 정리하는 것을 잊지 마십시오 ( 보안 정책에서는 변수 보존을 허용할 수 있지만 귀하의 경우에는 기본적으로 이것이 발생하지 않을 수 있습니다).DBUS_SESSION_BUS_ADDRESSnotify-send/etc/sudoerssudo

설정을 변경해 볼 수 있습니다. 자세한 내용은 다루지 않겠습니다. 또한 sudo -E(참조 man 8 sudo). 가장 덜 침해적인 방법은 sudo요청 시 변수를 설정하도록 요청하는 것입니다.

sudo -u user DBUS_SESSION_BUS_ADDRESS="$DBUS_SESSION_BUS_ADDRESS" \
   notify-send "I want to see this"

스크립트를 처리하는 쉘이 확장되면 $DBUS_SESSION_BUS_ADDRESS명령은 다음과 같습니다.

sudo -u user DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus \
   notify-send "I want to see this"

이 양식은 직접 사용할 수도 있으며 귀하에게 달려 있습니다.

일반적으로 sudo이 경우에도 변수 설정을 허용하지 않도록 구성할 수 있습니다. 최악의 경우에는 다음이 작동합니다.

sudo -u user sh -c '
   DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send "I want to see this"
'

관련 정보