"our dreams of freedom have changed the world everybody lives in"
10 dic. 2006

Ejecutar un script interactivo *justo antes* de apagar KDE

02-06-2009 ACTUALIZACIÓN: Si estás utilizando KDE4 lo que sigue no te funcionará, puedes leerlo para tener una idea del objetivo perseguido, y a continuación pulsa aquí, encontrarás lo mismo explicado para KDE4. ¡Disfrútalo!

Fin de la actualización.

A continuación comparto, a modo de guía, la solución a este problema.

Y digo problema porque, aunque en un principio creí que iba a ser más fácil, al final me ha costado bastante. Si buscáis en google os daréis cuenta de lo poco documentadas que están este tipo de cosas. No obstante, gracias a la flexibilidad y al estar al descubierto los entresijos del software libre, uno acaba consiguiéndolo :-).

Utilidad: realizar una copia de seguridad de los contenidos que estimo valiosos siempre antes de apagar el ordenador (otro día hablaremos más de esto).

Objetivo: ejecutar un shell script (que en mi caso es el que realiza la copia de seguridad) justo antes de apagar el ordenador.

Restricciones: 1.- Trabajamos con el entorno KDE. 2.- Hemos de ser capaces de apagar el ordenador de forma ordenada, es decir, conservando datos entre sesiones, sin "destrozar" la forma en la que lo hace KDE. 3.- Hemos de evitar la existencia de varias opciones de "salida", obligando al usuario a ejecutar sólo una que colocaremos en un lugar fácilmente accesible (previa a esta, y de forma transparente para el usuario, se ejecutará el script). 4.- El script es interactivo: solicita una contraseña (para cifrar las comunicaciones) al usuario, cuando ésta ha sido introducida el script continúa con su trabajo… Y justo cuando finaliza se procede a apagar el sistema de forma ordenada.

Solución: Tras investigar durante algunas horas entre foros y listas de correo, he conseguido construir justo la solución que estaba buscando:

1.- He suprimido la opción "Terminar…" del menú K. Lo he hecho con la herramienta kiosktool, que permite crear diferentes perfiles de usuarios y configurar en estos las acciones permitidas/prohibidas de los mismos (útil para la administración de cibercafés, etc.). La herramienta trae un perfil: "default", que es asociado a todos los usuarios del sistema por defecto. He creado uno nuevo para asociarlo sólo a mi usuario, y en este: configurar perfil - selección del componente "General" - configurar componente - selección "Deshabilitar la opción de terminar sesión". Mi usuario ya no puede apagar el sistema como habitualmente lo hacía.

2.- He creado el siguiente script "intermedio": #!/bin/bash

####################################################

####################################################

konsole -name casa-parada -title casa-parada -e /home/godo/bin/casa-parada \ && \ dcop ksmserver ksmserver logout 1 2 0

Lo denomino "intermedio" porque es ejecutado desde un botón que he creado en el panel de KDE (kicker) mediante la opción "Añadir aplicación no-KDE". Realiza dos acciones: abre una sesión de Konsole (programa terminal del entorno KDE) dentro de la cual ejecuta el script que me interesa (el que me solicita la contraseña y hace la verdadera tarea): /home/godo/bin/casa-parada, y cuando este termina satisfactoriamente (&&), hace una llamada al administrador de sesiones de KDE:

dcop ksmserver ksmserver logout 1 2 0

Donde los tres parámetros que siguen al mensaje de "logout" son, respectivamente:

enum ShutdownConfirm { ShutdownConfirmDefault = -1, ShutdownConfirmNo = 0, ShutdownConfirmYes = 1 };

enum ShutdownType { ShutdownTypeDefault = -1, ShutdownTypeNone = 0, ShutdownTypeReboot = 1, ShutdownTypeHalt = 2 };

enum ShutdownMode { ShutdownModeDefault = -1, ShutdownModeSchedule = 0, ShutdownModeTryNow = 1, ShutdownModeForceNow = 2, ShutdownModeInteractive = 3 };

Con lo que conseguimos exactamente el mismo efecto que cuando antes utilizábamos el botón "Terminar…" del menú K, pero esta vez "terminamos" justo después de haber ejecutado nuestro script: ¡Objetivo conseguido!

Como veis, hoy he aprendido muchas cosas nuevas.

Y tengo un problema menos ;-)

Dejar comentario.

Tags: Configuraciones GNU/Linux