|
Página 1 de 2
|
Desktop.OpenTerminal Con Un Comando [Solucionado]
Autor |
Mensaje |
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
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
|
#1 Miercoles, 02 Noviembre 2016, 12:13 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
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
|
#2 Miercoles, 02 Noviembre 2016, 17:39 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Desktop.OpenTerminal Con Un Comando
..... 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
|
#3 Sabado, 05 Noviembre 2016, 04:22 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Desktop.OpenTerminal Con Un Comando
..... 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
|
#4 Sabado, 05 Noviembre 2016, 07:08 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
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
|
#5 Sabado, 05 Noviembre 2016, 14:28 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
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
|
#6 Sabado, 05 Noviembre 2016, 17:54 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: Desktop.OpenTerminal Con Un Comando
Bueno gracias a los dos.
La cosa ha quedado solucionada así:
Gracias.
|
#7 Sabado, 05 Noviembre 2016, 18:52 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Desktop.OpenTerminal Con Un Comando
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 !
La cosa ha quedado solucionada así:
...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
|
#8 Sabado, 05 Noviembre 2016, 19:17 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: Desktop.OpenTerminal Con Un Comando
...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.
|
#9 Sabado, 05 Noviembre 2016, 23:09 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Desktop.OpenTerminal Con Un Comando
...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
|
#10 Domingo, 06 Noviembre 2016, 01:08 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 2
|
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
|
|
|
|
|