Applicazioni GUI in anacron


2

Sto cercando di eseguire un gruppo di script / comandi ogni giorno.

A tale scopo ho configurato un anacron dello spazio utente come spiegato Qui . Anacron viene avviato ogni ora da cron:

contenuti di /var/spool/cron/rawing:

@hourly /usr/sbin/anacron -s -t ${HOME}/.anacron/etc/anacrontab -S ${HOME}/.anacron/spool

Questo funziona bene. Tuttavia, non sono riuscito a eseguire alcuna applicazione grafica dal mio anacrontab. Ho provato:

@daily 0 gui_test_env      env SCREEN=:0 zenity --info
@daily 0 gui_test_screen   SCREEN=:0 zenity --info

Entrambi non riescono con il messaggio di errore

Unable to init server: Could not connect: Connection refused

(zenity:6034): Gtk-WARNING **: cannot open display: 

Anche

@daily 0 notify_test    SCREEN=:0.0 && notify-send "foobar"

non ha prodotto un messaggio di errore, ma non ha nemmeno visualizzato una notifica. D'altra parte, uno script python che mostra notifiche desktop non è riuscito con il messaggio

Unable to init server: Could not connect: Connection refused
Traceback (most recent call last):
  File "/home/rawing/Desktop/folder/python/misc/confirm_run.py", line 36, in <module>
    n.show()
GLib.Error: g-spawn-exit-error-quark: Error spawning command line 'dbus-launch --autolaunch=db6d4465f8584b8faa8abfb09b242b95 --binary-syntax --close-stderr': Child process exited with code 1 (1)

Nel caso abbia importanza, il codice python appare come questo (abbreviato):

from gi.repository import Notify
Notify.init('test')
n= Notify.Notification.new('title', 'question', "dialog-question")
n.set_urgency(Notify.Urgency.NORMAL)
n.show()

Aggiunta xhost local:rawing > /dev/null al mio ~/.bashrc come suggerito Qui neanche aiutato.


Aggiornare: Sono riuscito a eseguire applicazioni GUI usando DISPLAY=:0 XAUTHORITY=/home/rawing/.Xauthority some_gui_app. Le notifiche sul desktop continuano a non funzionare. L'errore è:

Traceback (most recent call last):
  File "/home/rawing/Desktop/folder/python/misc/confirm_run.py", line 36, in <module>
    n.show()
GLib.Error: g-dbus-error-quark: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.Notifications was not provided by any .service files (2)

P.S .: suggerimenti su come fare questo lavoro senza anche l'anacron è il benvenuto. Pensavo che Anacron avrebbe reso tutto più facile ... risulta che ero troppo ottimista.


org.freedesktop.Notifications was not provided by any .service files Ho visto rapporti di messaggi di errore simili (ad esempio, Qui su Arch e Qui su Ubuntu) per il quale il problema è stato risolto installando un daemon di notifica. Hai provato?
John1024

@ John1024: installazione notification-daemon ripristinato l'errore in GLib.Error: g-spawn-exit-error-quark: Error spawning command line 'dbus-launch --autolaunch=2a4dc02c073e450399e9f344111fbbbb --binary-syntax --close-stderr': Child process exited with code 1 (1).
Aran-Fey

Questo messaggio di errore sembra essere associato a numerosi bug del software. Se sei su un Mac, potresti aver bisogno di questo aggiornamento del software . Su Fedora, potrebbe essere necessario eseguire l'aggiornamento per ottenere questa correzione di bug . Qualunque sia la distribuzione su cui ti trovi, potresti semplicemente voler eseguire l'aggiornamento alla versione più recente.
John1024

Sto avendo lo stesso problema cercando di eseguire uno script python da timer systemd. (GLib.Error: g-spawn-exit-error-quark: Error spawning command line 'dbus-launch --autolaunch= & Lt; / cesoiatura & gt; - hai scoperto qualcosa?
nak

Risposte:


1

Nel trattare con cron su un NAS, ho imparato che eseguire i comandi direttamente è spesso controproducente. La soluzione a questo è di creare uno script che faccia tutto internamente. Quindi fare in modo che l'attività cron chiami lo script che funziona perfettamente. Ciò richiede un paio di azioni speciali.

  • Crea il copione (questo può essere semplice come la linea in più #!bin/bash come prima linea
  • Usa percorsi assoluti per TUTTO (spesso un ambiente cron non ha percorsi nell'ambiente, se ha un ambiente a tutti)

[modifica] Comprendo che questo salta molto del dettaglio fornito nel post di domanda. Questo è un po 'intenzionale.

Con un po 'di prove ed errori, ecco cosa ho avuto modo di lavorare.

mkdir -p /home/username/bin/cron
nano -w /home/username/bin/cron/testscreen.sh

(in nano, inserisci quanto segue)

#!/bin/bash
/usr/bin/env SCREEN=:0 DISPLAY=:0 XAUTHORITY=/home/username/.Xauthority /usr/bin/zenity --info

Salva lo script.

chmod +x /home/username/bin/cron/testscreen.sh
crontab -e 

Aggiungi la seguente riga, regolando i tempi secondo le tue particolari esigenze.

20   8  *   *   *     /home/username/bin/cron/testscreen.sh

Per lo più, dovevo solo guardare avanti e indietro dall'ambiente del mio xterm all'ambiente in cron e capire quali pezzi chiave mancavano. Ci sono voluti alcuni passi veloci per far sì che gli eventi cron iniziassero "un minuto da adesso" per i test, ma ho capito che funzionava, quindi dovrebbe funzionare per te.


Stai dicendo che dovrei mettere "SCREEN =: 0 zenity --info" in uno script bash e poi far eseguire a cron tale script? Se è così, ciò non ha cambiato nulla.
Aran-Fey

@Rawing Risposta riveduta / ampliata.
killermist

Come ho detto prima, non sembra fare alcuna differenza.
Aran-Fey

Se segui i passaggi che ho esposto esattamente, non funziona? Ci sono voluti un po 'di lavoro per ottenere quella serie di passaggi verso il basso, ma una volta che ho fatto, funziona in modo prevedibile ogni volta.
killermist

Le applicazioni GUI funzionano indipendentemente dal fatto che io usi uno script, ma le notifiche sul desktop non funzionano in alcun modo.
Aran-Fey
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.