Manualinux
http://www.nvu.com http://www.gimp.org InicioPresentaciónActualizacionesManualesDescargasNoticiasAgradecimientoEnlaces

Entornos GráficosAplicaciones

Administradores de SesionesAdministradores de VentanasEscritoriosUtilidades de Escritorio

Administradores de Sesiones - EntranceAdministradores de Sesiones - SLiM

Administradores de Sesiones - Qingy




Administradores de Sesiones - Qingy




Copyright

Copyright © José Luis Lara Carrascal  2006-2015   http://manualinux.es


 
Sumario

Introducción
Características
Preliminares
Instalación
Configuración
Temas
Reiniciamos el Sistema y al inicio aparece Qingy
Enlaces




Introducción  

Qingy es algo más que un simple administrador de sesión, es un reemplazo de las consolas virtuales getty que proporciona una interfaz gráfica usando las librerías DirectFB sin tener que depender de X, proporcionando al usuario la posibilidad de iniciar sesión gráfica o sesión de consola de texto.



Características  

* Recuerda el último usuario que inició sesión enfocando directamente a la contraseña.
* También lo hace con la sesión, sea gráfica o de consola de texto.
* Soporte de ratón.
* Soporte de temas, independientemente de la resolución de monitor que use cada usuario.
* Soporte de temas para el puntero del ratón.
* Soporte de múltiples sesiones de X.
* Permite iniciar X, incluso dentro de una consola, estando otra sesión X abierta.
* Soporte de Linux-PAM.
* Temporizado de sesión con soporte de bloqueo y salida de sesión (experimental)
* Salvapantallas
* Bloqueo de sesión.
* Opciones específicas de tty.
* Atajos de teclado configurables. 



Preliminares  

1) Comprobar que la ruta de instalación de los binarios del programa la tenemos en nuestro PATH

Abrimos una ventana de terminal y ejecutamos el siguiente comando,

[jose@Fedora-18 ~]$ echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jose/bin

Si no aparece entre las rutas mostradas el directorio /usr/local/sbin, abrimos un editor de texto y añadimos lo siguiente,

#!/bin/sh

export PATH=/usr/local/sbin:$PATH

Lo guardamos con el nombre variables.sh, y lo instalamos en /etc/profile.d.

$ su
# install -m755 variables.sh /etc/profile.d

Tenemos que cerrar el emulador de terminal y volverlo a abrir para que la variable de entorno aplicada sea efectiva. Es conveniente guardar una copia de este script para posteriores instalaciones de nuestro sistema, teniendo en cuenta que es el que se va a utilizar a partir de ahora en todos los manuales de esta web, para establecer variables de entorno globales, excepto en aquellas que sólo afectan al usuario, en las que se utilizará el archivo de configuración personal, ~/.bashrc.

La ventaja de utilizar el directorio /etc/profile.d es que es común a todas las distribuciones y nos evita tener que editar otros archivos del sistema como por ejemplo, /etc/profile.

2) Desinstalar versiones anteriores del programa ubicadas en el directorio /usr

Aún en el caso de que la versión a compilar la vayamos a instalar en el mismo directorio que la que proporciona la distribución, siempre se debe desinstalar previamente la versión antigua, para evitar conflictos innecesarios.



Instalación  

Dependencias

Herramientas de Compilación


Entre paréntesis la versión con la que se ha compilado Qingy para la elaboración de este documento.

* GCC - (5.1.0)
* Gawk - (4.1.3)
* M4 - (1.4.17)
* Libtool - (2.4.6)
* Make - (4.1)
* Automake - (1.15)
* Bison - (3.0.4)
* Autoconf - (2.69)
* Pkg-config - (0.28)
* Flex - (2.5.39)

Librerías de Desarrollo

* Xorg - (7.7 / xorg-server 1.17.1)
   LibX11 - (1.6.3)
   LibXScrnSaver - (1.2.2)
DirectFB - (1.7.7)
* Ncurses - (5.9)
* PAM - (1.1.6)
* OpenSSL - (1.0.2c)
* Gpm - (1.20.6)
* Kernel framebuffer - (4.0)



Descarga

qingy-1.0.0_es.tar.xz  |  qingy_0.3_themepack_1.0.tar.bz2

Firma Digital  Clave pública PGP

qingy-1.0.0_es.tar.xz.asc

Verificar la firma digital del paquete

$ gpg --import manualinux.asc 
$ gpg --verify qingy-1.0.0_es.tar.xz.asc qingy-1.0.0_es.tar.xz

Optimizaciones

$ export {CFLAGS,CXXFLAGS}='-O3 -march=amdfam10 -mtune=amdfam10'

Donde pone amdfam10 se indica el procesador respectivo de cada sistema seleccionándolo de la siguiente tabla: 
* La opción '-march=' establece el procesador mínimo con el que funcionará el programa compilado, la opción '-mtune=' el procesador específico para el que será optimizado. 

* Los valores separados por comas, son equivalentes, es decir, que lo mismo da poner '-march=k8' que '-march=athlon64'.

