Como chamar o zenity do script cron?

5

Exemplo de script error.sh :

#! /bin/bash

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

Meu incron-config :

~/Documents IN_MOVED_TO ~/scripts/error.sh

Se eu executar error.sh na caixa de diálogo da GUI do terminal aparecer, mas não no cenário acima de incron.

Como posso fazer zenity para abrir essa caixa de diálogo quando eu mover o arquivo na pasta Documentos?

    
por zetah 06.12.2011 / 15:48

3 respostas

15

Resposta encontrada aqui . Adicionar a ~/.bashrc :

xhost local:$USER > /dev/null

e então use zenity no script evocado pelo cron assim:

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

adicionar --display=:0.0 é o que é importante

    
por zetah 06.12.2011 / 16:15
2

Existe outra solução possível se você quiser que ela funcione, independentemente de nome de usuário, encontrando o usuário ativo do display X, usando ConsoleKit (o comando ck-list-sessions ). Assumindo o script abaixo é executado como root, ele mostrará uma mensagem zenity para o ativo atual usuário no seu computador:

#!/bin/bash
ACTIVE=$(ck-list-sessions | awk -F' = ' '
    function f(){if(A=="TRUE"){P=U"\t"D;gsub("'"'"'","",P);print P}}
    =="\tunix-user"{U=} 
    =="\tx11-display"{D=} 
    =="\tactive"{A=} 
    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!'"

O pequeno script awk é apenas para analisar sessões ck-list e saída do nome de usuário e exibição do usuário que está ativo (poderia também requer que seja uma conexão local se você quiser excluir ssh -X usuários, se você quiser).

(Eu uso isso em um script backup executado ao conectar um dispositivo USB drive.)

    
por unhammer 09.01.2012 / 12:39
1

Para executar um comando GUI no cron, você terá que informar ao cron qual exibição o programa deve usar. Para isso você usa: export DISPLAY =: 0

Para uma notificação zenity a cada 30 minutos, edite com crontab -e e defina um trabalho como:

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

Detalhado como: link

    
por damodaranudas 07.01.2016 / 18:11

Tags