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 :-).
Objetivo: ejecutar un shell script (que en mi caso es el que realiza la copia de seguridad) *
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.
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":
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 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:
Como veis, hoy he aprendido muchas cosas nuevas.
Y tengo un problema menos ;-)