* En versiones de GCC 3.2.x e inferiores se utiliza la opción '-mcpu=' en lugar de '-mtune='.
Valores CPU
generic Produce un código binario optimizado para la mayor parte de procesadores existentes. Utilizar este valor si no sabemos el nombre del procesador que tenemos en nuestro equipo. Este valor sólo es aplicable en la opción '-mtune=', si utilizamos GCC. Esta opción está disponible a partir de GCC 4.2.x.
intel Intel Haswell y Silvermont. Este valor sólo es aplicable en la opción '-mtune='. Esta opción está disponible a partir de GCC 4.9.x.
i386 Intel i386.
i486 Intel i486.
i586, pentium Intel Pentium sin soporte de instrucciones MMX.
pentium-mmx Intel PentiumMMX basado en Pentium con soporte de instrucciones MMX.
pentiumpro Intel PentiumPro.
i686 Produce un código binario optimizado para la mayor parte de procesadores compatibles con la serie 80686 de Intel. Todos los actuales lo son.
pentium2 Intel Pentium2 basado en PentiumPro con soporte de instrucciones MMX.
pentium3, pentium3m Intel Pentium3 basado en PentiumPro con soporte de instrucciones MMX y SSE.
pentium-m Versión de bajo consumo de Intel Pentium3 con soporte de instrucciones MMX, SSE y SSE2. Utilizado por los portátiles Centrino.
pentium4, pentium4m Intel Pentium4 con soporte de instrucciones MMX, SSE y SSE2.
prescott Versión mejorada de Intel Pentium4 con soporte de instrucciones MMX, SSE, SSE2 y SSE3.
nocona Versión mejorada de Intel Pentium4 con extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2 y SSE3.
core2 Intel Core2 con extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2, SSE3 y SSSE3. Esta opción está disponible a partir de GCC 4.3.x.
nehalem Intel Nehalem con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9.x.
westmere Intel Westmere con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9.x.
sandybridge Intel Sandy Bridge con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9.x.
ivybridge Intel Ivy Bridge con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND, F16C y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9.x.
haswell Intel Haswell con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9.x.
broadwell Intel Broadwell con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9.x.
bonnell Intel Bonnell con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3 y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9.x.
silvermont Intel Silvermont con soporte de instrucciones MOVBE, MMX, SSE, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMU, RDRND y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9.x.
corei7 Intel Core i7 con extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 y SSE4.2. Soporta también los procesadores Intel Core i3 e i5. Esta opción está disponible desde GCC 4.6.x, hasta GCC 4.8.x. A partir de GCC 4.9.x se utiliza la definición nehalem.
corei7-avx Intel Core i7 con extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES y PCLMUL. Soporta también los procesadores Intel Core i3 e i5. Esta opción está disponible desde GCC 4.6.x, hasta GCC 4.8.x. A partir de GCC 4.9.x se utiliza la definición sandybridge.
core-avx-i Intel Core (ivyBridge) con extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND y F16C. Esta opción está disponible desde GCC 4.6.x, hasta GCC 4.8.x. A partir de GCC 4.9.x se utiliza la definición ivybridge.
core-avx2 Intel Core (Haswell). Esta opción está disponible desde GCC 4.6.x, hasta GCC 4.8.x. A partir de GCC 4.9.x se utiliza la definición haswell.
atom Intel Atom con extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2, SSE3 y SSSE3. Esta opción está disponible desde GCC 4.6.x, hasta GCC 4.8.x. A partir de GCC 4.9.x se utiliza la definición bonnell.
k6 AMD K6 con soporte de instrucciones MMX.
k6-2, k6-3 Versiones mejoradas de AMD K6 con soporte de instrucciones MMX y 3DNow!.
athlon, athlon-tbird AMD Athlon con soporte de instrucciones MMX, 3DNow!, enhanced 3DNow! y SSE prefetch.
athlon4, athlon-xp, athlon-mp Versiones mejoradas de AMD Athlon con soporte de instrucciones MMX, 3DNow!, enhanced 3DNow! y full SSE.
k8, opteron, athlon64, athlon-fx Procesadores basados en AMD K8 core con soporte de instrucciones x86-64 (MMX, SSE, SSE2, 3DNow!, enhanced 3DNow! y extensiones 64-bit).
k8-sse3, opteron-sse3, athlon64-sse3 Versiones mejoradas de AMD K8 core con soporte de instrucciones SSE3. Esta opción está disponible a partir de GCC 4.3.x.
amdfam10, barcelona Procesadores basados en AMD Family 10h core con soporte de instrucciones x86-64 (MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, ABM y extensiones 64-bit). Esta opción está disponible a partir de GCC 4.3.x.
btver1 Procesadores basados en AMD Family 14h core con soporte de instrucciones x86-64 (MMX, SSE, SSE2, SSE3, SSE4A, CX16, ABM y extensiones 64-bit). Esta opción está disponible a partir de GCC 4.6.x.
btver2 Procesadores basados en AMD Family 16h core con soporte de instrucciones x86-64 (MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX y extensiones 64-bit). Esta opción está disponible a partir de GCC 4.8.x.
bdver1 Procesadores basados en AMD Family 15h core con soporte de instrucciones x86-64 (FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones 64-bit). Esta opción está disponible a partir de GCC 4.7.x.
bdver2 Procesadores basados en AMD Family 15h core con soporte de instrucciones x86-64 (BMI, TBM, F16C, FMA, LWP, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones 64-bit). Esta opción está disponible a partir de GCC 4.7.x.
bdver3 Procesadores basados en AMD Family 15h core con soporte de instrucciones x86-64 (FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones 64-bit). Esta opción está disponible a partir de GCC 4.8.x.
bdver4 Procesadores basados en AMD Family 15h core con soporte de instrucciones x86-64 (BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones 64-bit). Esta opción está disponible a partir de GCC 4.9.x.
winchip-c6 IDT Winchip C6, que equivale a un i486 con soporte de instrucciones MMX.
winchip2 IDT Winchip2, que equivale a un i486 con soporte de instrucciones MMX y 3DNow!.
c3 Via C3 con soporte de instrucciones MMX y 3DNow!.
c3-2 Via C3-2 con soporte de instrucciones MMX y SSE.
geode AMD integrado con soporte de instrucciones MMX y 3DNow!. Esta opción está disponible a partir de GCC 4.3.x.
native Produce un código binario optimizado para el procesador que tengamos en nuestro sistema, siendo éste detectado utilizando la instrucción cpuid. Procesadores antiguos pueden no ser detectados utilizando este valor. Esta opción está disponible a partir de GCC 4.2.x.

