GNU/Linux >> Znalost Linux >  >> Linux

Používáte Notify-Send s Cronem?

Používám Arch Linux s KDE/Awesome WM. Snažím se získat
notify-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.

Související:Jak generovat záznamy SSHFP?
Linux
  1. Použití skriptu Cron Wrapper

  2. Používáte zalamování slov s Mc?

  3. Použití –exclude With The Du Command?

  1. Jak naplánovat úlohy Cron pomocí Crontab

  2. Používáte úlohy CRON k návštěvě adresy URL?

  3. pomocí awk s podmínkami hodnoty sloupce

  1. Plánování systémových úloh pomocí Cronu na Linuxu

  2. Odstraňte soubory protokolu pomocí úlohy cron

  3. Jak podložit soubor pomocí FF pomocí dd?