Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 3
Ir a la página 1, 2, 3  Siguiente
 
Dudas Al Hacer Un Programa
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Dudas Al Hacer Un Programa 
 
Estoy haciendo un programa de linux para no olvidar el pendrive. El programa consiste en un formulario, 2 Timer, un Button, y 2 Label.
Quiero que funcione de manera que, cuando iniciemos el apagado del equipo, este lo detenga y nos muestre una ventana avisandonos de que retiremos nuestro pendrive y que tenga un boton para desmontarlo y una cuenta atras, tras la cual se reanude el apagado

Para hacer esto, el programa ira enviado la orden runlevel a la terminal y analizando su respuesta. Cuando el comando responda que el runlevel es 0; detendra el apagado, activara el formulario (inicialmente desactivado), e iniciara la cuenta atras mediante un label que cada segundo retrocedera un numero.
Cuando el label muestre el numero 0, se reanudara el apagado mediante el comando poweroff

Pero esto me plantea varias dudas:
- La primera es que no se como hacer que el programa responda a una respuesta del comando runlevel
- La segunda es que no se que orden debo darle al boton para que extraiga cualquier pendrive, sea cual sea su nombre (recuerden que el comando umount exige el nombre exacto de la unidad)
- La tercera es que, al hacer el programa, estoy viendo que voy a tener que ejecutarlo como superusuario, y no se como hacer eso
- Y la cuarta es, que una vez terminado el programa, no se como crear el ejecutable para que pueda iniciarse en cualquier linux

Mi distro es Ubuntu 10.04
Agradezco cualquier ayuda
 



 
AGarcia - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dudas Al Hacer Un Programa 
 
AGarcia:
 A ver en lo que te puedo ayudar....
Citar:
- La primera es que no se como hacer que el programa responda a una respuesta del comando runlevel

No se lo que es eso...     , si me lo explicas a lo mejor te puedo decir algo...

Citar:
- La segunda es que no se que orden debo darle al boton para que extraiga cualquier pendrive, sea cual sea su nombre (recuerden que el comando umount exige el nombre exacto de la unidad)

Tendras que leer el nombre de la unidad, por ejemplo ejecutar el comando "ls /media/* >texto.txt" (te pongo el directorio /media pero no se donde estan las unidades de usb, pueden que esten en otra carpeta...), con esto ">texto.txt", tienes un fichero con todos los nombres de las unidades con lo cual podras ver las que tengas conectadas.
Citar:

- La tercera es que, al hacer el programa, estoy viendo que voy a tener que ejecutarlo como superusuario, y no se como hacer eso

Facil: "sudo gambas2"
y ya estas como superusuario, para mientas que estas escribiendo y probando el programa no te de problemas.

Citar:
- Y la cuarta es, que una vez terminado el programa, no se como crear el ejecutable para que pueda iniciarse en cualquier linux

No crearas un ejecutable, crearas un paquete de instalación.

menu Proyecto/Crear/Paquete de instalacion/ y alli eligiras las distintas versiones de linux para crear sus paquetes correspondientes...

Espero haberte ayudado, aunque sea solo un poco....

Saludos.
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dudas Al Hacer Un Programa 
 
Citar:
    Citar:
    - La primera es que no se como hacer que el programa responda a una respuesta del comando runlevel


No se lo que es eso... , si me lo explicas a lo mejor te puedo decir algo...



en linux, cuando escribes el comando runlevel en una terminal, el comando emite una respuesta de texto.
Lo que quiero hacer es que el programa vaya enviando periodicamente el comando runlevel mediante la orden Shell ("runlevel") y que, en caso de que este comando emita una determinada respuesta, el programa actue de X manera
 



 
AGarcia - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dudas Al Hacer Un Programa 
 
Hola

Eso que preguntas tiene mas miga de lo que parece.
El primer problema que tienes es encontrar la lista de usb montados y eso con gambas o sin gambas tiene su aquel.

Mirando en la tabla mtab puedes ver los volúmenes que tienes montados.

Cruzando eso con el resultado de lsusb puedes obtener la lista de los usb que tienes montados. También puedes consultar udevadm o /sys/block porque necesitarás el vendor o bien el bus.

