[programmazione] finestre di dialogo

18 risposte [Ultimo messaggio]
Ritratto di doc_pluto
doc_pluto
(Guru)
Offline
Guru
Iscritto: 08/02/2007
Messaggi: 871

dunque, visti i recenti problemi e le recenti necessità in cui mi sono imbattuto, ho creato un semplice script per monitorare le temperature del sistema:

#!/bin/bash
su - -c "echo -e 'rilevazione delle temperature eseguita >> $(date).\n\nTemperatura Dischi:' && hddtemp /dev/sda && hddtemp /dev/sdb && echo -e '\nSituazione Scheda Madre:' && sensors |grep °C" > /home/doc/SENSORS.txt

vorrei fare due cose:
_all'esecuzione dello script invece del terminale che mi richiede la paswod di root, vorrei far comparire una finestra tipo quella di autenticazione che appare quando eseguo yast2 dall'iconcina nel menù applicazioni
_reindirizzare l'output del comando non su un file di testo come fa ora, ma in una finestra di dialogo
_magari aggiungere una specie di timer per far eseguire il tutto ogni 15 minuti

sono cose fattibili per chi non ha molta dimestichezza con la programmazione?

Hardware: MB:P5E3_Deluxe - CPU:Core2Duo E8400 3.0GHz - RAM:Kingstone_2Gb_DDR3 - Video:GeForce9600GT/PCI/SSE2 - HD: 2x WDCaviarBlue 1TB
--------------------------------
Software: SO:openSuSE 12.1 - ARCH:64bit - DE:Gnome3 - DriverVideo:Ufficiali Nvidia

Ritratto di Gollum
Gollum
(Collaboratore)
Offline
Collaboratore
Iscritto: 03/03/2005
Messaggi: 802

Citazione:

sono cose fattibili per chi non ha molta dimestichezza con la programmazione?


Non che sia un esperto di programmazione ma anche bash, come altri linguaggi, ha la possibilità di creare interfaccie grafiche ( penso che siano quelle native di X anche se non ne sono certo). Lo script per evitare di inserire la password lo puoi avviare tremite cron con i permessi di root ogni 15 minuti, cambiando poi i permessi del file tramite lo script in modo che sia leggibile dall'utente normale.

Desktop DELL XPS8100 => openSUSE_12.2 => KDE 4.10 => Core i7 => 3.4.28-2.20 => Nvidia GT220
Notebook Sony Vaio VPPCA =>openSUSE_12.2 => KDE 4.10 => Core i5 => 3.4.28-2.20 => AMD HD 6470M

Ritratto di wal7er
wal7er
(Guru)
Offline
Guru
Iscritto: 21/09/2007
Messaggi: 572

Non c'è bisogno di scomodare cron, prova con kdialog: mi sa che fa proprio al caso tuo.

HP Pavilion dv5-1110el powered by OpenSUSE 13.2 64bit

http://linuxcounter.net/cert/432576.png

Ritratto di doc_pluto
doc_pluto
(Guru)
Offline
Guru
Iscritto: 08/02/2007
Messaggi: 871

wal7er ha scritto:

Non c'è bisogno di scomodare cron, prova con kdialog: mi sa che fa proprio al caso tuo.

utilizzo gnome come DE. c'è un corrispettivo?
in rete ho visto di sfuggita un certo zenity. qualcuno lo conosce?

Hardware: MB:P5E3_Deluxe - CPU:Core2Duo E8400 3.0GHz - RAM:Kingstone_2Gb_DDR3 - Video:GeForce9600GT/PCI/SSE2 - HD: 2x WDCaviarBlue 1TB
--------------------------------
Software: SO:openSuSE 12.1 - ARCH:64bit - DE:Gnome3 - DriverVideo:Ufficiali Nvidia

Ritratto di wal7er
wal7er
(Guru)
Offline
Guru
Iscritto: 21/09/2007
Messaggi: 572

Naturalmente io uso kde però forse c'è il corrispettivo su gnome:

