Ejecutar Comando Con Sudo Dentro De Gambas 3


Objetivo: Ejecutar Comando Con Sudo Dentro De Gambas 3
el codigo esta dentro de un botón toggle.
el codigo del final es para detener el proceso en especifico ya que pienso ejecutar hasta 4 veces el mismo comando, y para detenerlos individualmente quiero usar el comando de consola "sudo kill xxx" donde xxx es el numero del proceso.

la variable "contrasena" es una variable publica y contiene la contraseña de root.

por alguna razon el comando no se ejecuta ni me nuestra error en la consola de gambas.
el programa que estoy ejecutando es xboxdrv un driver user-space para los controles xbox360.

Public Sub btnActivar1_Click()

If btnActivar1.Value = True Then
killpad1 = Shell ("echo " & contrasena & " | sudo -S xboxdrv -d --silent --wid 0" & controltype1 & forcefeedbackpad1 & trigger1 & deadzone1) 'ejecuta el comando y a la vez lo amacena en una variable tipo process
Endif

If btnActivar1.Value = False Then
Shell ("echo ", contrasena, " | sudo -S kill ", killpad1.Handle] ' killpad1.handle devuelve el ID de proceso para poder matarlo
Endif
End

Perfil MP  
Objetivo: Re: Ejecutar Comando Con Sudo Dentro De Gambas 3
Supongo que el fallo lo tienes en los espacios inexistentes entre las variables dentro del comando shell:

Shell ("echo " & contrasena & " | sudo -S xboxdrv -d --silent --wid 0" & controltype1 & forcefeedbackpad1 & trigger1 & deadzone1)


Desconozco cuáles son los argumentos que pasas al programa xboxdrv, pero si haces esto verás a lo que me refiero:

print ("echo " & contrasena & " | sudo -S xboxdrv -d --silent --wid 0" & controltype1 & forcefeedbackpad1 & trigger1 & deadzone1)



controltype1 & forcefeedbackpad1 & trigger1 & deadzone1 te saldrán pegados uno al otro y a la cadena anterior que termina en 0.


Saludos

Perfil MP  
Objetivo: Re: Ejecutar Comando Con Sudo Dentro De Gambas 3
jguardon escribió: [Ver mensaje]
Supongo que el fallo lo tienes en los espacios inexistentes entre las variables dentro del comando shell:

Shell ("echo " & contrasena & " | sudo -S xboxdrv -d --silent --wid 0" & controltype1 & forcefeedbackpad1 & trigger1 & deadzone1)


Desconozco cuáles son los argumentos que pasas al programa xboxdrv, pero si haces esto verás a lo que me refiero:

print ("echo " & contrasena & " | sudo -S xboxdrv -d --silent --wid 0" & controltype1 & forcefeedbackpad1 & trigger1 & deadzone1)



controltype1 & forcefeedbackpad1 & trigger1 & deadzone1 te saldrán pegados uno al otro y a la cadena anterior que termina en 0.


Saludos

No hay problema en eso al asignar el valor a las variables ya llevan el espacio requerido.

aqui esta las asignaciones, como veras ahi van los espacios
If ffpad1.Value = True Then
forcefeedbackpad1 = " --force-feedback --rumble " & Slider_derecho_pad1.Value & "," & Slider_izquierdo_pad1.Value
Endif
If checkbox_DeadZone.Value = True Then
deadzone1 = " --ui-axismap " & "x1^dead:" & Slider_deadzoneLS_pad1.Value & "," & "y1^dead:" & Slider_deadzoneLS_pad1.Value & "," & "x2^dead:" & Slider_deadzoneRS_pad1.Value & "," & "y2^dead:" & Slider_deadzoneRS_pad1.Value
Endif
If checkbox_triggers_as_button.Value = True Then
trigger1 = " --trigger-as-button"
Endif

Select Case controltipo1.Index
Case 0
controltype1 = " --mimic-xpad-wireless"
Case 1
controltype1 = " --mimic-xpad"
End Select


pero esa linea de codigo funciona, la ultima que es para detener el proceso es la del problema.
*no se porque se duplico el post!! borren los por favor

Shell ("echo ", contrasena, " | sudo -S kill ", killpad1.Handle] ' killpad1.handle devuelve el ID de proceso para poder matarlo

este codigo deveria es como que escribiera en consola "sudo kill 12345" donde 12345 es el PID del proceso, fijate que si quito el espacio despues de "kill" la consola de gambas me devuelve
sudo: kill12046: command not found