Optimizaciones adicionales
Graphite
$ export {CFLAGS,CXXFLAGS}+=' -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block'
LTO
$ export AR=gcc-ar RANLIB=gcc-ranlib NM=gcc-nm
$ export {CFLAGS,CXXFLAGS}+=' -fuse-linker-plugin -flto=2'
Donde pone 2 se indica el número de núcleos de nuestro procesador, si sólo tiene uno, utilizar el parámetro -flto

Establecer el RPATH correspondiente si utilizamos una versión de GCC que no es la principal del sistema
export LDFLAGS="-Wl,-rpath,/opt/gcc-5.1.0/lib -lstdc++"
Sustituir /opt/gcc-5.1.0/lib por la ruta de instalación alternativa que cada usuario tenga en su sistema. Esto sólo es necesario si hemos compilado DirectFB con una versión de GCC que no es la principal del sistema.

Extracción y Configuración  Bloc de Notas Información general sobre el uso de los comandos

$ tar Jxvf qingy-1.0.0_es.tar.xz
$ cd qingy-1.0.0_es
$ ./configure --disable-dependency-tracking \
--disable-optimizations --sysconfdir=/etc --disable-static

Explicación de los comandos

--disable-dependency-tracking : Acelera el tiempo de compilación
--disable-optimizations : Obligatorio, para poder usar nuestras propias optimizaciones.
--sysconfdir=/etc : Instala los archivos de configuración en /etc/qingy.
--disable-static : Desactivamos la compilación de las librerías estáticas, no necesarias para la ejecución de Qingy.

Compilación

$ make

Parámetros de compilación opcionales

-j2 : Si tenemos un procesador de doble núcleo (dual-core), y el kernel está optimizado para el mismo y es SMP, con este parámetro aumentaremos el número de procesos de compilación simultáneos a un nivel de 2 y aceleraremos el tiempo de compilación del programa de forma considerable.
-j4 : Lo mismo que arriba pero con procesadores de 4 núcleos (quad-core).

Instalación como root

$ su -c "make install-strip"

Instalación de los temas

$ su
# tar jxvf qingy_0.3_themepack_1.0.tar.bz2 --strip-components=1 -C /usr/local/share/qingy/themes

Crear y editar el archivo de configuración /etc/directfbrc

Requerido para poder ejecutar Qingy con las últimas versiones de DirectFB, si el archivo ya existe añadimos lo siguiente al mismo:

system=fbdev

Si el archivo no existe, ejecutamos el siguiente comando como root:

$ su
# echo "system=fbdev" > /etc/directfbrc

Crear y editar el archivo de configuración /etc/fb.modes

Abrimos una ventana de terminal y ejecutamos el comando fbset. Un ejemplo:

[jose@localhost ~]$ fbset

mode "1024x768-76"
    # D: 78.653 MHz, H: 59.949 kHz, V: 75.694 Hz
    geometry 1024 768 1024 1536 16
    timings 12714 128 32 16 4 128 4
    rgba 5/11,6/5,5/0,0/0
endmode

Si el archivo /etc/fb.modes ya existe en nuestro sistema, añadimos lo que está en rojo al principio del mismo, si el archivo no existe basta ejecutar el siguiente comando como root.

$ su
# fbset > /etc/fb.modes

Estadísticas de Compilación e Instalación de Qingy

Estadísticas de Compilación e Instalación de Qingy
CPU AMD Athlon(tm) II X2 260 Processor
MHz
3214.610
RAM
2048 MB
Sistema de archivos XFS
Compilador GCC 5.1.0 + Ccache 3.2.2
Parámetros de optimización -03 -march=amdfam10 -mtune=amdfam10 -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block -fuse-linker-plugin -flto=2
Parámetros de compilación -j2
Tiempo de compilación 9"
Archivos instalados 165
Mostrar/Ocultar la lista de archivos instalados
Enlaces simbólicos creados 1
/usr/local/lib/qingy/libqingy.so
Ocupación de espacio en disco 7,2 MB

Archivo de configuración personal

~/.qingy Es el archivo de configuración personal de Qingy en nuestro home, solo contiene la última sesión seleccionada por el usuario.

Desinstalación como root

1) MODO TRADICIONAL

En el directorio de compilación ejecutamos el siguiente comando como root:

$ su -c "make uninstall"

2) MODO MANUALINUX   

El principal inconveniente del comando anterior es que tenemos que tener el directorio de compilación en nuestro sistema para poder desinstalar el programa. En algunos casos esto supone muchos megas de espacio en disco. Con el paquete de scripts que pongo a continuación logramos evitar el único inconveniente que tiene la compilación de programas, y es el tema de la desinstalación de los mismos sin la necesidad de tener obligatoriamente una copia de las fuentes compiladas.

qingy-1.0.0_es-scripts.tar.gz

$ su
# tar zxvf qingy-1.0.0_es-scripts.tar.gz
# cd qingy-1.0.0_es-scripts
# ./Desinstalar_qingy-1.0.0_es

Copia de Seguridad como root