ho visto questo http://linux.about.com/library/cmd/blcmdl1_gdialog.htm

e poi ho chiesto al gestore dei pacchetti:

#> cnf gdialog
 
Il programma 'gdialog' può essere trovato nel seguente pacchetto:
  * zenity [ percorso: /usr/bin/gdialog, repository: zypp (repo-oss) ]
 
Try installing with:
    sudo zypper install zenity

poi ho trovato http://linux.about.com/library/cmd/blcmdl1_gdialog.htm

Quindi quello che cerchi è proprio zenity (cioè gdialog).

HP Pavilion dv5-1110el powered by OpenSUSE 13.2 64bit

http://linuxcounter.net/cert/432576.png

Ritratto di doc_pluto
doc_pluto
(Guru)
Offline
Guru
Iscritto: 08/02/2007
Messaggi: 871

ottimo , fra l'altro era già installato, e ci sto giocherellando un pochino.

quello che non ho ancopra capito è come fare a far prendere a su - la password dalla finestrella che compare con:
zenity --entry --text="Enter Root's Password" --hide-text

esiste un'opzione tipo -pipelogin per su?

Hardware: MB:P5E3_Deluxe - CPU:Core2Duo E8400 3.0GHz - RAM:Kingstone_2Gb_DDR3 - Video:GeForce9600GT/PCI/SSE2 - HD: 2x WDCaviarBlue 1TB
--------------------------------
Software: SO:openSuSE 12.1 - ARCH:64bit - DE:Gnome3 - DriverVideo:Ufficiali Nvidia

Ritratto di aksaf
aksaf
(Guru)
Offline
Guru
Iscritto: 08/03/2011
Messaggi: 957

Cosa ne pensi di qualcosa del genere:

#!/bin/bash
 
nome_file=SENSORS_$(date +%s)
gnomesu -c "{ echo -e 'Temperatura Dischi:'; hddtemp /dev/sda; hddtemp /dev/sdb; echo -e '\nSituazione Scheda Madre:'; sensors | grep °C; } > /tmp/$nome_file"
zenity --text-info --width=660 --height=440 --title="Sensors" --filename=/tmp/$nome_file

?
verifica il tutto e in particolare che l'opzione di gnomesu sia corretta, dato che non ho GNOME (con openSUSE). Il comando eseguito da gnomesu è quello che hai indicato sopra, modificalo se necessario.

Ritratto di doc_pluto
doc_pluto
(Guru)
Offline
Guru
Iscritto: 08/02/2007
Messaggi: 871

ho cercato un po' in giro..

ho risolto così:

#!/bin/bash
 
#acquisisco password di root
PASSWORD=`zenity --entry --text="Enter Root's Password" --hide-text`
 
#inizializzo la variabile per il ciclo
risp='si';
while [ $risp = 'si' ]; do 
#lettura dei sensori e salvataggio su file.
echo -e "data della rilevazione >> $(date).\n\nTemperatura Dischi:" > $HOME/SENSORS.txt
echo $PASSWORD | sudo -S hddtemp /dev/sda >> $HOME/SENSORS.txt
echo $PASSWORD | sudo -S hddtemp /dev/sdb >> $HOME/SENSORS.txt
echo -e "\nSituazione Scheda Madre:" >> $HOME/SENSORS.txt
sensors | grep °C >> $HOME/SENSORS.txt
 
#finestra di testo con contenuto file.
	zenity --text-info --title="Termomether" --filename="$HOME/SENSORS.txt" --width=600 --height=350 --title="Temperature rilevate"
 
#rieseguire il rilievo?
	zenity --question --title="Termomether" --text="Ripetere il rilievo o chiudere?" --ok-label="Ripeti" --cancel-label="Chiudi"
	if [ $? = 0 ]; then risp='si'
		else risp='no'
	fi
done

