Differenze tra le versioni di "Inserire le password per lanciare comandi"
Riga 35: | Riga 35: | ||
Print s | Print s | ||
+ | '''End''' | ||
+ | |||
+ | |||
+ | |||
+ | ==Uso di ''gksu''== | ||
+ | Si potrà utilizzare semplicemente il comando ''gksu'' lanciato con ''Shell''. Nel primo spazio presente nella finestra, che sarà mostrata, si dovrà inserire l'intera riga di comando che si intende lanciare come ''root''. | ||
+ | '''Public''' Sub Button1_Click() | ||
+ | |||
+ | Shell "gksu" | ||
+ | |||
'''End''' | '''End''' | ||
Versione delle 15:30, 22 set 2012
A volte può capitare che per poter utilizzare alcuni comandi, sia necessario inserire la propria parola-chiave di root.
A seconda delle circostanze vi sono alcune modilità:
Indice
Far aprire un terminale per inserire la propria password
La seguente riga di comando farà aprire una finestra di Terminale, nella quale si potrà inserire la propria parola-chiave:
Public Sub Button1_Click() Shell "/usr/bin/x-terminal-emulator -e su -c \"comando_da_lanciare\" \"$user\"" End
Il risultato del comando però si svolgerà tutto all'interno della finestra del terminale. Altrimenti potremo deviare il flusso di dati verso un qualsiasi file d'appoggio:
Shell "/usr/bin/x-terminal-emulator -e su -c \"comando_da_lanciare > percorso_file_d'appoggio\" \"$user\""
e raccogliere successivamente i dati salvati nel file d'appoggio:
Private c As File Public Sub Form_Open() c = Open "/tmp/c" For Read Watch Shell "/usr/bin/x-terminal-emulator -e su -c \"comando_da_lanciare > percorso_file_d'appoggio\" \"$user\"" End Public Sub File_Read() Dim s As String s = File.Load("percorso_file_d'appoggio") Print s End
Uso di gksu
Si potrà utilizzare semplicemente il comando gksu lanciato con Shell. Nel primo spazio presente nella finestra, che sarà mostrata, si dovrà inserire l'intera riga di comando che si intende lanciare come root.
Public Sub Button1_Click() Shell "gksu" End
Dare una volta sola la password di root per aprire un file protetto
Per far immettere la propria password di root, con Exec o Shell si utilizza il comando gksu (o gksudo):
Exec ["gksu", "file_ad_accesso_protetto"]
che fa aprire un'apposita finestra. Diventa, però, alquanto noioso e sgradevole dover inserire ogni volta la password, se dobbiamo o vogliamo lanciare il nostro applicativo più volte - magari per provarlo e testarlo - nella medesima sessione di sistema.
Si può ovviare a questo fastidio, utilizzando il comando chmod una volta sola per impostare il setUID. Tale comando consentirà con effetto temporaneo, limitato alla sola attuale sessione di sistema, che tutti possano eseguire tranquillamente un programma o accedere ad un file che richiede i permessi di root. In sostanza, la password verrà sì inserita, ma 1 volta soltanto !
Se il comando che dobbiamo lanciare prevede delle opzioni indicate con il segno – (come ad esempio: wmctrl -l -p) il comando da eseguire dovrà inserito tra degli apici semplici es:
gksu 'wmctrl -l -p'
Vediamo di seguito un paio di esempi con l'intento di ottenere libero accedesso ai file-device.
Uso di Process
Private flPro As Process
Public Sub Form_Open()
' Riconosce se il programma è stato già lanciato nell'attuale sessione di sistema operativo.
' Se non è stato lanciato almeno una volta, fa inserire la password di root
' per impostare il setUID e consentire l'apertura del file protetto:
If Not Exist("/tmp/chmod.txt") Then
Exec ["gksu", "chmod 4777", "percorso_del_file-device"] Wait
File.Save("/tmp/chmod.txt", "c'è")
Endif
' Va a gestire il file-device:
flPro = Exec ["cat", "percorso_del_file-device"] For Read As "flPro"
End
Public Sub flPro_Read()
Dim b As Byte
' legge i dati provenienti dal file-device del mouse...
Read #flPro, b
' ...e li mostra in console:
Print b
End
Uso di Open.... For
Private fl As File Public Sub Form_Open() ' Riconosce se il programma è stato già lanciato nell'attuale ' sessione di sistema operativo. *Se non* è stato lanciato almeno ' una volta, fa inserire la password di root per impostare il setUID ' e consentire l'apertura del file protetto: If Not Exist("/tmp/chmod.txt") Then Exec ["gksu", "chmod 4777", "percorso_del_file-device"] Wait File.Save("/tmp/chmod.txt", "c'è") Endif ' va a gestire il file-device: fl = Open "percorso_del_file-device" For Read Watch End Public Sub File_Read() Dim b As Byte ' legge i dati provenienti dal file-device della porta... Read #fl, b ' ...e li mostra in console: Print b End