Con este otro script creamos una copia de seguridad de los binarios compilados, recreando la estructura de directorios de los mismos en un directorio de copias de seguridad (copibin) que se crea en el directorio /var. Cuando se haya creado el paquete comprimido de los binarios podemos copiarlo como usuario a nuestro home y borrar el que ha creado el script de respaldo, teniendo en cuenta que si queremos volver a restaurar la copia, tendremos que volver a copiarlo al lugar donde se ha creado.

$ su
# tar zxvf qingy-1.0.0_es-scripts.tar.gz
# cd qingy-1.0.0_es-scripts
# ./Respaldar_qingy-1.0.0_es

Restaurar la Copia de Seguridad como root

Y con este otro script (que se copia de forma automática cuando creamos la copia de respaldo del programa) restauramos la copia de seguridad como root cuando resulte necesario.

$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_qingy-1.0.0_es



Configuración  

Qingy
depende del framebuffer del kernel así que para su funcionamiento tendremos que iniciar siempre linux con el framebuffer activado. La configuración de inicio aquí explicada del programa es para sistemas con SysVinit, para aquellos sistemas que utilicen Systemd, me remito a la información ubicada en la wiki de la distribución ArchLinux, ya que no puedo documentar algo que no he probado previamente. Tener en cuenta que nos tendremos que descargar el paquete correspondiente también con el archivo de configuración para habilitar Qingy como servicio de Systemd.

1) /etc/inittab
2) /etc/qingy/settings
3) /etc/qingy
4) /etc/qingy/welcomes


Configuraciones adicionales

1) /etc/inittab  


Editamos el archivo /etc/inittab, cambiamos el runlevel a 3 y sustituimos las tty por la ruta al ejecutable qingy, siempre es bueno dejar una tty libre por si Qingy dejara de funcionar o diera problemas.

# inittab       This file describes how the INIT process should set up
#               the system in a certain run-level.
#
# Author:       Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
#               Modified for RHS Linux by Marc Ewing and Donnie Barnes
#

# Default runlevel. The runlevels used by Mandrake Linux are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

# When our UPS tells us power has failed, assume we have a few minutes
# of power left.  Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly. 
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"


# Run gettys in standard runlevels
1:2345:respawn:/usr/local/sbin/qingy tty1
2:2345:respawn:/usr/local/sbin/qingy tty2
3:2345:respawn:/usr/local/sbin/qingy tty3
4:2345:respawn:/sbin/mingetty tty4
#5:2345:respawn:/usr/local/sbin/qingy tty5
#6:2345:respawn:/sbin/mingetty tty6


# Single user mode
~~:S:wait:/bin/sh


2) /etc/qingy/settings  

Es el archivo de configuración de Qingy, un ejemplo, los comentarios traducidos al español son de la versión en español que acompaña a este manual, he añadido más información de la que lleva la versión original para facilitar la comprensión de los usuarios a la hora de editar este archivo de configuración. Todas las opciones (las que están en color rojo) comentadas con # están deshabilitadas, aunque algunas las usa Qingy por defecto.

# Directorio que contiene la sesiones X
x_sessions = "/etc/qingy/Xsessions/"
# Directorio que contiene las sesiones en modo texto
text_sessions = "/etc/qingy/sessions/"
# Directorio donde Qingy ubicará los archivos temporales
temp_files_dir = "/var/lib/misc"

# Ruta completa al servidor X
# x_server = "/usr/X11R6/bin/XFree86"
# Ruta completa al ejecutable 'xinit'
xinit = "/usr/X11R7/bin/xinit"

# Parámetros a pasar al servidor X (para más información ejecutar man Xorg)
x_args = "-nolisten inet6 -deferglyphs 16 -nolisten tcp -br"

# ¿Cómo de verboso se mostrará Qingy?
# Posibles valores son debug, error
# Por defecto es error
log_level = error

# ¿Dónde deben de escribirse los mensajes de Qingy?
# Los valores pueden ser uno o más de los siguientes:
# console, file, syslog
# El valor por defecto es console
# log_facilities = console, file
log_facilities = console

# Offset para buscar un número de servidor X disponible.
# Este número afecta la variable de entorno DISPLAY.
# Por defecto es 1, ajustándolo a 0 produce fallos en las implementaciones OpenGL
# (como la ATI uno) funcionando con qingy, pero también hará imposible
# iniciar el servidor X desde la consola usando startx sin pasarle estos
# parámetros adicionales.
#x_server_offset = 1

# ¿Dónde se debe de iniciar el servidor X?
# Los valores aceptados son:
#   qingy_tty (por defecto) - se inicia en la misma tty en la que está corriendo qingy
#   unused_tty - se inicia después de la última tty activa (por ejemplo, si tenemos 4
#   activas, éste se iniciará en la 5, accediendo al mismo desde las tty pulsando alt+F5)
x_server_tty = qingy_tty

# Scripts ha ser ejecutados justo antes/después de que se inicie/apague la interfaz
# de qingy (algunas distribuciones requieren de estos scripts para el funcionamiento de
# qingy)
#pre_gui_script  = "/path/to/pre_guiscript.sh"
#post_gui_script = "/path/to/post_gui_script.sh"

# ¿Dónde se ubican los salvapantallas?
screensavers_dir = "/usr/local/lib/qingy/screensavers"

# ¿Cuánto tiempo hay que esperar (en minutos) antes de que el salvapantallas se active?
# Un valor de 0 desactiva el salvapantallas completamente.
screensaver_timeout = 5