edit:
gnomesu non riesco ad usarlo concatenando le due chiamate a hddtemp, o restituisce un errore o non dà output Plain Face
occorre inserirlo due volte (..e quindi ogni volta va inserita la password!)
sfruttando zenity, sudo -S, pipeline e concatenamenti, si riesce ad inserirla soltanto all'avvio.
inoltre è possibile eseguire anche lo script al di fuorio del terminale.
cmq, ho modificato un po' il codice prendendo spunto dal tuo post (aksaf)

#!/bin/bash
 
#acquisisco password di root
PASSWORD=`zenity --entry --text="Enter Root's Password" --hide-text`
 
#inizializzo le variabili per il ciclo
risp='si'
counter=0
 
#ciclo di lettura
while [ $risp = 'si' ]; do
	nome_file=$HOME/SENSORS_$(date +%y.%m.%d).txt #crezione nome file
	let 'counter += 1' #aggiorno contatore
	echo -e "Rilevazione num: $counter. Data: $(date +%y.%m.%d)_$(date +%H.%M).\nTemperatura Dischi:" >> $nome_file
	(echo $PASSWORD | sudo -S hddtemp /dev/sda && echo $PASSWORD | sudo -S hddtemp /dev/sdb) >> $nome_file
	echo "Situazione Scheda Madre:" >> $nome_file
	sensors | grep °C >> $nome_file
	echo " " >> $nome_file
 
#finestra di testo con contenuto file.
	zenity --text-info --title="Termomether" --filename="$nome_file" --width=600 --height=350 --title="Temperature rilevate"
 
#rieseguire il rilievo?
	zenity --question --title="Termomether" --text="Ripetere il rilievo o chiudere?" --ok-label="Ripeti" --cancel-label="Chiudi"
	if [ $? = 0 ]; then risp='si'
		else risp='no'
	fi
done

prossimo passo è eseguirlo ogni 15-30 minuti e far venir fuori un messaggio di errore se la T > Tcrit.

edit: ultima cosa poi vado a nanna. Plain Face
modificando il menù delle applicazioni è possibile inserire il collegamento allo script ed aggiungerlo ai preferiti.

Hardware: MB:P5E3_Deluxe - CPU:Core2Duo E8400 3.0GHz - RAM:Kingstone_2Gb_DDR3 - Video:GeForce9600GT/PCI/SSE2 - HD: 2x WDCaviarBlue 1TB
--------------------------------
Software: SO:openSuSE 12.1 - ARCH:64bit - DE:Gnome3 - DriverVideo:Ufficiali Nvidia

Ritratto di mauriziod
mauriziod
(Guru)
Offline
Guru
Iscritto: 01/06/2009
Messaggi: 1761

Scusa ma imparare il Tcl/Tk ??? È fatto apposta ed è facilissimo!

http://it.wikipedia.org/wiki/Tcl

Una miniguida
http://ninuzzo.freehostia.com/ant/it/tcl/index.html

SO: Linux desktop Sistema: OpenSUSE Leap 15.1 (64bit) KDEE 5.12
SO: Linux desktop Sistema: OpenSUSE Tumbleweed (64bit) KDE 5
Miao

Ritratto di wal7er
wal7er
(Guru)
Offline
Guru
Iscritto: 21/09/2007
Messaggi: 572

OT: Allora rilancio con il python (ci sono i binding delle librerie di kde e di gnome)! Smile

HP Pavilion dv5-1110el powered by OpenSUSE 13.2 64bit

http://linuxcounter.net/cert/432576.png

Ritratto di mauriziod
mauriziod
(Guru)
Offline
Guru
Iscritto: 01/06/2009
Messaggi: 1761

wal7er ha scritto:

OT: Allora rilancio con il python (ci sono i binding delle librerie di kde e di gnome)! Smile

OT: Potrei rilanciare con "C" che è il vero linguaggio UNIX/Linux o Java o altro ma Tcl (tk sono le librerie per la gui) è il più portato per quello che deve fare lui.

SO: Linux desktop Sistema: OpenSUSE Leap 15.1 (64bit) KDEE 5.12
SO: Linux desktop Sistema: OpenSUSE Tumbleweed (64bit) KDE 5
Miao