Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
Desktop.OpenTerminal Con Un Comando [Solucionado]
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Desktop.OpenTerminal Con Un Comando [Solucionado] 
 
Hola existe alguna forma de pasarle el parámetro de un texto que se escriba en la terminal nueva que se abre con el comando de gambas "Desktop.OpenTerminal"
Por ejemplo para apretar un botón, que se abra la terminal y escriba "sudo apt-get install unpaquete" para que el usuario no tenga que escribirlo, solo decidir si lo instala o no, ya que le deberá dar el password de root o administrador en este caso del ejemplo.

Saludos.
 



 
última edición por tincho el Sabado, 05 Noviembre 2016, 18:53; editado 1 vez 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Desktop.OpenTerminal Con Un Comando 
 
Desktop,Open es para aplicaciones gráficas, más bien, no para comandos.
Hay varias maneras de hacer eso con comandos. Una muy simple:
dim laclave as string

laclave=inputbox("Teclea tu clave para instalar:","Autorización requerida")
shell "echo " & laclave & "| sudo -S apt-get install el_paquete_que_sea.deb"

Si no quieres que la clave se vea, sustituye el inputbox por un formulario con un campo password.

Saludos.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Desktop.OpenTerminal Con Un Comando 
 
tincho escribió: [Ver mensaje]
..... que se abra la terminal y escriba "sudo apt-get install unpaquete" para que el usuario no tenga que escribirlo, solo decidir si lo instala o no, ya que le deberá dar el password de root o administrador...


Quizás este código:

Private b As Byte

Public Sub Form_Open()

' Nos enteramos del numero de los file-device pseudoterminales en la carpeta "/dev/pts":
  b = Dir("/dev/pts", "*", gb.Device).Count

End


Public Sub Button1_Click()

  Desktop.OpenTerminal

' La apertura del Terminal determina la creación de un otro nuevo file-device "pts".
' Esperamos hasta su creación, porqué nuevo archivo "pts" = nuevo Terminal abierto !
  Do
    Sleep 0.01
  Loop Until Dir("/dev/pts", "*", gb.Device).Count > b

' Una vez que el Terminal está abierto, le enviamos la línea de comando:
  Desktop.SendKeys("sudo apt-get install unpaquete")

End

 



 
última edición por vuott el Sabado, 05 Noviembre 2016, 04:39; editado 1 vez 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Desktop.OpenTerminal Con Un Comando 
 
vuott escribió: [Ver mensaje]
tincho escribió: [Ver mensaje]
..... que se abra la terminal y escriba "sudo apt-get install unpaquete" para que el usuario no tenga que escribirlo, solo decidir si lo instala o no, ya que le deberá dar el password de root o administrador...


Quizás este código:

Private b As Byte

Public Sub Form_Open()

' Nos enteramos del numero de los file-device pseudoterminales en la carpeta "/dev/pts":
  b = Dir("/dev/pts", "*", gb.Device).Count

End


Public Sub Button1_Click()

  Desktop.OpenTerminal

' La apertura del Terminal determina la creación de un otro nuevo file-device "pts".
' Esperamos hasta su creación, porqué nuevo archivo "pts" = nuevo Terminal abierto !
  Do
    Sleep 0.01
  Loop Until Dir("/dev/pts", "*", gb.Device).Count > b

' Una vez que el Terminal está abierto, le enviamos la línea de comando:
  Desktop.SendKeys("sudo apt-get install unpaquete")

End

Imaginativo es, de eso no hay duda, ahora enrevesado, lo que se dice enrevesado... pues también. Muy bueno para una "Tormenta de Ideas"     
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Desktop.OpenTerminal Con Un Comando 
 
No entiendo bien.    

A ti no funciona ?
 



 
última edición por vuott el Sabado, 05 Noviembre 2016, 14:45; editado 1 vez 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Desktop.OpenTerminal Con Un Comando 
 
Quiero decir que es muy enrevesado. Es mucho más simple algo así:

Shell "gnome-terminal -x sudo apt-get update "


pero que también es muy imaginativo...
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Desktop.OpenTerminal Con Un Comando 
 
Bueno gracias a los dos.
La cosa ha quedado solucionada así:
Desktop.OpenTerminal
  Wait 0.25
Desktop.SendKeys("sudo apt-get install unpaquete")
 


Gracias.
 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Desktop.OpenTerminal Con Un Comando 
 
shordi escribió: [Ver mensaje]
Quiero decir que es muy enrevesado.

pero que también es muy imaginativo...