es como que hubiera escrito en consola "sudo kill12046" en vez de "sudo kill 12046", pero si le doy ese espacio no hace nada, ni devuelve ningún mensaje la consola.

última edición por obedlink el Viernes, 11 Abril 2014, 17:00; editado 2 veces
Perfil MP  
Objetivo: Re: Ejecutar Comando Con Sudo Dentro De Gambas 3
Hola,
Shell ("echo ", contrasena, " | sudo -S kill ", killpad1.Handle]

1) ¿Por qué utilizas las paréntesis con Shell? No son necesarias.
2) ¿Por qué no utilizas sólo recursos de gambas para matar el proceso?
Yo escribiría de esta manera:
Public killpad1 As Process

Public Sub btnActivar1_Click()

If btnActivar1.Value = True Then
killpad1 = Shell "echo " & contrasena & " | sudo -S xboxdrv -d --silent --wid 0" & controltype1 & forcefeedbackpad1 & trigger1 & deadzone1
Else
killpad1.Kill
Endif

End

última edición por vuott el Viernes, 11 Abril 2014, 20:39; editado 2 veces
Perfil MP  
Objetivo: Re: Ejecutar Comando Con Sudo Dentro De Gambas 3
[quote user="vuott" post="21344"]Hola,
Shell ("echo ", contrasena, " | sudo -S kill ", killpad1.Handle]

1) ¿Por qué utilizas las paréntesis con Shell? No son necesarias.
Asi lo vi en un ejemplo, y tienes razón no son necesarias, pero tampoco dan error al usarlas, ya probé con y sin comillas es lo mismo.
2) ¿Por qué no utilizas sólo recursos de gambas para matar el proceso?
eso no lo sabia, lo intente pero no pasa nada, ni da mensaje de error, tal ves sea porque el comando anterior lo estoy ejecutando como sudo, entonces se necesita detenerlo como sudo.

alguna idea??

Perfil MP  
Objetivo: Re: Ejecutar Comando Con Sudo Dentro De Gambas 3
bueno creo haber encontrado el problema, ambos códigos funcionan pero este el problema:

el primer comando shell, abre 3 procesos, viendo el monitor del sistema a presionar el boton se abre:
sh
xboxdrv
sudo

el segundo shell deberia matar el proceso iniciado pero este solo mata sh y quedan activos xboxdrv y sudo.
usando "shell" se creen 3 procesos, pero usando "exec" solo se crea uno y funciona perfectamente, el problema es que no puedo ejecutar el comando e ingresar el password root.
esta es la forma que lo hago.
killpad1 = Exec ["echo", contrasena, "|", "sudo", "-S", "xboxdrv", "-d", "-s", "--wid", "0", controltype1, forcefeedbackpad1, trigger1, deadzone1]

la unica forma que funciona es quitando desde "echo" hasta "-S" quedando asi, pero de esta forma tengo que abrir la aplicación con "sudo ./aplicacion.gambas"
killpad1 = Exec ["xboxdrv", "-d", "-s", "--wid", "0", controltype1, forcefeedbackpad1, trigger1, deadzone1]


creo que ahora la pregunta seria como ejecutar un comando como root usando "exec"

Perfil MP  
Objetivo: Re: Ejecutar Comando Con Sudo Dentro De Gambas 3
Yo lo que hice en una aplicación que necesitaba permisos de root fue editar el *.desktop del instalador, para que la aplicación al abrirla la ejecutara con gksudo.
Aunque ejecutar una aplicación con permisos de super-user es potencialmente peligroso. Debes estar totalmente seguro de tu código.

La aplicación que te comento es VPNBook-gb
Y para editar el *.deb puede que te sirva ver: http://libertadhack.blogspot.mx/201...deb-gambas.html

Saludos!

Objetivo: Re: Ejecutar Comando Con Sudo Dentro De Gambas 3
casualmente encontre esto http://gambasdoc.org/help/comp/gb.d...runasroot?es&v3

Desktop.RunAsRoot("comando")

última edición por codificador el Domingo, 13 Abril 2014, 02:50; editado 1 vez
Perfil MP  
Objetivo: Re: Ejecutar Comando Con Sudo Dentro De Gambas 3
codificador escribió: [Ver mensaje]
Desktop.RunAsRoot("comando")

Esta de codificador es una gran sugerencia !
Sólo querria añadir que para usar Desktop.RunAsRoot(), es necesario activar el componente gb.desktop y tener instalado en el sistema el programa "xterm".

Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.4203s (PHP: -69% SQL: 169%)
Consultas SQL: 47 - Debug off - GZIP Activado