Používám Arch Linux s KDE/Awesome WM. Snažím se získatnotify-send
pro práci s cron
.
Zkusil jsem nastavit DISPLAY
/XAUTHORITY
proměnné a spuštění notify-send
se „sudo -u“, vše bez výsledku.
Z relace mohu interaktivně volat notify-send a dostávat upozornění.
FWIW, úloha cron běží dobře, což jsem ověřil ozvěnou věcí do dočasného souboru. Nefunguje pouze „oznámení-odeslat“.
Kód:
[[email protected] ~]$ crontab -l
* * * * * /home/matrix/scripts/notify.sh
[[email protected] ~]$ 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
[[email protected] ~]$ cat /tmp/crontest
testing cron
now tested notify-send
[[email protected] ~]$
Jak můžete vidět, echo před a po odeslání oznámení fungovalo.
Také jsem zkusil nastavit DISPLAY=:0.0
AKTUALIZACE:
Trochu jsem hledal a zjistil, že je potřeba nastavit DBUS_SESSION_BUS_ADDRESS. A poté, co jsem to natvrdo zakódoval pomocí hodnoty, kterou jsem získal z mé interaktivní relace, se na obrazovce každou minutu začala objevovat malá zpráva „ahoj“!
Ale háček je v tom, že tato proměnná není v tomto příspěvku trvalá, takže zkusím řešení pojmenovaného potrubí, které je tam navrženo.
[[email protected] ~]$ 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
Od cron
Zdá se, že nepodporuje notify-send (alespoň ne přímo) existuje nějaký jiný systém upozornění, který je více cron
přátelské, které mohu použít?
Přijatá odpověď:
Musíte nastavit DBUS_SESSION_BUS_ADDRESS
variabilní. Ve výchozím nastavení cron
nemá přístup k proměnné. Chcete-li to napravit, dejte někam následující skript
a zavolejte ho, když se uživatel přihlásí, například pomocí úžasného a
run_once
funkce uvedená na wiki. Postačí jakákoli metoda, protože
neškodí, pokud je funkce volána častěji, než je požadováno.
#!/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
Tím se vytvoří soubor obsahující požadovanou proměnnou prostředí Dbus. Poté do
skriptu volaného cronem importujete proměnnou tak, že skript získáte:
if [ -r "$HOME/.dbus/Xdbus" ]; then
. "$HOME/.dbus/Xdbus"
fi
Zde je odpověď, která používá stejný
mechanismus.