Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Ejecutar Comando Con Sudo Dentro De Gambas 3
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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

 



 
obedlink - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
obedlink - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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??
 



 
obedlink - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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"
 



 
obedlink - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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!
 



 
razaAztk - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuarioVer la galería personal del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
codificador - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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".
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Ejecutar Sudo techm3 General 5 Jueves, 08 Abril 2010, 02:32 Ver último mensaje
Invitado
No hay nuevos mensajes Ejecutar Comando Con Una Lista De Archivos... Shell Shell Scripting 3 Sabado, 02 Febrero 2013, 09:54 Ver último mensaje
Shell
No hay nuevos mensajes Simón Dice: Sudo Sin Clave Desde Un Progr... shordi Aplicaciones/Fragmentos de Código 5 Miercoles, 18 Septiembre 2019, 17:37 Ver último mensaje
gambafeliz
No hay nuevos mensajes Se Puede Ejecutar Codigo Que Esta Dentro D... tercoIDE General 23 Viernes, 29 May 2020, 22:07 Ver último mensaje
tercoIDE
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron