Script "grafici" eseguiti da cron o anacron su Wayland

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2909
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Script "grafici" eseguiti da cron o anacron su Wayland

Messaggio da rai »

Sotto Wayland non funzionano gli script che hanno una GUI (anche minimale) per comunicare con l'utente. (Questi script funzionano bene sotto Xorg)
Posto il codice di un esempio minimo funzionante (bisogna mettere il proprio nomeutente nel primo rigo)
Decommentare il rigo con zenity (e commentare quello di kdialog) dovrebbe bastare per mostrare l'errore su Gnome.

Codice: Seleziona tutto

#!/bin/bash

user=  # <<<<< personalizzare

log=/home/$user/Scrivania/esempio.log
export DISPLAY=:0.0
echo "[$user] $(date)" >> $log
su $user -c 'kdialog --title="Titolo" --icon="emblem-warning"\Risolto
                     --warningcontinuecancel="<h2>Avviso</h2>"' 2>>$log

#su $user -c 'zenity --info --title="TITOLO" --text="Testo"' 2>>$log

exitcode=$?
if [[ $exitcode -eq 0 ]]; then fare=continuare; else fare=smettere; fi
echo -e "\nHai scelto di $fare\n-----\n" >>$log
exit
Lo script va eseguito da crontab di sistema (quindi con USER root) ma l'errore esce anche se viene eseguito da CLI (non importa se eseguito da superuser o da normale utente con `sudo nomescript`
Questo è l'errore che esce dallo script ogni volta che viene invocato il dialogo grafico:

Codice: Seleziona tutto

Authorization required, but no authorization protocol specified
qt.qpa.xcb: could not connect to display :0.0
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, xcb.

Annullato
Da cron l'errore è lievemente diverso nel primo rigo:

Codice: Seleziona tutto

Invalid MIT-MAGIC-COOKIE-1 keyqt.qpa.xcb: could not connect to display :0.0
Credo che il problema sia questo

Vorrei usare Wayland su questo pc. Alcuni script _devono_ essere eseguiti come superuser e alcuni sono in Python con interfaccia basata sulle QT quindi l'opzione di dialoghi "pseudografici" (whiptail) non funziona. Cosa consigliate di fare?

Per i moderatori: non sono sicuro che questo problema sia da sezione "Programmazione". Lo vedremo in base agli sviluppi.
Ultima modifica di rai il sabato 18 maggio 2024, 21:20, modificato 3 volte in totale.
Avatar utente
GjMan78
Rampante Reduce
Rampante Reduce
Messaggi: 6234
Iscrizione: mercoledì 22 novembre 2006, 19:15
Desktop: KdePlasma
Distribuzione: EndeavourOS
Sesso: Maschile
Località: ~/Italia/Lazio/Viterbo/

Re: Script "grafici" eseguiti come root su Wayland

Messaggio da GjMan78 »

Magari sono fuori strada ma prova esportando questa variabile

Codice: Seleziona tutto

export QT_QPA_PLATFORM=xcb ./il-tuo-script.sh
MacBook Pro - Intel i5-3210 - 16 Gbyte Ram DDR3 - SSD 500 Gbyte x 2
»»» 𝗙𝗮𝗶 𝗶𝗹 𝗕𝗮𝗰𝗸𝘂𝗽! ¯\_(ツ)_/¯
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2909
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: Script "grafici" eseguiti come root su Wayland

Messaggio da rai »

GjMan78 ha scritto:
domenica 10 settembre 2023, 20:35
Magari sono fuori strada ma prova esportando questa variabile

Codice: Seleziona tutto

export QT_QPA_PLATFORM=xcb ./il-tuo-script.sh
Grazie! più tardi ti faccio sapere
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2909
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: [Risolto] Script "grafici" eseguiti come root su Wayland

Messaggio da rai »

Grazie per avermi messo sulla strada giusta @Gjman78: nel mio caso esportare il plugin xcb non funziona ma funziona eseguire sulla riga di comando prima dello script (o mettere dentro lo stesso script) il seguente:

