저는 Arch Linux와 KDE/Awesome WM을 사용하고 있습니다. 나는
notify-send
와 함께 일하려고 노력하고 있습니다 cron
.
나는 DISPLAY
/ XAUTHORITY
변수를 설정하고 notify-send
"sudo -u"를 사용하여 실행해 보았지만 소용이 없었습니다.
대화형으로 알림 보내기를 호출하고 세션에서 알림을 받을 수 있습니다.
FWIW, cron 작업이 제대로 실행되고 내용을 임시 파일에 에코하여 확인했습니다. 단지 "알림 보내기"가 작동하지 않습니다.
암호:
[matrix@morpheus ~]$ crontab -l
* * * * * /home/matrix/scripts/notify.sh
[matrix@morpheus ~]$ cat /home/matrix/scripts/notify.sh
#!/bin/bash
export DISPLAY=127.0.0.1:0.0
export XAUTHORITY=/home/matrix/.Xauthority
echo "testing cron" >/tmp/crontest
sudo -u matrix /usr/bin/notify-send "hello"
echo "now tested notify-send" >>/tmp/crontest
[matrix@morpheus ~]$ cat /tmp/crontest
testing cron
now tested notify-send
[matrix@morpheus ~]$
보시다시피 알림 전송은 에코 전후에 작동합니다.
저도 설정해봤는데DISPLAY=:0.0
업데이트: 좀 더 검색해봤습니다.DBUS_SESSION_BUS_ADDRESS를 찾았습니다.설정이 필요합니다. 대화형 세션에서 얻은 값으로 하드코딩한 후 매분마다 작은 "hello" 메시지가 화면에 나타납니다.
하지만 문제는 이 변수가 영구적이지 않다는 것입니다. 따라서 거기에 제안된 명명된 파이프 솔루션을 시도해 보겠습니다.
[matrix@morpheus ~]$ cat scripts/notify.sh
#!/bin/bash
export DISPLAY=127.0.0.1:0.0
export XAUTHORITY=/home/matrix/.Xauthority
export DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-BouFPQKgqg,guid=64b483d7678f2196e780849752e67d3c
echo "testing cron" >/tmp/crontest
/usr/bin/notify-send "hello"
echo "now tested notify-send" >>/tmp/crontest
알림 보내기가 지원되지 않는 것 같으니 (적어도 직접적으로는), 사용할 수 있는 cron
다른 친숙한 알림 시스템이 있습니까 ?cron
답변1
이 변수를 설정해야 합니다 DBUS_SESSION_BUS_ADDRESS
. 기본적으로 cron은 이 변수에 액세스할 수 없습니다. 이 문제를 해결하려면 다음 스크립트를 어딘가에 넣고 사용자가 로그인할 때 호출하세요.놀라운그리고 run_once
위키에 언급된 기능들입니다. 함수가 필요한 것보다 더 많이 호출되더라도 해가 되지 않으므로 어떤 접근 방식이든 가능합니다.
#!/bin/sh
touch $HOME/.dbus/Xdbus
chmod 600 $HOME/.dbus/Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.dbus/Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.dbus/Xdbus
exit 0
그러면 필수 Dbus 환경 변수가 포함된 파일이 생성됩니다. 그런 다음 cron이 호출한 스크립트에서 스크립트를 가져와 변수를 가져옵니다.
if [ -r "$HOME/.dbus/Xdbus" ]; then
. "$HOME/.dbus/Xdbus"
fi
답변2
crontab 자체에서 변수를 설정해야 합니다.
DISPLAY=:0.0
XAUTHORITY=/home/matrix/.Xauthority
# m h dom mon dow command
* * * * * /usr/bin/notify-send "hello"
아니요 sudo
, 적어도 내 시스템에는 없습니다.
답변3
우분투 18.04에서 i3을 사용하고 있습니다. 제가 이 문제를 해결한 방법은 다음과 같습니다.
* * * * * XDG_RUNTIME_DIR=/run/user/$(id -u) notify-send Hey "this is dog!"
답변4
이 농담은 Manjaro와 Cronie에서 저에게 효과적이었습니다.
# Note: "1000" would be your user id, the output of... "id -u <username>"
10 * * * * pj DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send 'Hello world!' 'This is an example notification.'
매우 추악한 DBUS_blah_blah가 없으면 전혀 작동하지 않습니다. 나는 또한 journalctl -xb -u cronie
그것이 도움이 된다는 것을 알았습니다. FWIW, Cronie는 crond를 사용하며 Vixie cron과 역호환되어야 합니다.
여기서 해결책을 찾았습니다https://wiki.archlinux.org/index.php/Desktop_notifications
업데이트: 2021년에도 여전히 유효합니다. 이 프롬프트를 /etc/crontab 파일에 추가했습니다.
# After installing cronie:
# systemctl start cronie
# systemctl enable cronie
# After editing this file:
# chmod 600 /etc/crontab
# crontab /etc/crontab
# Check that the changes are set:
# crontab -l