# ¿Cuánto tiempo hay que esperar (en minutos) antes de que la pantalla entre en modo de ahorro de energía?
# Un valor de 0 desactiva esta función
screen_powersaving_timeout = 30

#screensaver "pixel"
#screensaver "running_time"#="%H:%S:%M"
screensaver "photos" = "/home/jose/Fotos"

# ¿Dónde se ubican los temas?
themes_dir = "/usr/local/share/qingy/themes"

# ¿Qué tema quiere usted (también puede definir 'random' (aleatorio))?
# Si se utiliza un tema específico hay que colocarlo siempre entre comillas y
# con el nombre que tenga la carpeta donde esté ubicado. Si se desea que
# se carguen de forma aleatoria, poner random sin comillas, como se muestra a
# continuación.
# theme = random
theme = ramdom

# ¿A quién se le permite apagar el sistema?
# Las opciones permitidas son 'everyone' (todos), 'root', 'noone' (ninguno)
# la política por defecto es 'everyone' (todos)
# shutdown_policy = everyone

# ¿Cómo debe calcularse el último usuario?
# global - los datos se obtienen del último usuario que accedió usando qingy
# desde cualquier tty
# tty - los datos se obtienen del último usuario que accedió usando la tty actual
# none - los datos no se obtienen (y se ajustan) del último usuario
# la política por defecto es global
#last_user_policy = global

# ¿Cómo debe calcularse la última sesión del usuario?
# user - los datos se obtienen de la última sesión de cada usuario
# tty - los datos se obtienen de la última sesión de la tty actual
# none - los datos no se obtienen (y se ajustan) de la última sesión
#  la política por defecto es user
#last_session_policy = user

# ¿Qué sucede cuando se aprieta el botón 'sleep' (hibernar)?
#sleep = "/usr/local/sbin/hibernate"

# si se debe de suprimir la imagen del fondo durante los diálogos
# (el valor por defecto es nunca)...
# ésta es la opción por defecto, se sobreescribe si el tema que usted está usando
# tiene la misma imagen pero con diferentes ajustes...
# clear_background = yes

# si se permite bloquear la sesión; si usted habilita esto, cuando intente
# conmutar a la tty controlada por qingy cuyo dueño no es el usuario
# actual, usted será preguntado por la contraseña del usuario antes de
# permitirle continuar. Si usted es el root, claro está, podrá conmutar a
# cualquier tty que usted elija. La opción por defecto es 'no'.
#lock_sessions = yes

# si se permite la interrupción de la sesión; si usted habilita esto, después de
# una cantidad de minutos definida en la variable idle_timeout, idle_action
# será definida. Las acciones permitidas son:
# lock - bloquea la sesión del usuario y le pide su contraseña
# logout - cierra su sesión
#idle_timeout = 30
#idle_action  = lock

# previene que qingy muestre la pantalla de acceso o inicie una sesión si el sistema
# está reiniciando o apagando
#check_runlevel = yes
#exclude_runlevels = 0, 6

# estas opciones sólo son válidas si qingy se inicia desde la tty3
#tty = 3
#{
#    theme = "fireplace"
#    screensaver "pixel"

#    #  ¿Activar el acceso automático?
#    # Totalmente inseguro, pero muy conveniente ;-)
#    # Tenga en cuenta que esta sección debe ponerse dentro de un bloque tty=n{}
#    # También, si usted decide usar esta característica, es mejor
#    # que el archivo de configuración solo sea legible por el root
#    autologin
#    {
#        username = "myuser"
#        password = "mypassword"
#        # Usted también puede usar 'session=lastsession' para elegir de forma automática la última sesión del usuario
#        session  = "Text: emacs"
#        # si se ajusta a 'no', qingy accederá de forma automática sólo una vez en cada reinicio del sistema
#        relogin  = no
#    }
#}

keybindings
{
    prev_tty    = "win"      # conmuta a la tty izquierda
    next_tty    = "menu"     # conmuta a la tty derecha
    poweroff    = "ALT-p"    # apaga el sistema
    reboot      = "ALT-r"    # reinicia el sistema
    screensaver = "ALT-s"    # activa el salvapantallas
    sleep       = "ALT-z"    # pone la máquina en modo sleep (hibernación)
#    kill        = "CTRL-c"   # mata qingy
    text_mode   = "CTRL-ESC" # Revierte a modo texto
}



3) /etc/qingy/Xsessions  

Esta opción es personal, a partir de la versión 0.7.0, Qingy genera automáticamente la ruta a las sesiones de X valiéndose de las instalaciones de GDM o KDM, aunque yo sigo prefiriendo la opción de abajo, cada cual que  elija la que más le convenga.

Como cada distribución es diferente a la hora de los inicios de sesión, creamos una carpeta: /etc/qingy/Xsessions y  en ella colocamos todos los entornos que tengamos en nuestro sistema, un ejemplo de archivo:

Creamos un archivo en /etc/qingy/Xsessions, lo nombramos E16 y añadimos lo siguiente:

numlockx &
exec starte16

Nota: Desde la versión 0.9.2, los archivos Desktop que estén en /usr/share/xsessions son detectados de forma automática y se crea un script en /etc/qingy/Xsessions con el nombre del entorno y la ruta al binario.


4) /etc/qingy/welcomes  

Éste es el archivo de configuración de los mensajes de bienvenida que se muestran cuando iniciamos una sesión, por defecto viene configurado el del root, podemos añadir el nuestro con sólo poner nuestro nombre de usuario y el mensaje a continuación, un ejemplo:

root Saludos, maestro...
jose ¿Te alegras de verme, cariño?