Codice: Seleziona tutto

export XDG_RUNTIME_DIR=/run/user/1000 QT_QPA_PLATFORM=wayland
In pratica esporto nell'evironment di root il valore che quelle variabili hanno nell'env del mio utente

Diciamo che funziona "probabilmente" dato che ho provato solo con lo script di esempio che ho messo nel primo post. Per ora ho messo il [Risolto] però mi riservo di verificare nel reale ambiente di produzione e poi torno qui a riferire.

NB Non ho capito se sono io a non fare le ricerche giuste ma questo magheggio non l'ho trovato suggerito da nessuna parte. A meno che... non sia una cosa sconsigliabile da fare ed è per questo che non si trova.
Avatar utente
GjMan78
Rampante Reduce
Rampante Reduce
Messaggi: 6234
Iscrizione: mercoledì 22 novembre 2006, 19:15
Desktop: KdePlasma
Distribuzione: EndeavourOS
Sesso: Maschile
Località: ~/Italia/Lazio/Viterbo/

Re: [Risolto] Script "grafici" eseguiti come root su Wayland

Messaggio da GjMan78 »

rai ha scritto:
venerdì 22 settembre 2023, 13:00
NB Non ho capito se sono io a non fare le ricerche giuste ma questo magheggio non l'ho trovato suggerito da nessuna parte. A meno che... non sia una cosa sconsigliabile da fare ed è per questo che non si trova.
Eseguire i comandi modificando qualche variabile in questo modo è utile quando si usa un DE alternativo, io ho imparato a farlo quando usavo i3 e qualche applicazione non partiva perché non riconosceva l'ambiente grafico.
MacBook Pro - Intel i5-3210 - 16 Gbyte Ram DDR3 - SSD 500 Gbyte x 2
»»» 𝗙𝗮𝗶 𝗶𝗹 𝗕𝗮𝗰𝗸𝘂𝗽! ¯\_(ツ)_/¯
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2909
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: [Risolto] Script "grafici" eseguiti come root su Wayland

Messaggio da rai »

GjMan78 ha scritto:
venerdì 22 settembre 2023, 13:31
Eseguire i comandi modificando qualche variabile in questo modo è utile quando si usa un DE alternativo, io ho imparato a farlo quando usavo i3 e qualche applicazione non partiva perché non riconosceva l'ambiente grafico.
Ok ma non ero stato chiaro: mi riferivo alla specifica questione di avere output grafico da script di superutente sotto wayland: www.google.com/search?&q=wayland+root+gui il suggerimento di esportare quelle due variabili non lo danno nella wiki di Arch, in StackExchange, in reddit, in centos, in redhat, ... ripeto a meno di miei limiti nella ricerca
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2909
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: [Risolto] Script "grafici" eseguiti da cron o anacron su Wayland

Messaggio da rai »

Riporto su questo thread perchè il problema non riguarda solo "root", è più generale e lo voglio riformulare con maggiore chiarezza rispetto al primo post:
in una sessione Wayland non funziona output grafico di script eseguiti in un environment diverso da quello dell'utente destinatario dell'output grafico.
Ricadono in questa casistica tutti gli eseguibili lanciati come job di cron/anacron (sia cron/anacron di sistema che utente).

Premessa: con Xorg l'unico accorgimento necessario nei crontab/anacrontab utente era che, prima del rigo con il job, ci fosse l'assegnazione:

Codice: Seleziona tutto

DISPLAY=:0
Per i crontab/anacrontab di sistema, oltre al rigo con la variabile DISPLAY, serviva un rigo con l'assegnazione:

Codice: Seleziona tutto

XAUTHORITY=/home/NOME_UTENTE/.Xauthority
oppure nel job si doveva usare la sintassi:

Codice: Seleziona tutto

su NOME_UTENTE -c NOME_ESEGUIBILE


