|
Página 1 de 1
|
Ejecutar Comando Con Sudo Dentro De Gambas 3
Autor |
Mensaje |
obedlink
Usuario
Registrado: Marzo 2013
Mensajes: 13
Edad: 38
|
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
|
#1 Viernes, 11 Abril 2014, 15:56 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
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
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#2 Viernes, 11 Abril 2014, 16:28 |
|
|
obedlink
Usuario
Registrado: Marzo 2013
Mensajes: 13
Edad: 38
|
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
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
|
#3 Viernes, 11 Abril 2014, 16:49 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
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:
última edición por vuott el Viernes, 11 Abril 2014, 20:39; editado 2 veces
|
#4 Viernes, 11 Abril 2014, 20:19 |
|
|
obedlink
Usuario
Registrado: Marzo 2013
Mensajes: 13
Edad: 38
|
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??
|
#5 Sabado, 12 Abril 2014, 00:08 |
|
|
obedlink
Usuario
Registrado: Marzo 2013
Mensajes: 13
Edad: 38
|
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"
|
#6 Sabado, 12 Abril 2014, 06:28 |
|
|
razaAztk
aztk crux
Analista Programador
Registrado: Enero 2010
Mensajes: 340
Edad: 35 Ubicación: Tenochtitlan
|
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!
|
#7 Sabado, 12 Abril 2014, 22:00 |
|
|
codificador
Analista Programador
Registrado: Junio 2010
Mensajes: 420
Edad: 114 Ubicación:
|
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
|
#8 Domingo, 13 Abril 2014, 02:49 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Ejecutar Comando Con Sudo Dentro De Gambas 3
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".
|
#9 Domingo, 13 Abril 2014, 15:26 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|