Configuraciones adicionales  

No sé si es algo sólo específico de mi distribución, Mandriva, pero al iniciar Qingy la primera vez que lo hice el bloqueo numérico del teclado no se activaba y las fuentes me aparecían muy pequeñas en Fluxbox. Pero al final encontré la solución al problema, así que vamos por partes:

1) Bloqueo numérico

Esto lo solucioné muy pronto con el programa NumLockX, sólo hay que añadirlo a los archivos igual que en el ejemplo de arriba, 

numlockx &
execstarte16

2) Fuentes pequeñas

Para solucionar esto hay que editar, si no existe se crea, el archivo de nuestro home, .Xdefaults y añadimos lo siguiente:

Xft.dpi: 90
Xft.hinting: 1
Xft.hintstyle: hintfull


Donde pone 90 podemos poner 96, pero yo con 90 ya tengo bastante, todo va en función de la visualización de las fuentes.
 
 
Temas  

Traducción al español de los temas
Temas del puntero del ratón


Independientemente de la resolución de los temas, Qingy los reduce o los amplía en función de la resolución del monitor de cada usuario. Si el tema es de 800x600 y la pantalla de 1024x768, Qingy redimensionará el tema hasta cubrir el total de la pantalla de 1024x768.

Como los temas tienen más tiempo que la versión hay que editarlos y añadir la resolución original de estos, esto se comprueba con el tamaño de la imágen de fondo que lleva el tema, un ejemplo:

ComputerRoom
    theme
{   
    background = "background.jpg"
    font = "decker.ttf"
    button_opacity          = 220
    window_opacity          = 200
    selected_window_opacity = 255
    default_text_color   = 255, 255, 200, 255
    default_cursor_color = 128,  90,  60, 160
    other_text_color     =   0, 200, 200, 220

# this is the native resolution of the theme, i.e. the resolution the theme
# was designed for. If qingy detects a running resolution different than this
# one, it will (try to) scale things so that they will look the same across
# all resolutions. If this is omitted, qingy will default to 800x600 to
# maintain compatibility with older themes...
    native_resolution = 800x600
}

window
{
    x      = 0
    y      = 75
    width  = 800
    height = 50
    text_orientation = center
    type    = "label"
    content = "Welcome to <INS_CMD_HERE>"
    command = "hostname"
}

window
{
    x                = 100
    y                = 220
    width            = 120
    height           = 50
    text_orientation = right
    type             = "label"
    content          = "login:"
    linkto           = "login"
}

window
{
    x            = 240
    y            = 220
    width        = 560
    height       = 50
    type         = "login"
}

window
{
    x                = 100
    y                = 295
    width            = 120
    height           = 50
    text_orientation = right
    type             = "label"
    content          = "passwd:"
    linkto           = "password"
}

window
{
    x            = 240
    y            = 295
    width        = 560
    height       = 50
    type         = "password"
}

window
{
    x                = 100
    y                = 370
    width            = 120
    height           = 50
    text_orientation = right
    type             = "label"
    content          = "session:"
    linkto           = "session"
}

window
{
    x          = 240
    y          = 370
    width      = 560
    height     = 50
    type       = "combo"
    command = "sessions"
}

window
{
    x    = 650
    y    = 480
    type = "button"
    command = "halt"
    content = "power"
}

window
{
    x       = 530
    y       = 480
    type    = "button"
    command = "reboot"
    content = "reset"
}

Si no nos gustan las imágenes que llevan los temas, podemos cambiarlas por otras, como ya he explicado antes la carpeta de los temas está en /usr/local/share/qingy/themes

Traducción al español de los temas  

El texto de los menús de los tema se pueden poner en nuestro idioma, para que se muestren con los acentos y las eñes habrá que guardar el archivo de configuración con la codificación de caracteres UTF-8, aún así, si la fuente no soporta acentos el tema no se mostrará con éstos, la única solución es utilizar una fuente alternativa. Pongo un ejemplo de que es lo que hay que editar con el tema sympho

theme
{   
    background = "background.jpg"
    font = "decker.ttf"

# opacity values, from 0 (transparent) to 255 (opaque)
    button_opacity          = 255
    window_opacity          = 128
    selected_window_opacity = 255

# Colors can be given in a hex quadruplet (values from 00 to ff)
# or via comma-separated decimals (0 to 255). Format is RGBA
#    mask_text_color   = [ 28b428ff ]
#    cursor_text_color = [ 145a14dd ]
#    other_text_color  = [ 404040ff ]
    default_text_color   =  10, 255, 30, 45
    default_cursor_color =  20,  90, 20, 221
    other_text_color     = 10, 255,  30, 255

# wether we should clear background image during dialogs
# (default is no, unless you set it differently in qingy config file)...
    clear_background = yes

    native_resolution = 1024x768
}

window
{
    # window geometry
    x      = 0
    y      = 96
    width  = 1024
    height = 64

    # text size: chose between 'small', 'medium' and 'large'
    # default is 'large'
    #text_size        = large
   
    # text alignment: 'left', 'center', 'right'. Default is 'left'
    text_orientation = center

    #colors: if not defined, theme defaults will be used
    #text_color   = 55, 240, 45, 255
    #cursor_color =  30, 255, 0, 221

    # update time, 0 means do not update, which is default
    # this setting has meaning only if window type is "label"
    # time = 0

    # window type, allowed values are:
    # "label", "button", "login", "password", "combo"
    type    = "label"
    content = "Bienvenido a <INS_CMD_HERE>"
    # The <INS_CMD_HERE> above is substituted with the output of 'command'
    command = "hostname"
}

