ho questo in c++
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
system("sudo ./arduino/arduino");
}
in gambas l'ho trasmutato con
Public Sub Main()
Desktop.RunAsRoot("sudo ./arduino/arduino")
End
ma in c++ la finestra di xterm rimane aperta permettendo l'esecuzione di arduino mentre in gambas si chiude immediatamente...
:-\
il codice serve per lanciare arduino (Script shell (application/x-shellscript))
e farlo con gambas è comodo perchè si possono fare gli eseguibili
Vedi se così va meglio:
Shell "echo mia_password | sudo -S ./arduino/arduino"
Se l'applicativo Gambas è a riga di comando, allora crea l'eseguibile senza quell'opzione che ti avevo indicato precedentemente, e lancialo da Terminale.
Desktop.RunAsRoot("sudo ./arduino/arduino &")
o
Desktop.RunAsRoot("sudo ./arduino/arduino; bash")
Desktop.RunAsRoot("sudo ./arduino/arduino &")
Ho usato un altro comando anziché "./arduino/arduino".
La prima soluzione proposta da ceskho a me non risolve il problema posto da simo97.
Desktop.RunAsRoot("sudo ./arduino/arduino; bash")
Quest'altra soluzione sembrerebbe andare bene, ma in xterm ottengo questo avviso:
bash: cannot set terminal process group (18655): Inappropriate ioctl for device
bash: no job control in this shell
Vediamo se funziona questa soluzione (ancora a riga di comando. Va nuovamente attivata l'opzione: "Use a terminal emulator"):
Public Sub Main()
Print "\n'i' + [Invio] per ottenere informazioni"
End
''Questo è un gestore di eventi. lo STDIN è rediretto qui
Public Sub Application_Read()
Dim s As String
Line Input #File.In, s
If s = "i" Then
Print "Come si usa:\n- 'i'+[Invio] per queste informazioni;"
Print "- 'vai' per lanciare"
Print "- 'quit' per chiudere."
Else
If s = "vai" Then
Shell "echo mia_password | sudo -s ./arduino/arduino"
Endif
If s = "quit" Then
Print "\e[1;31mChiusura fra \e[1;33m2\e[1;31m secondi !"
Sleep 2
Quit
Endif
Endif
End
Un'altra modalità, per conservare l'automaticità dell'avvio di Arduino all'interno di un Terminale che non si chiuda dopo, potrebbe essere la seguente. E' necessario attivare i componenti gb.desktop e gb.desktop.x11.
Public Sub Button1_Click()
' Apro la finestra di un Terminale:
Desktop.OpenTerminal
End
Public Sub Button2_Click()
Dim c As Integer[]
' Trova l'identificativo della finestra del Terminale aperta prima:
c = Desktop.FindWindow("Terminal")
If c.Count > 0 Then
' Attribuisce il "Focus" alla finestra del Terminale:
Desktop.ActiveWindow = c[c.Max]
Desktop.SendKeys("echo mia_password | sudo -s .arduino/arduino\n") ' oppure la riga di comando proposta sopra da "kicco", purché alla fine ci sia l'escape: \n
Endif
End
ho questo in c++
Volendo, ovviamente, potresti anche utilizzare direttamente la funzione "system( )" con Extern:
' int system (const char *__command)
' Execute the given line as a shell command.
Private Extern system(__command As String) As Integer in "libc:6"
Public Sub Button1_Click()
system("sudo ./arduino/arduino")
End