Copyright
Copyright © José
Luis Lara Carrascal 2006-2015
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
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
Información general sobre el uso de los comandos |
En
los comandos largos, seleccionar el comando desde su comienzo,
omitiendo el símbolo ($ o #) y el espacio que existe entre
éste y el comando. Una vez lo hemos seleccionado, pegarlo con el
botón central del ratón sobre la
línea de comandos de la terminal, y darle a intro o enter.
El comando se queda grabado en el historial de bash, por lo que podemos
buscarlo con las flechas arriba y abajo del teclado para poder
utilizarlo posteriormente, hasta que desaparezca del historial, si no
volvemos a ejecutarlo y utilizamos otros comandos.
La barra inclinada hacia la izquierda (\) que aparece al final de la
línea de algunos comandos, sirve para cortar el comando y poder
seguir escribiéndolo en la siguiente línea. Cuando
seleccionamos un comando cortado, y lo pegamos en la línea de
comandos, la línea o líneas siguientes al comando de
inicio aparecerán con el símbolo inicial (>), que
indica la continuación del comando introducido en la siguiente
línea. Le damos a intro o enter, y éste se ejecutará sin ningún problema. En el historial de bash, el comando aparecerá todo junto,
sin saltos de línea.
Los comandos de bucle que empiezan por for y terminan en done, hay que seleccionarlos desde for hasta done inclusive. Y luego realizar la misma operación de copiado y pegado que se explica en el comienzo de esta nota de
información.
|
$ 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
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:
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 |
|
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:
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:
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,
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
}
}
|
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
Tema: por defecto
Tema: dragonfly
Enlaces
http://qingy.sourceforge.net >> La web de Qingy.
http://qingy.sourceforge.net/themes.php >> Temas.
|