window
{
    x      = 0
    y      = 746
    width  = 1024
    height = 32

    text_orientation = center
    text_size        = small

    text_color   = 55, 240, 45, 255
    time = 1

    type    = "label"
    content = "<INS_CMD_HERE>"
    command = "echo `tty` `date +%a,` `date +%d` `date +%b` `date +%Y,` `uptime`"
}

window
{
    x                = 128
    y                = 281
    width            = 153
    height           = 64
    text_orientation = right
    type             = "label"
    content          = "usuario:"
    linkto           = "login"
}

window
{
    x            = 307
    y            = 294
    width        = 716
    height       = 53
    text_color   = 55, 240, 45, 255
    cursor_color =  90,  90, 20, 221
    type         = "login"
}

window
{
    x                = 128
    y                = 364
    width            = 153
    height           = 64
    text_orientation = right
    type             = "label"
    content          = "clave:"
    linkto           = "password"
}

window
{
    x            = 307
    y            = 377
    width        = 716
    height       = 64
    text_color   = 55, 240, 45, 255
    cursor_color =  30, 255, 0, 221
    type         = "password"
}

window
{
    x                = 128
    y                = 458
    width            = 153
    height           = 64
    text_orientation = right
    type             = "label"
    content          = "sesión:"
    linkto           = "session"
}

window
{
    x          = 307
    y          = 473
    width      = 716
    height     = 64
    text_color = 55, 240, 45, 255
    type       = "combo"

    # So far, the only combobox allowed is "sessions"
    command = "sessions"
}

window
{
    # window geometry
    x    = 966
    y    = 719
    type = "button"

    # Allowed commands:
    # "halt", "reboot", "sleep", "screensaver"
    command = "halt"

    # Image prefix: will be converted to
    # "<name>_normal.png" and "<name>_mouseover.png"
    content = "power"
}

window
{
    x       = 966
    y       = 659
    type    = "button"
    command = "reboot"
    content = "reset"
}

window
{
    x       = 966
    y       = 601
    type    = "button"
    command = "screensaver"
    content = "screensaver"
}

window
{
    x       = 966
    y       = 544
    type    = "button"
    command = "sleep"
    content = "sleep"
}

Hay que buscar siempre las entradas de tipo content ="" ignorando las que hagan referencia a los botones de apagado, reinicio y suspensión del sistema. También es recomendable no añadir la palabra contraseña porque ésta es demasiado larga y se saldrá del espacio destinado a la misma (habría que editar las coordenadas x e y) y sustituirla por la palabra clave, más corta y que le viene bien a todos los temas. En algunos temas la palabra usuario puede que no se muestre completa y habrá que editar las coordenadas x e y del archivo de configuración.

En Manualinux - Foro, en la sección de Administradores de Sesiones he abierto un hilo donde iré colocando los temas de Qingy debidamente actualizados y traducidos al español.



Soporte de traducción de los mensajes de Qingy a partir de la versión 0.9.8

Desde la versión 0.9.8 se ha incluido soporte de traducción de los mensajes de Qingy en los temas, el que lleva por defecto la versión original del programa lo podemos coger como ejemplo. Si utilizamos la versión en español del programa descargada desde este manual, no es necesario añadir estos mensajes a los temas, porque ya vienen incluidos directamente en el código fuente del programa. 

# how many seconds should we wait when displaying the 'system will XXX in YYY seconds...'?
    countdown_timeout = 5

# how many seconds should we wait when displaying informative messages ('login failed', ...)?
    info_message_timeout = 2

# how many seconds should we wait when displaying welcome message in case of successful login?
    welcome_message_timeout = 1

# these are the various messages that qingy may show up in its GUI
# you are free to change them. If you do not define these variables
# default (English) messages will be shown
    shutdown_timeout_message = "system shutdown in <INS_TIMEOUT_HERE> seconds"
    restart_timeout_message = "system restart in <INS_TIMEOUT_HERE> seconds"
    sleep_timeout_message = "system will fall asleep in <INS_TIMEOUT_HERE> seconds"
    sleep_forbidden_message = "Putting this machine in sleep mode is not allowed!"
    shutdown_forbidden_message = "Shutting down this machine is not allowed!"
    sleep_password_message = "You must enter root password to put this machine to sleep!"
    shutdown_password_message = "You must enter root password to shut down this machine!"
    shutdown_message = "shutting down system..."
    restart_message = "rebooting system..."
    login_message = "Logging in"
    login_failed_message = "Login failed!"
    abort_message = "Press ESC key to abort"
    caps_message = "CAPS LOCK is pressed"
    sleep_cmd_message = "You must define sleep command in settings file!"
    crypto_error_message = "Crypto error - regenerate your keys!"
    welcome_message = "Starting selected session..."
}


Temas del puntero del ratón  

Ésta es la novedad más significativa desde la versión 0.9.4 y es la posibilidad de usar punteros del ratón personalizados con cada tema, como base elegimos el tema que Qingy trae por defecto,