Enrevesado ? Imaginativo ?    
Es una manera - en puro lenguaje gambas y sin usar Shell - cierta y segura para saber si el Terminal se ha... abierto !    sexy-blonde-kiss-smiley-emoticon



tincho escribió: [Ver mensaje]
La cosa ha quedado solucionada así:
  Wait 0.25
 

...y si el computer por una razón u otra no puede abrir adecuadamente y completamente el Terminal, dandole el focus, en 0.25 segundos ?    
 



 
última edición por vuott el Sabado, 05 Noviembre 2016, 19:31; editado 3 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Desktop.OpenTerminal Con Un Comando 
 
vuott escribió: [Ver mensaje]
...y si el computer por una razón u otra no puede abrir adecuadamente y completamente el Terminal, dandole el focus, en 0.25 segundos ?    

Si, tiene toda la razón. el tuyo es el método mas certero. cero que haré una función con ese código y la agregare a la lista de funciones utilitarias que uso habitualmente.
De todas manearas este hilo me sirvió para aprender el uso de sendkeys. muy interesante.

Saludos.
 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Desktop.OpenTerminal Con Un Comando 
 
tincho escribió: [Ver mensaje]
...este hilo me sirvió para aprender el uso de sendkeys.

Muy bien, tincho !


....de verdad yo tengo un arma secreta    para enviar un comando tambien sin el método .sendkeys( ).
Se usan las funciones externas del sistema grafico X11.

Voy a mostrar la arma.    
Es un simple y didactico ejemplo, por eso tenemos que abrir manualmente un Terminal. Después de iniciar el programa, tenemos que dar el "focus" a el Terminal.
Enviaremos al Terminal el comando bash " ls ", y podremos utilizarlo:
Library "libX11:6.3.0"

Private Const XK_l As Integer = &6C
Private Const XK_s As Integer = &73

' Display *XOpenDisplay(char *display_name)
' Opens a connection to the X server that controls a display.
Private Extern XOpenDisplay(display_name As String) As Pointer

' KeyCode XKeysymToKeycode(Display *display, KeySym keysym)
' Uses internal Xlib tables and returns the KeyCode defined for the specified KeySym.
Private Extern XKeysymToKeycode(display As Pointer, keysym As Integer) As Integer

' int XCloseDisplay(Display *display)
' Closes the connection to the X server for the display specified in the Display structure and destroys all windows.
Private Extern XCloseDisplay(display As Pointer) As Integer


Library "libXtst:6.1.0"

' int XTestFakeKeyEvent(Display *display, unsigned int keycode, Bool is_press, unsigned long delay)
' Requests the server to simulate either a KeyPress (if is_press is True) or a KeyRelease of the key with the specified keycode.
Private Extern XTestFakeKeyEvent(display As Pointer, keycode As Integer, is_press As Boolean, delay As Long) As Integer

' XSync(Display *display, Bool discard)
' flushes the output buffer.
Private Extern XSync(display As Pointer, discard As Boolean)


Public Sub Main()

 Dim disp As Pointer

' Tenemos 3 segundos para dar el "focus" manualmente al Terminal:
  Wait 3

' Conexión al server X y configuración de default:
  disp = XOpenDisplay(Null)
  
  InviaCarattere(disp, XK_l)
  InviaCarattere(disp, XK_s)

' Cerra la libreria:
  XCloseDisplay(disp)

End


Private Procedure InviaCarattere(ds As Pointer, keysym As Integer)
  
  Dim keycode As Integer
  
    keycode = XKeysymToKeycode(ds, keysym)
  
    If keycode = 0 Then Return
  
' Generate regular key press and release:
    XTestFakeKeyEvent(ds, keycode, True, 0)
    XTestFakeKeyEvent(ds, keycode, False, 0)

    XSync(ds, False)
  
End

 



 
última edición por vuott el Domingo, 06 Noviembre 2016, 02:07; editado 7 veces 
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 Comando Con Una Lista De Archivos... Shell Shell Scripting 3 Sabado, 02 Febrero 2013, 09:54 Ver último mensaje
Shell
No hay nuevos mensajes Comando PV: Mostrar Información De Como V... jsbsan Shell Scripting 1 Sabado, 06 Julio 2013, 16:44 Ver último mensaje
shordi
No hay nuevos mensajes Desktop Innova hertux General 2 Miercoles, 20 May 2015, 21:40 Ver último mensaje
shordi
No hay nuevos mensajes Duda Con Wttr.in En Comando Terminal Y Ese... portaro Shell Scripting 7 Domingo, 05 Enero 2020, 18:20 Ver último mensaje
portaro
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

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