Per far funzionare sotto Wayland uno script così come funziona sotto Xorg bisogna esportare alcune variabili nell'ambiente in cui lo script viene eseguito.

Se l'anacron utente viene lanciato post-login (per es. in ~/.profile) è sufficiente fare come con Xorg e assegnare nell'anacrontab utente solo:

Codice: Seleziona tutto

DISPLAY=:0
Per cron utente bisogna assegnare in crontab anche le variabili XDG_RUNTIME_DIR e QT_QPA_PLATFORM:

Codice: Seleziona tutto

DISPLAY=:0
XDG_RUNTIME_DIR=/run/user/1000
QT_QPA_PLATFORM=wayland
Per cron/anacron di sistema bisogna assegnare nel crontab/anacrontab anche la variabile XAUTHORITY

Codice: Seleziona tutto

DISPLAY=:0
XDG_RUNTIME_DIR=/run/user/1000
QT_QPA_PLATFORM=wayland
XAUTHORITY=/home/NOME_UTENTE/.Xauthority
in alternativa all'uso di XAUTHORITY, nel job si deve usare la sintassi:

Codice: Seleziona tutto

su NOME_UTENTE -c NOME_ESEGUIBILE


Nota
Quasi sempre l'output grafico degli eseguibili lanciati in questi modi non rispetterà le impostazioni del tema utente e sarà piuttosto brutto da vedere.
Un miglioramento si ottiene se invece di mettere semplicemente nel job

Codice: Seleziona tutto

/PERCORSO/NOME_ESEGUIBILE
ci si mette

Codice: Seleziona tutto

su NOME_UTENTE -c /PERCORSO/NOME_ESEGUIBILE
Quando questo non basta, siccome non ho capito esattamente quali variabili siano necessarie, aggiungo all'environment dello script _tutte_ le variabili della attuale sessione utente.
Questo si può fare per esempio così:
· aggiungo a $HOME/.profile questa riga in modo che ad ogni nuova sessione vengano salvate sul file $HOME/.env tutte le variabili dell'ambiente dell'utente.

Codice: Seleziona tutto

env > $HOME/.env
· all'inizio del crontab metto un rigo

Codice: Seleziona tutto

SHELL=/bin/bash
· nel cronjob il comando da eseguire diventa:

Codice: Seleziona tutto

set -a; . /home/NOME_UTENTE/.env; /PERCORSO/NOME_ESEGUIBILE

Per fare la stessa cosa in anacron, dove i comandi vengono eseguiti comunque da /bin/sh anche se si assegna SHELL=/bin/bash, il comando nel job diventa:

Codice: Seleziona tutto

/bin/bash -c "set -a; . /home/NOME_UTENTE/.env; /PERCORSO/NOME_ESEGUIBILE"
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2909
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: Script "grafici" eseguiti da cron o anacron su Wayland

Messaggio da rai »

Torno a postare qui perché c'è (almeno) un caso in cui la faccenda non è risolta.
Non riesco a ottenere output grafico da script Python che usano la libreria tkinter.
Oltre agli hack del post precedente, incluso esportare tutto l'env utente, ho provato a mettere xhost + local: prima del cronjob ma senza successo.
Nel Traceback l'errore è:

Codice: Seleziona tutto

_tkinter.TclError: couldn't connect to display ":0"
se si reindirizza lo stderr su file compare l'errore

Codice: Seleziona tutto

Invalid MIT-MAGIC-COOKIE-1 key
Qualcuno ha qualche idea?

Per invogliare qualcuno a provare posto uno script di esempio (bisogna installare il pacchetto python3-tk)

Codice: Seleziona tutto

#! /usr/bin/env python3
import logging
from pathlib import Path
from tkinter.messagebox import askyesno
import tkinter
import traceback

LOG_FILE = Path(__file__).with_suffix('.log').__str__()
logging.basicConfig(filename=LOG_FILE,
                    format='[%(asctime)s] %(levelname)s: %(message)s',
                    datefmt='%d %b %Y %H:%M:%S',
                    level=logging.INFO)