theme
{   
    background = "background.jpg"
    font = "decker.ttf"

# opacity values, from 0 (transparent) to 255 (opaque)
    button_opacity          = 255
    window_opacity          = 128
    selected_window_opacity = 255

# Colors can be given in a hex quadruplet (values from 00 to ff)
# or via comma-separated decimals (0 to 255). Format is RGBA
#    mask_text_color   = [ 28b428ff ]
#    cursor_text_color = [ 145a14dd ]
#    other_text_color  = [ 404040ff ]
    default_text_color   =  40, 180, 40, 255
    default_cursor_color =  20,  90, 20, 221
    other_text_color     = 255, 255,  0, 255

# wether we should clear background image during dialogs
# (default is no, unless you set it differently in qingy config file)...
    clear_background = yes

# this is the native resolution of the theme, i.e. the resolution the theme
# was designed for. If qingy detects a running resolution different than this
# one, it will (try to) scale things so that they will look the same across
# all resolutions. If this is omitted, qingy will default to 800x600 to
# maintain compatibility with older themes...
    native_resolution = 1024x768

    #mouse_cursor = yes
    mouse_cursor =
    {
        "Arrow.png",  # image path
        0,            # hotspot: x offset
        0             # hotspot: y offset
    }
}

window
{
    # window geometry
    x      = 0
    y      = 96
    width  = 1024
    height = 64

    # text size: chose between 'small', 'medium' and 'large'
    # default is 'large'
    #text_size        = large
   
    # text alignment: 'left', 'center', 'right'. Default is 'left'
    text_orientation = center

    #colors: if not defined, theme defaults will be used
    #text_color   = 180, 40, 40, 255
    #cursor_color =  90, 20, 20, 221

    # update time, 0 means do not update, which is default
    # this setting has meaning only if window type is "label"
    # time = 0

    # window type, allowed values are:
    # "label", "button", "login", "password", "combo"
    type    = "label"
    content = "Welcome to <INS_CMD_HERE>"
    # The <INS_CMD_HERE> above is substituted with the output of 'command'
    command = "hostname"
}

window
{
    x      = 0
    y      = 746
    width  = 1024
    height = 38

    text_orientation = center
    text_size        = small

    text_color   = 200, 200, 40, 255
    time = 1

    type    = "label"
    content = "<INS_CMD_HERE>"
    command = "echo `date +%a,` `date +%d` `date +%b` `date +%Y,` `uptime`"
}

window
{
    x                = 128
    y                = 281
    width            = 153
    height           = 64
    text_orientation = right
    type             = "label"
    content          = "login:"
    linkto           = "login"
}

window
{
    x            = 307
    y            = 281
    width        = 716
    height       = 64
    text_color   = 200, 200, 40, 255
    cursor_color =  90,  90, 20, 221
    type         = "login"

    mouse_cursor =
    {
        "IBeam.png",  # image path
        0,            # hotspot: x offset
        16            # hotspot: y offset
    }
}

window
{
    x                = 128
    y                = 377
    width            = 153
    height           = 64
    text_orientation = right
    type             = "label"
    content          = "passwd:"
    linkto           = "password"
}

window
{
    x            = 307
    y            = 377
    width        = 716
    height       = 64
    text_color   = 180, 40, 40, 255
    cursor_color =  90, 20, 20, 221
    type         = "password"

    mouse_cursor =
    {
        "IBeam.png",  # image path
        0,            # hotspot: x offset
        16            # hotspot: y offset
    }
}

window
{
    x                = 128
    y                = 473
    width            = 153
    height           = 64
    text_orientation = right
    type             = "label"
    content          = "session:"
    linkto           = "session"
}

window
{
    x          = 307
    y          = 473
    width      = 716
    height     = 64
    text_color = 200, 200, 40, 255
    type       = "combo"

    # So far, the only combobox allowed is "sessions"
    command = "sessions"

    mouse_cursor =
    {
        "Hand.png",  # image path
        0,            # hotspot: x offset
        0             # hotspot: y offset
    }
}

window
{
    # window geometry
    x    = 966
    y    = 719
    type = "button"

    # Allowed commands:
    # "halt", "reboot", "sleep", "screensaver"
    command = "halt"

    # Image prefix: will be converted to
    # "<name>_normal.png" and "<name>_mouseover.png"
    content = "power"

    mouse_cursor =
    {
        "Hand.png",  # image path
        0,            # hotspot: x offset
        0             # hotspot: y offset
    }
}

window
{
    x       = 966
    y       = 659
    type    = "button"
    command = "reboot"
    content = "reset"

    mouse_cursor =
    {
        "Hand.png",  # image path
        0,            # hotspot: x offset
        0             # hotspot: y offset
    }
}

window
{
    x       = 966
    y       = 601
    type    = "button"
    command = "screensaver"
    content = "screensaver"

    mouse_cursor =
    {
        "Hand.png",  # image path
        0,            # hotspot: x offset
        0             # hotspot: y offset
    }
}

window
{
    x       = 966
    y       = 544
    type    = "button"
    command = "sleep"
    content = "sleep"

    mouse_cursor =
    {
        "Hand.png",  # image path
        0,            # hotspot: x offset
        0             # hotspot: y offset
    }
}

Arrow.pngHand.pngIBeam.png

En los temas que queramos personalizar deberemos de añadir toda la información que está en color rojo, si queremos usar los mismos temas de puntero para todos los temas, lo más fácil es crear enlaces simbólicos entre las diferentes carpetas de los temas de las 3 imágenes de arriba o las que el usuario desee usar. Adaptar los innumerables temas que existen en la actualidad para el servidor X no va a ser nada dificil.



Reiniciamos el Sistema y al iniciar aparece Qingy  


Captura de Qingy - 1
Tema: por defecto


Captura de Qingy - 2
Tema: dragonfly



Enlaces  


http://qingy.sourceforge.net >> La web de Qingy.

http://qingy.sourceforge.net/themes.php >> Temas.


Foro Galería Blog



Actualizado el 19-06-2015

Administradores de Sesiones - Qingy

Administradores de Sesiones - EntranceAdministradores de Sesiones - SLiM