No es un problema específico de gambas. Es que obtener esa información en linux requiere cruzar varios archivos con un poco de cuidado. Tiempo atrás hubo otro usuario que anduvo en un problema parecido.

Hubo algunos errores y pruebas pero al final consiguió lo que buscaba que era algo parecido. Mira a ver si algo de esto te vale

http://foro.gambas-es.org/viewtopic...ht=mtab&start=0

No se si era lo mismo pero si recuerdo que hice una rutina que buscaba todos los usb y los metía en un trieeview. Seguramente a partir de eso podrás hacer lo que buscas porque una vez localizado el dispositivo y viendo su punto de montaje en mtab solo tienes que hacer el umount.

Mira bien porque la rutina esa que hice a veces funcionaba y a veces no así que hay dos intentos hasta que al meterle un wait al lsusb sale correctamente.

Un saludo
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dudas Al Hacer Un Programa 
 
Hola

Para leer la salida del comando runlevel, usa

PUBLIC SUB Timer1_Timer()
DIM estado AS String
SHELL "runlevel" TO estado

IF estado = "N 0" THEN
    SHELL "shutdown -c"
    Timer1.Stop
    'resto de código
ENDIF
END


El código deberá colocarse en el evento _Timer() de un Timer, pongamos que con un delay de 100 ms.
'estado' contendrá el runlevel actual y cuando coincida con "N 0" (que es justo cuando comienza el apagado), lo abortamos con la orden SHELL "shutdown -c"

Pero el inconveniente es que dicha orden de shell necesita privilegios de root, así que hay que pedir antes la contraseña y pasársela como parámetro al comando shell el cual deberá ser entonces un script como éste: (archivo ejecutable)

#!/bin/bash
echo $1 | sudo -S shutdown -c


De manera que la línea de gambas SHELL quedaría así:

SHELL "/ruta/a/miscript.sh " & password


teniendo que la variable password  es la contraseña root que de alguna manera tendrías que proveer.

No es sencillo, además el programa gambas tendría que cargarse al inicio de la sesión de usuario y quedar en ejecución al estilo de cualquier daemon.

Espero haberte dado las pistas necesarias para el desarrollo de tu aplicación.

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: Dudas Al Hacer Un Programa 
 
soplo, He pensado que podría hacerlo usando la orden ls de esta manera

DIM pendrive AS String
SHELL "ls /media" TO pendrive
SHELL "umount /media/ []"

Entre corchetes pondria el contenido del "ls /media" almacenado en el valor pendrive
Pero, ¿como lo tendría que hacer para copiarlo en la orden SHELL antes mencionada?

(No me importa que se desmonten todos los dispositivos usb puesto que, al fin y al cabo, voy a apagar el ordenador)
 



 
última edición por AGarcia el Viernes, 14 Enero 2011, 23:50; editado 1 vez 
AGarcia - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dudas Al Hacer Un Programa 
 
Hola

Tu problema es mas bien de una shell script que otra cosa. Algo como esto.

ls -lr /media >dd

while read linea
do
#       echo -e $linea | cut -f9 -d" "
        volumen=$(echo "$linea"  |cut -f9 -d" ")
        echo -e $volumen
        trayecto=$("/media/"$volumen)
#       echo -e -$trayecto
        umount $trayecto
done <dd
rm dd
 

Eso teóricamente crea un fichero dd con el contenido de /media luego recorre linea a linea y extrae el nombre del volumen de cada linea. Anexa "media/a ese nombre y lo guarda en un string. Luego desmonta ese string.

No funciona.

He comentado la linea del primer echo porque eso si funciona pero la variable volumen no se calcula bien. Es tarde, mañana miraré que le pasa. Cuando el string volumen se calcule bien con que en gambas llames a ese script ya estará porque esa shell script recorre el contenido de /media y lo desmonta todo.

Eso no quita que si un dispositivo estaba busy no lo desmonte. Supongo que entiendes el riesgo de hacer eso con dispositivos usb.