logging.info('Inizio esecuzione di %s', Path(__file__).name)

try:
    window = tkinter.Tk()
except Exception:
    logging.error(f"{traceback.format_exc()}\n-----\n")
    raise SystemExit()
window.wm_withdraw()
risp = askyesno("Tk.py", "Avviso")
scelta = "Sì" if risp else "No"
logging.info(f"Hai scelto {scelta}\n-----\n")
e di seguito un esempio di crontab utente per verificare

Codice: Seleziona tutto

DISPLAY=:0
XDG_RUNTIME_DIR=/run/user/1000
QT_QPA_PLATFORM=wayland

* * * * * bash -c "xhost + local:; set -a; . $HOME/.env; $HOME/esempio_Tk.py" >> $HOME/Tk.err 2>&1
Notare che uno script Python che usa le librerie Qt funziona invece come voluto, usando gli accorgimenti del post precedente.

Grazie per l'attenzione.
albyCardu
Prode Principiante
Messaggi: 19
Iscrizione: mercoledì 14 febbraio 2024, 21:38
Desktop: Gnome
Distribuzione: Zorin 17
Sesso: Maschile

Re: Script "grafici" eseguiti da cron o anacron su Wayland

Messaggio da albyCardu »

rai ha scritto:
sabato 18 maggio 2024, 21:27
Notare che uno script Python che usa le librerie Qt funziona invece come voluto, usando gli accorgimenti del post precedente.
Lo script python di esempio che hai caricato mi funziona senza nessun accorgimento.
rai ha scritto:
sabato 18 maggio 2024, 21:27

Codice: Seleziona tutto


* * * * * bash -c "xhost + local:; set -a; . $HOME/.env; $HOME/esempio_Tk.py" >> $HOME/Tk.err 2>&1
Questo invece non l'ho provato, perchè non so cosa faccia, ma se lo spieghi provo :ciao:
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2909
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: Script "grafici" eseguiti da cron o anacron su Wayland

Messaggio da rai »

Lo script python di esempio che hai caricato mi funziona senza nessun accorgimento.
Cioè in una sessione Wayland fai eseguire da cron o da anacron lo script e ne vedi l'output? :o

albyCardu ha scritto:
domenica 19 maggio 2024, 9:11

Codice: Seleziona tutto

* * * * * bash -c "xhost + local:; set -a; . $HOME/.env; $HOME/esempio_Tk.py" >> $HOME/Tk.err 2>&1
Questo invece non l'ho provato, perchè non so cosa faccia, ma se lo spieghi provo :ciao:
se rileggi attentamente questo post (in particolare da "Nota" alla fine): dovrebbe essere comprensibile cosa faccia. Non riesco ad essere più chiaro di così. Caso mai, chiedi qualI sono le specifiche parti non chiare.
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2909
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: Script "grafici" eseguiti da cron o anacron su Wayland

Messaggio da rai »

Dato che non è venuta fuori ancora nessuna idea, evoco un utente che ho visto esperto di tkinter, @nuzzopippo hai qualcosa da proporre?
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1668
Iscrizione: giovedì 12 ottobre 2006, 11:34

Re: Script "grafici" eseguiti da cron o anacron su Wayland

Messaggio da nuzzopippo »

rai ha scritto:
martedì 21 maggio 2024, 13:42
Dato che non è venuta fuori ancora nessuna idea, evoco un utente che ho visto esperto di tkinter, @nuzzopippo hai qualcosa da proporre?
Immeritatamente evocato, ben lungi dall'essere esperto in qualcosa, al momento debbo, purtroppo, deludere non avendo mai avuto motivo di schedulare l'esecuzione di applicazioni grafiche.
@rai, guarderò la problematica da Te proposta appena mi sarà possibile, se mai troverò qualcosa di utile in merito farò sapere.

Ciao :)
Fatti non foste a viver come bruti ...
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: nik1404 e 4 ospiti