Jak wywołać zenity ze skryptu cron?

8

Przykładowy skrypt error.sh:

#! /bin/bash

zenity --error --text='Something very bad has happened!'  

Mój incron-config:

~/Documents IN_MOVED_TO ~/scripts/error.sh

Jeśli uruchomię error.shw terminalu GUI pojawia się okno dialogowe, ale nie w powyższym scenariuszu incron.

Jak mogę ustawić zenity na wyświetlanie tego okna dialogowego podczas przenoszenia pliku w folderze Dokumenty?

zetah
źródło

Odpowiedzi:

19

Znalazłem odpowiedź tutaj . Dodaj do ~/.bashrc:

xhost local:$USER > /dev/null

a następnie użyj zenity w skrypcie wywoływanym przez crona w następujący sposób:

zenity --error --text='Something very bad has happened!' --display=:0.0

dodawanie --display=:0.0jest ważne

zetah
źródło
--display =: 0,0 było ważne. Ale teraz mam ten sam problem z obsługą. Nic nie pokazuje, jeśli ustawię skrypt jako usługę!
Dr.jacky
4

Aby uruchomić polecenie GUI na cronie, musisz powiedzieć cronowi, jakiego wyświetlacza powinien używać program. Do tego używasz: eksport DISPLAY =: 0

Aby otrzymywać powiadomienie zenity co 30 minut, edytuj za pomocą crontab -ei ustaw zadanie takie jak:

*/30 *  * * *  export DISPLAY=:0 && /somedirectory/your_zenity_script.sh

Szczegółowe instrukcje: link

damodaranudas
źródło
2

Istnieje inne możliwe rozwiązanie, jeśli chcesz, aby działało niezależnie od nazwy użytkownika, znajdując aktywnego użytkownika wyświetlacza X, używając ConsoleKit (polecenie ck-list-sessions). Zakładając, że poniższy skrypt jest uruchamiany jako root, wyświetli komunikat zenity dla bieżącego aktywnego użytkownika na twoim komputerze:

#!/bin/bash
ACTIVE=$(ck-list-sessions | awk -F' = ' '
    function f(){if(A=="TRUE"){P=U"\t"D;gsub("'"'"'","",P);print P}}
    $1=="\tunix-user"{U=$2} 
    $1=="\tx11-display"{D=$2} 
    $1=="\tactive"{A=$2} 
    END{f()} /^[^\t]/{f()}
')
USERID=${ACTIVE%    *} # tab
USERNAME=$(getent passwd $USERID|cut -f1 -d':')
DISPLAY=${ACTIVE#*  } # tab

DISPLAY="$DISPLAY" su $USERNAME -c "zenity --error --text='Something very bad has happened!'"

Mały skrypt awk służy tylko do analizowania sesji ck-list i wysyłania nazwy użytkownika oraz wyświetlania aktywnego użytkownika (może również wymagać, aby było to połączenie lokalne, jeśli chcesz wykluczyć użytkowników ssh -X, jeśli chcesz).

(Używam tego w skrypcie zapasowym, który działa po podłączeniu dysku USB).

młot
źródło