La otra cosa que puedes hacer tal como hiciste es meter el contenido del ls -lr /media en una variable gambas y recorrerla linea a linea para obtener cada nombre. A cada uno le haces un shell("umount /media/" & varstr) y ya está. Así haces lo que haría la shell script pero en gambas.

Mañana lo miro mejor.
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dudas Al Hacer Un Programa 
 
soplo escribió: [Ver mensaje]
Hola

Tu problema es mas bien de una shell script que otra cosa. Algo como esto.

ls -lr /media >dd

while read linea
do
#       echo -e $linea | cut -f9 -d" "
        volumen=$(echo "$linea"  |cut -f9 -d" ")
        echo -e $volumen
        trayecto=$("/media/"$volumen)
#       echo -e -$trayecto
        umount $trayecto
done <dd
rm dd
 

Eso teóricamente crea un fichero dd con el contenido de /media luego recorre linea a linea y extrae el nombre del volumen de cada linea. Anexa "media/a ese nombre y lo guarda en un string. Luego desmonta ese string.

No funciona.

He comentado la linea del primer echo porque eso si funciona pero la variable volumen no se calcula bien. Es tarde, mañana miraré que le pasa. Cuando el string volumen se calcule bien con que en gambas llames a ese script ya estará porque esa shell script recorre el contenido de /media y lo desmonta todo.

Eso no quita que si un dispositivo estaba busy no lo desmonte. Supongo que entiendes el riesgo de hacer eso con dispositivos usb.

La otra cosa que puedes hacer tal como hiciste es meter el contenido del ls -lr /media en una variable gambas y recorrerla linea a linea para obtener cada nombre. A cada uno le haces un shell("umount /media/" & varstr) y ya está. Así haces lo que haría la shell script pero en gambas.

Mañana lo miro mejor.


Otra manera de hacerlo seria añadir otro formulario en el cual le preguntara al usuario el nombre del pendrive, y copiar el nombre en la orden umount del anterior formulario.
Pero, de nuevo, no se como copiar el contenido el textbox del segundo formulario a la orden umount del principal
 



 
última edición por AGarcia el Sabado, 15 Enero 2011, 20:17; editado 1 vez 
AGarcia - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dudas Al Hacer Un Programa 
 
Para pasar información de un formulario a otro, se puede hacer de 3 formas:

1) Usar variable global. no es aconsejable su uso de manera "indiscriminada"   :
http://jsbsan.wordpress.com/2009/11...cion-y-ejemplo/

2 y 3) Usarlo mediante el método de propiedades (crearte propiedades) o creando una instancia:
http://jsbsan.wordpress.com/2010/11...orm-desde-otro/

Saludos..
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Dudas Al Hacer Un Programa 
 
jsbsan escribió: [Ver mensaje]
Para pasar información de un formulario a otro, se puede hacer de 3 formas:

1) Usar variable global. no es aconsejable su uso de manera "indiscriminada"   :
http://jsbsan.wordpress.com/2009/11...cion-y-ejemplo/

2 y 3) Usarlo mediante el método de propiedades (crearte propiedades) o creando una instancia:
http://jsbsan.wordpress.com/2010/11...orm-desde-otro/

Saludos..


Gracias, resulta que al final tenia marcados los componentes como públicos, por lo que he creado una variable que contiene el texto del textbox del form2 y he añadido esta variable a la orden umount del form1
 



 
AGarcia - 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 Sugerencia: Nueva Sección: Quiero Hacer U... jsbsan Sobre Gambas-es 6 Lunes, 25 Octobre 2010, 09:11 Ver último mensaje
Capa
No hay nuevos mensajes Hacer Un Programa Gambas Ejecutable En Cua... yeily General 1 Lunes, 28 May 2012, 22:57 Ver último mensaje
jguardon
No hay nuevos mensajes Duda Sobre Hacer Un Ejecutable Completo De... rocky2007 General 9 Domingo, 13 Abril 2014, 18:16 Ver último mensaje
jguardon
No hay nuevos mensajes Seria Posible Hacer Un Programa Que Leera ... portaro General 6 Lunes, 20 Abril 2020, 15:44 Ver último mensaje
tincho
 

Publicar nuevo tema  Responder al tema  Página 1 de 3
Ir a la página 1, 2, 3  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