Hola, que tal Linuxeros. Este artículo trata un tema importante para muchos: X Window. Más exactamente, cómo acelerar el inicio de X (abreviatura de X Window a partir de ahora) y populares Windows Managers como GNOME y KDE2. También, por supuesto incluye un buen y gratificante trago de hacking X.
La idea de escribir estas líneas tuvo origen en el hecho de no encontrar casi ningún texto en castellano sobre los temas que trata el artículo; en general todo lo que explico aquí lo leí en inglés. Espero que le sirva a los que gustan de hackear X.
Si bien X Window es rápido para ejecutar aplicaciones, en general tarda un poco en iniciarse (aunque es difícil notarlo en máquinas con configuraciones no tan antiguas); también se puede agregar que las distintas distribuciones aportaron lo suyo, y en su afán de simplificarle la vida al usuario, han puesto a correr en background (de fondo, sin que se vea nada), demonios (residentes) de dudosa utilidad real para el usuario en general.
Un poco de teoría...
X es rápido teniendo en cuenta la carga de imágenes, íconos varios y otros agregados de los entornos modernos (GNOME, KDE, etc.) al Window Manager de los viejos tiempos. Solo suele ser un poco lento a la hora de iniciarse, esto es porque al hacerlo hay muchos procesos (programas) que deben ejecutarse y sucede que X al iniciarse no se comporta como una aplicación multithread (multihilo) ...[Pausa]
¿Qué es multihilo?
En pocas palabras quiere decir que un programa es capaz de ejecutar separadamente distintos procesos (varios programas), es algo más técnico que eso, pero por ahora basta con esa aclaración.
[Play]...
Cuando iniciamos un entorno, digamos GNOME, hay varias aplicaciones que intentan iniciarse simultáneamente: un Window Manager, un panel de menu, íconos del administrador de archivos, la imagen del fondo de escritorio, distintos demonios en background: hotkeys, portapapeles (p/cortar y pegar), sonido, salvapantallas, etc. Y cómo X Window no se comporta al iniciar aplicaciones como multihilo, intenta ejecutarlos a todos al mismo tiempo dando y quitando tiempo de ejecución a cada uno de ellos, lo que aumenta apreciablemente el tiempo de ejecución individual (de cada aplicación) y por lo tanto el tiempo total que tarda X en cargarse...
Ahí es donde nos ponemos a pensar... entonces una Xterm que ejecutemos al inicio de X tarda más en iniciarse que si la cargamos luego de iniciado X (en realidad, cargarla al inicio de X es lo que hace que tarde más,)...
En programación un método para acelerar la ejecución de varios procesos (o programas) por parte de una aplicación no multihilo es hacer que los ejecute uno por uno, mejor dicho uno DESPUES del otro (secuencialmente)...
Conclusión: Para acelerar el inicio de X Window vamos a ejecutar los programas que se inician habitualmente, pero secuencialmente, uno después del otro.
Hackeando el inicio de X (lo básico)
Lo vamos a hacer desde la consola, para poder iniciar y apagar X mientras vemos cómo aumentamos la velocidad a la que se carga. Tenemos opciones, o entramos directamente en modo consola (si sabés cómo), o si entraste en modo gráfico saltamos al modo consola así:
CTRL + ALT + F1 [Enter]
(con esto saltamos desde el entorno gráfico a una consola)
Logeate como root, luego hacé:
init 3 [Enter]
(esto te manda al modo consola, si querés más datos, fijáte al final del artículo el anexo Niveles de Inicio)
Recomiendo el uso de Midnight Commander para trabajar con agilidad en la consola, para ejecutarlo hacé (en la consola):
mc [Enter]
y para ver y ocultar la línea de comando (con MC ejecutándose):
CTRL + O [Enter]
Para crear un archivo nuevo (y vacío):
touch nombredelarchivo_nuevo [Enter]
(a la carga...)
Para acelerar el inicio de X usaremos una aplicación de línea de comando llamada Xtoolwait. Resumiendo medianamente bien lo que explica la página man de xtoolwait (que está en inglés), esta aplicación sirve para ejecutar, durante el inicio de X un proceso detrás de otro (los programas a ejecutar se leen de un archivo) dejando para ejecutar al final un determinado programa... o sea, lo nosotros estamos buscando hacer:
(mi archivo para Xtoolwait)
A & wmpid=$! xtoolwait B xtoolwait C wait $wmpid
Puse las comillas de más arriba pues Xtoolwait más bien deja en espera el proceso y sigue con los demás, básicamente hace lo mismo que en un inicio normal pero a su manera (o sea, más rápido).
Más o menos esa es la idea (pero la sintaxis del archivo es la correcta). Créase o no, este tipo de inicio acelera espectacular y apreciablemente (no exagero), la velocidad con que se inicia X. Ver más información sobre Xtoolwait en el anexo al final del artículo.
Cómo se inicia X desde la consola normalmente (sin xtoolwait)
Básicamente con:
startx [Enter]
En pocas palabras, lo que hace startx (que es un script ubicado en /usr/X11R6/bin ), es iniciar el servidor X y luego cargar todos los programas habituales (como dije antes): un Window Manager, un panel de menu, íconos del administrador de archivos, la imagen del fondo de escritorio, distintos demonios en background: hotkeys, portapapeles (p/cortar y pegar), sonido, salvapantallas, etc.
Para crear tu propio inicio acelerado (un script en realidad), usaremos otro comando: xinit, que tiene una utilidad parecida a startx y más tarde combinaremos su uso con xtoolwait.
Lo que hace xinit es lanzar (ejecutar) el servidor X y luego carga una serie de programas que va leyendo línea por línea desde un archivo llamado .xinitrc , obviamente vos podés crear uno personalizado en tu directorio de usuario pero si no lo tenés existe uno por defecto en /etc/X11/xinit. La manera de usar xinit es:
xinit [Enter]
(lo que ejecuta el .xinitrc que exista: si tenés uno personalizado, ese, sino el que está por defecto).
Un archivo .xinitrc personalizado de ejemplo:
# ------------cortar aquí----------------
el numeral es un signo de comentario
así que las líneas luego de él no son ejecutadas
tampoco se tienen en cuenta las líneas en blanco
esta línea contiene un comando que pone de fondo
un color negro, si querés saber más del comando
hacé: man xsetroot [Enter]
xsetroot -solid black &
esta línea inicia el administrador de archivos
clásico de GNOME: GMC (no el Nautilus)
lo hace sin mostrar ventanas, solo los íconos
gmc --no-windows &
aquí finalmente iniciamos un Window Manager
(el de GNOME), ten en cuenta que NO iniciamos
ningún panel, así que no aparece nada
(excepto el fondo negro y los íconos) a menos que
hagas click con el botón del medio
(probá los otros y/o combinaciones de botones
si tu mouse no tiene ese)
sawfish
------------terminar de cortar aquí--------
Nota muy importante: como se ve, al final de cada línea (excepto la última), hay un ampersand (el símbolo en el teclado es &), este signo hace que los programas iniciados se ejecuten en background (de fondo), solo el último programa se ejecuta normalmente. Esto tiene un fin: al finalizar el programa que no está en background (que no tiene &) finalizamos la sesion X, por lo general siempre se coloca al final al binario que inicia el Window Manager (pero puede haber excepciones).
Para probar cremos el .xinitrc de ejemplo en nuestro directorio de usuario (HOME); desde la consola cambiamos a él rápidamente con:
cd $HOME [Enter]
Otra nota importante: xinit aparte de leer por defecto el archivo .xinitrc que exista, soporta leer cualquier archivo que le indiquemos (funciona, obviamente si el archivo en cuestión tiene una sintaxis apropiada, como en el ejemplo). Creemos un archivo xin.personal y copiemos el .xinitrc de ejemplo que vimos antes:
touch xin.personal [Enter]
Luego desde MC (Midnight Commander), nos posicionamos sobre él y lo editamos (haciendo F4), tipeamos las líneas del ejemplo, grabamos (F2) y salimos (ESC). Ahora ejecutemos nuestro inicio personalizado:
xinit ~/xin.personal [Enter]
Listo. Como se puede apreciar, X Window no es más que un conjunto de programas que brindan un entorno gráfico para trabajar (y otras cosas).
[PAGEBREAK]
¿Cómo sería ejecutar X Window sin ningún programa?
Primero salí de tu sesión actual eligiendo la opción Salir del menú de Sawfish o sino haciendo:
CTRL + ALT + Backspace [Enter]
(con esta combinación de teclas matás al servidor X y por ende a cualquier programa que esté corriendo en X Window).
Para ver X sin ningún otro programa (X Window solo):
X [Enter]
(sí, va en mayúsculas; no, no funciona en minúsculas)
Tocando un poco al GNOME
¿Qué onda con GNOME? ¿Por qué acelerar su inicio si prende rápido? Yo digo porqué no...
Mirando un poco por el sistema, y en el CD de instalación del Linux que uso (Linux-Mandrake 8.0), revisando el listado de archivos que contienen los rpm (lo hacés con rpm -ql nombre_del rpm o gráficamente con KPackage o GNOrpm), que forman el GNOME y los directorios de instalación (ver en los mismos rpm), vemos que el susodicho está formado por muchos binarios, y hay un par con nombres sospechosos como panel o gnome-session...
Bueno, la deducción rápida es que el inicio por defecto de GNOME lo hace un binario (ejecutable) llamado gnome-session que ejecuta (pero no muy rápido, o no tanto como nos gustaría), todas las aplicaciones básicas del entorno GNOME (panel, fondo de escritorio, íconos, etc.). Lo podemos ejecutar a mano con un .xinitrc, cremos uno:
cd $HOME [Enter] touch xin.gno [Enter]
Editamos con el MC (igual que hicimos antes), pero solo agregamos (al archivo vacio) una línea con gnome-session, nada más. Quedaría así:
# Asi tiene que quedar el xin.gno que creamos recién gnome-session
Para ver si funcionó, lo ejecutamos (con el comando xinit):
xinit ~/xin.gno [Enter]
Y ahí vemos como se inicia normalmente el entorno, luego salimos para seguir de juerga...
Objetivos
Si lo que queremos es iniciar a mano un entorno gráfico (o un Window Manager sólo incluso), nos proponemos implícitamente la necesidad de ejecutar (al menos):
y además podríamos ejecutar otros chiches:
Manos al GNOME
Entonces creemos un .xinitrc personalizado para iniciar el GNOME a mano:
cd $HOME [Enter] touch xin.GNOME-pers [Enter]
Editamos con MC (luego grabamos los cambios con F2)
#---------cortar aquí----------------------
primero ponemos un fondo simple, solo un color
si querés saber ms de esto fijate al final del artículo,
el anexo Fondos de Escritorio
xsetroot -solid black &
ahora el salvapantallas
si querés saber ms de esto fijate al final del artículo,
el anexo Salvapantallas
xscreensaver --no-splash &
los íconos de escritorio (del gmc)
gmc --no-windows &
encendemos el numlock, este binario lo trae la
distribución Mandrake 7.x u 8.0
si no la usás podés omitir ésta línea
o intentar conseguir y usar el programa,
en www.rpmfind.net buscá: numlock...
enableX11numlock &
iniciamos el Window Manager por defecto de GNOME
(aunque podríamos iniciar otro como
el window maker por ejemplo).
sawfish &
por último iniciamos el panel...
sí, así se llama el binario. No, no es broma.
panel
---------terminar de cortar aquí-------------
Si no lo notaron, se los cuento: en este .xinitrc personalizado para iniciar el GNOME a mano pusimos en último lugar al panel en vez de al Window Manager. ¿Por qué? Porque, como dije antes, el último programa (el que no lleva &), es el que al finalizarlo cierra la sesion X (apaga X Window junto con todos los demás programas que se están ejecutando en él), y a nosotros nos interesa que el GNOME a mano se apague al cerrar el Panel de Menu, por eso lo ponemos al final.
Ahora probamos...
xinit ~/xin.GNOME-pers [Enter]
...Y así encendemos GNOME apenas un poquito ms rápido que de costumbre.
Acelerando el inicio de GNOME
Los .xinitrc que estuvimos creando tienen, pese a prender un poco más rápido, tienen el mismo problema de startx: no se llevan bien con la ejecución no multihilo del inicio de X Window y hacen lenta su inicialización. Si convertimos al xin.GNOME-pers a la sintaxis de xtoolwait quedaría así:
#---------cortar aquí---------------------- #
esto es parte de la sintaxis del xtoolwait
normalmente acá iría el Window Manager
pero en el caso de GNOME colocamos
el panel de menu
panel & wmpid=$!
delante de cada comando debemos colocar xtoolwait
xtoolwait sawfish & xtoolwait xsetroot -solid black & xtoolwait xscreensaver --no-splash & xtoolwait gmc --no-windows & xtoolwait enableX11numlock &
al final cerramos SIEMPRE con esta línea
wait $wmpid
---------terminar de cortar aquí-------------
probamos como antes:
xinit ~/xin.GNOME-pers [Enter]
Y listo. Si quieren contar los segundos menos que tarda GNOME en iniciarse... Yo les cuento que en mi máquina X tarda:
Pueden variar de máquina a máquina según el hardware y las optimizaciones personales al sistema. Con el resto de los Window Managers que probé el incremento en la velocidad de carga de X es mayor inclusive.
[PAGEBREAK]
Notas sobre el inicio acelerado
Es necesario tener en cuenta dos cosas (sin relación entre sí):
Anexos
Están relacionados con el artículo, así que si leen algo que parece hablar de algo ya mencionado se refiere seguramente al mencionado texto.
xtoolwait (cómo, dónde, etc.)
Es un programa útil, pero por lo general no se instala por defecto en ninguna distribución, a pesar de que la mayoría lo incluye entre los paquetes disponibles para instalar. Últimamente, la mayoría de las distribuciones suele incluirlo en el disco de instalación. Pueden buscar xtoolwait (y en general cualquier programa de Linux del cual conozcan el nombre), así:
Niveles de inicio (runlevels)
Los niveles de inicio nos importan por el llamado inicio con X y sin X. Bien, Linux posee varios niveles de inicio (por lo general 6), los que nos interesan a nosotros son el 3 y el 5. El nivel 3 inicia Linux con todos los servicios (básicos y de red) pero SIN iniciar automáticamente X Window. El nivel 5 inicia las misma cosas que el nivel 3 pero con X Window.
En las distintas distribuciones hay varias formas de cambiar el runlevel de inicio por defecto (Linuxconf, Webmin, el Panel de Control de Mandrake, el YAST en SuSE, etc.). Nosotros vamos a ver una que sirve para la mayoría de las distros...
Como usuario root editamos el archivo /etc/inittab (con MC si querés). Lo que vemos es esto (yo traduje el archivo de un Linux-Mandrake 8.0, pero el tuyo debe ser parecido y casi seguro, un 99.9 %, está en inglés ):
Fijáte en el medio más o menos para ver cómo cambiar de runlevel.
------------------inicio del archivo----------------------
#
inittab
Este archivo describe como el proceso INIT debería
setear el sistema en cierto nivel de inicio
#
Runlevel por defecto.
Los runlevels usados por RHS (Sistemas Red Hat)
#
0 - halt (NO setee este runlevel por defecto)
1 - Single user mode (Modo usuario único)
2 - Multiuser, without NFS
(Lo mismo que el 3, pero si Ud. no tiene trabajo en red)
3 - Full multiuser mode (Modo multiusuario completo sin X)
4 - unused (sin usar)
5 - X11 (Modo multiusuario completo con X Window)
6 - reboot (NO setee este runlevel por defecto)
#
ACA CAMBIAMOS DE RUNLEVEL
id:3:initdefault:
esta linea nos dice con runlevel iniciaremos,
(un runlevel 3 en este caso)
si lo queremos cambiar (de 3 a 5, de 5 a 3)
lo hacemos modificando el número
por ejemplo: id:5:initdefault:
lo que iniciaría nuestro Linux en modo gráfico (runlevel 5).
PRECAUCION: NO SETEE EL RUNLEVEL A 0 (CERO) O A 6 (SEIS).
Correr xdm (como el KDM o el GDM, pero menos vistoso)
en el runlevel 5. En realidad, las distros suelen hackear
esta linea haciendo que en vez de xdm se inicie kdm o gdm.
xdm es ahora un servicio separado
x:5:respawn:/etc/X11/prefdm -nodaemon
---------fin del archivo--------------------------
Para más información:
man inittab [Enter]
Salvapantallas
El viejo salvapantallas está representado en Linux por una aplicación llamada xscreensaver que nos permite tener a nuestra disposición una variada lista de screensavers (salvapantallas) para mantener nuestro monitor funcional por muchos años o hasta que se queme en un corte de Luz :-).
Les cuento: el programa posee dos binarios: xscreensaver y xscreensaver-demo. El primero nos permite cargar como demonio (residente) el salvapantallas y como es usual al cabo de tanto tiempo de inactividad del mouse y del teclado activar un salvapantallas al azar. El segundo nos permite probar los distintos salvapantallas con que cuenta el programa y ajustar los parámetros de tiempo correspondientes. Sin embargo es conveniente setear desde el inicio (en el .xinitrc) estos parámetros (por ejemplo...):
xscreensaver -timeout 1 -cycle 2 -no-splash &
Lo quiere decir: iniciar xscreensaver, activarlo al cabo de 1 minuto de inactividad, cambiar el salvapantallas cada 2 minutos, e iniciar sin mostrar la pantalla de presentación del programa.
Desde ya les cuento que existe un problema (cuya explicación traducida nunca encontré y en inglés no se entiende mucho), por el que no se ejecuta correctamente si iniciamos una sesión como root (es un problema de seguridad por lo que entendí), si vos entendés más el tema, abajo al final está mi mail, por favor contame.
Si quieren más datos (que estos) hagan:
man xscreensaver [Enter]
Fondo de escritorio
Lo que parece algo tan simple bien podría ser una pequeña pesadilla si no tenemos muchas ideas en las que basarnos. Un fondo de escritorio, en Linux se setea de 2 maneras:
# viene con X Window xsetroot
viene con Window Maker
wmsetbg
programa de edición de imágenes
que soporta la línea de comando
xv
p/ visualización, edición, seteo del Fondo de escritorio, etc.
qiv
lo trae el Blackbox 0.5.x
bsetroot
lo trae el Blackbox 0.6.x
bsetroot2
Para ver cómo funciona cada uno simplemente necesitamos una consola en una sesión X ya iniciada (no importa qué Window Manager usemos) e ir probando uno por uno sus parámetros teniendo la idea de que permiten (en general): centrar una imagen, escalar una imagen, hacer un mosaico con una imagen, difuminar una imagen, iluminar/oscurecer una imagen, etc.
La idea de sintaxis para cualquiera de los comandos antes mencionados es ésta:
comando -parámetros /path/al/archivo/archivodeimagen [Enter]
Las imágenes pueden estar en formato .jpg, .png, .gif, etc. Los .bmp y .pcx no suelen estar soportados. Para ver cuales son los posibles parámetros hacer (en una consola):
Algunos ejemplos:
wmsetbg -S -a ~/.blackbox/backgrounds/Avengelyne.jpg bsetroot2 -mod 4 4 -bg rgb:00/34/46 -fg rgb:11/48/59 xv -root -smooth -max -quit ~/.blackbox/backgrounds/bin.jpg xv -root -max -quit ~/.blackbox/backgrounds/project9.jpg
Para encontrar mas ejemplos te recomiendo fijarte en las últimas líneas de los "themes" de Window Maker que están en:
/usr/X11R6/share/WindowMaker/Themes /home/usuario/GNUStep/Library/WindowMaker/Themes/
y en las últimas líneas de los "themes" del Blackbox que están en:
/usr/share/blackbox/themes /usr/share/blackbox/styles /home/usuario/.blackbox/themes
Si no tenés "themes" fijáte en www.themes.org. (p/KDE,KDE2.x,GNOME, Sawfish, WindowMaker, etc.).
[PAGEBREAK]
Cómo sería iniciar un Window Manager (que no sea un entorno como GNOME)
Iniciaremos ahora un Window Manager distinto a Sawfish (el de GNOME). Ahí vamos de nuevo... Trataremos de iniciar Blackbox, que es famoso por su bajo consumo de recursos y su buena apariencia. En este caso, el Window Manager va al final porque es el programa que al finalizar, cierre X.
Creamos un archivo .xinitrc personal en el directorio de usuario:
cd $HOME [Enter] touch xin.blackbox [Enter]
---------cortar aquí----------------------
#
primero ponemos un fondo simple, solo un color
si querés saber más de esto fijate al final del artículo,
en el anexo "Fondos de escritorio"
xsetroot -solid black &
ahora el salvapantallas
si querés saber más de esto fijate al final del artículo,
en el anexo "Salvapantallas"
xscreensaver --no-splash &
los íconos de escritorio (del gmc)
gmc --no-windows &
encendemos el numlock, este binario lo trae la
distribución Mandrake 7.x u 8.0
si no la usás podés omitir la línea que sigue (o conseguir el programa...)
enableX11numlock &
iniciamos el binario que ejecuta el Window Manager Blackbox
éste es el que NO LLEVA EL AMPERSAND (&)
blackbox
---------terminar de cortar aquí-------------
Y para ver...
xinit ~/xin.blackbox [Enter]
Optimizado con xtoolwait, quedaría así:
#---------cortar aquí---------------------- # blackbox & wmpid=$! xtoolwait xsetroot -solid black & xtoolwait xscreensaver --no-splash & xtoolwait gmc --no-windows xtoolwait enableX11numlock & wait $wmpid #
---------terminar de cortar aquí-------------
Otra vez...
xinit ~/xin.blackbox [Enter]
Y Uds. me como va la velocidad de carga...
Nombres de binarios útiles
Un listado breve con los nombres de los binarios que inician los Window Manager más usados:
[PAGEBREAK]
Hacking al KDE 2 (funcionó en KDE 2.1.x)
Realizado en Linux-Mandrake 8.0, seguramente será similar en otras distros, pero no doy un 100% de seguridad de que funcione bien.
KDE2 (2.1.x) NO ARRANCA RÁPIDO, y es una de las preocupaciones más importantes en la lista de deseos para los desarrolladores, pero mientras ellos buscan la manera de iniciar más rápido por su lado nosotros vamos a hackearlo por el otro. De todas maneras recientemente, se descubrió la manera de acelerar KDE2 hasta un 50%, lo que probablemente veamos implementado en las versiones 2.2.0 y posteriores, así prepárence para el download...
Para empezar les cuento que el script que arranca KDE2 se llama startkde y está ubicado en /usr/bin; siguiendo en la línea de los .xinitrc les muestro cómo es un correcto inicio del KDE2. Creamos un archivo .xinitrc para el experimento:
cd $HOME [Enter] touch xin.kde2 [Enter]
Lo editamos con MC (Midnight...) agregamos lo que sigue (nada más por ahora)
startkde
y grabamos luego con F2. Ahora lo probamos:
xinit ~/xin.kde2 [Enter]
Se inició bien, ¿no? ¿Podría ser más rápido tal vez? Veamos... startkde es un script, o sea una serie de instrucciones que se ejecutan (en general) línea por línea. Editemóslo, pero no al original sino a una copia de él:
cd /usr/bin [Enter] cp startkde /home/usuario [Enter]
(también podés copiarlo usando MC)
Luego lo editamos (F2 desde el MC estando sobre el archivo). Oops! Son muchas líneas, ¿no? Pero no nos dejemos apabullar por su aparente complejidad porque esos grandes bloques de letras de color rojo (si estás en una consola FUERA de X son de ese color), son comentarios que nos explican (en inglés) paso a paso que es lo que hace el script.
Si leeemos con atención los comentarios de Dadou (el que los escribió para Linux-Mandrake 8.0) nos damos cuenta de que la mayoría de las líneas (hasta Boot Sequence), sólo son imprescindibles en el primer arranque del KDE2 y otras son reaseguros por si agregamos fuentes nuevas o por si decidimos cambiar de lugar nuestras carpetas KDE (desktop, etc.), también hay unas líneas que se encargan de agregar determinados íconos (los del Mandrake) a nuestro Escritorio, etc.
Así, un arranque correcto solo sería necesario de vez en cuando, al hacer algún cambio muy radical en nuestra configuración del KDE2 (no, no me refiero a cambiarle las fuentes, el theme y/o el style, ni a la activación).
Así que podríamos borrar (o mejor aún, comentar) las líneas sobrantes para evitar que se ejecuten cada vez que entramos a KDE. Es recomendable modificar sólo la copia que ya tenemos en nuestro directorio de usuario y dejar el original en /usr/bin INTACTO.
Fijénse que hay unos cuantos comentarios explicativos (en castellano digo):
--------------comentamos todo desde aquí----------------
--------------fijate hasta donde------------------------
#
DEFAULT KDE STARTUP SCRIPT ( KDE-2.1.1)
#
Modified for Linux-Mandrake by David BAUDENS
Set a left cursor instead of the standard X11 "X" cursor
This is especially necessary on slow machines, where
starting KDE takes one or two minutes until anything
appears on the screen.
#
Set the background to plain grey.
The standard X background is nasty, causing moire effects
and exploding people's heads. We use colours from
the standard Linux-Mandrake palettes for
those with palettised displays.
--------------hasta aquí----------------
#
esta línea es recomendable dejarla
porque le da un color agradable al fondo de X
mientras se inicia KDE
xsetroot -cursorname leftptr -solid #666699
---------comentamos todo desde aquí (otra vez)-----------
Dadou - 2.1.1-4mdk
Be sure that ~/Desktop/ is created as soon as possible
if [ ! -d ~/Desktop ] ; then
mkdir -p ~/Desktop/ ;
fi
Dadou - 2.1.1-4mdk
Be sure that ~/.kde/Autostart/ is created as soon as
possible
if [ ! -d ~/.kde/Autostart/ ] ; then
mkdir -p ~/.kde/Autostart/ ;
fi
Dadou 2.1.1-9mdk
Create directory for bokkmakrs and copy them
if [ ! -d ~/.kde/share/apps/konqueror ] ; then
mkdir -p ~/.kde/share/apps/konqueror/
&& cp /usr/share/mdk/bookmarks.xml
~/.kde/share/apps/konqueror/
fi
Dadou - 2.1.1-4mdk
Force icons alignement to verticaly (work around for a
kdesktop's bug: at first startup, icons are always
horizontaly aligned, even if we want a vertical
alignement).
if [ ! -e ~/Desktop/.ArrangeIcons ] ; then
cp /usr/share/mdk/ArangeIcons.desktop ~/.kde/Autostart/
&& touch ~/Desktop/.ArrangeIcons
else rm -f ~/.kde/Autostart/ArangeIcons.desktop
fi
Dadou - 2.1.1-11mdk
Need for setkdefont (see above)
if [ ! -d $HOME/.kde/share/config ] ; then
mkdir -p $HOME/.kde/share/config
fi
Dadou - 2.1.1-4mdk
Create Linux-Mandrake's links on Desktop
/usr/bin/kdesktop-links > /dev/null 2>&1
Dadou - 2.1.1-4mdk
Define variable used by some Linux-Mandrake's
applications to display their documentation
export HELP_BROWSER="kfmclient openProfile webbrowsing"
export BROWSER="kfmclient openProfile webbrowsing"
-----------------------------------------
ESTO NO PORQUE NOS PERMITE USAR LAS TECLAS
DE WIN EN KDE
Dadou - 2.1.1-4mdk
To be able to use the Windows key to open the K menu
xmodmap -e 'keycode 115=F13' xmodmap -e 'keycode 117=Menu'
------------------------------------------
Deush - 2.1.1-10mdk
Set lang and fonts according to locales
Dadou - 2.1.1-11mdk
Remove uneeded test on user settings and old KDE stuff
+ don't modify Konqueror Minimum Font Size (or do it in
sources)
[ -f /etc/profile.d/lang.sh ] && source /etc/profile.d/lang.sh
function setkdefont()
{
[ "$CHARSET" = "iso8859-15" ]
&& CHARSET=iso8859-1
cat >>$HOME/.kde/share/config/kdeglobals <
[Locale]
Country=$COUNTRY
Language=$LNG
Charset=$CHARSET
[WM]
activeFont=helvetica,12,5,$CHARSET,75,0
EOF
cat >>$HOME/.kde/share/config/konquerorrc <
[FMSettings]
StandardFont=helvetica,12,5,$CHARSET,0,0
EOF
cat >>$HOME/.kde/share/config/kdesktoprc <
[FMSettings]
StandardFont=helvetica,12,5,$CHARSET,50,0
EOF
}
if [ ! -e $HOME/.kde/share/config/kdeglobals ]; then
First startup - as an additional hack, get locales in sync with
the system
The language is the first part of the locale, e.g. en for en_US
LNG= echo $LANG |sed -e "s/@.//;s/..//;s/_.*//"
The country is the second part of the locale (us for en_US); fall
back to the first part if necessary (some broken configs use
LANG=de instead of LANG=de_DE...)
COUNTRY= echo $LANG |sed -e "s/._//;s/@.//;s/..//;s/_.//" |tr A-Z a-z
CHARSET= locale charmap |sed -e "s/ISO-/ISO/g" |tr A-Z a-z
Some locales require special treatment...
if [ $LANG = ca ] ; then
COUNTRY=es
elif [ $LANG = cs ] ; then
COUNTRY=cz
elif [ $LANG = da ] ; then
COUNTRY=dk
elif [ $LANG = el ] ; then
COUNTRY=gr
elif [ $LANG = et ] ; then
COUNTRY=ee
elif [ $LANG = eo ] ; then
COUNTRY=C
elif [ $LANG = en_US ] ; then
LNG=C
elif [ $LANG = en_GB ] ; then
LNG=en_GB
Dadou - 2.1.1-11mdk - Hebrew CHARSET should be
iso8859-8 but KDE crashes at
startup when it uses it. Set CHARSET to iso10646-1
allow KDE to start and display correct characters but
it unfortunaly displays ugly fonts.
elif [ $LANG = he ] ; then
CHARSET=iso10646-1 COUNTRY=il
Dadou - 2.1.1-11mdk - Hebrew CHARSET should be
iso8859-8 but KDE crashes at
startup when it uses it. Set CHARSET to iso10646-1
allow KDE to start and display correct characters but
#
elif [ $LANG = he_IL ] ; then
CHARSET=iso10646-1 COUNTRY=il
elif [ $LANG = nn_NO ] ; then
LNG=no_NY
elif [ $LANG = ko ] ; then
CHARSET=iso10646-1 COUNTRY=kr
elif [ $LANG = ko_KR ] ; then
CHARSET=iso10646-1 COUNTRY=kr
elif [ $LNG = zh -a $COUNTRY = hk ] ; then
LNG=zh_TW
elif [ $LNG = zh ]; then
LNG=$LANG
elif [ $LNG = pt -a $COUNTRY = br ] ; then
LNG=pt_BR
fi
setkdefont
fi
--------------hasta aquí----------------
--------------listo--------------------
----luego fijte bien que es lo que se comenta----
Boot sequence:
#
kdeinit is used to fork off processes which
improves memory usage and startup time.
#
* kdeinit starts the dcopserver and klauncher first.
* Then kded is started. kded is responsible for
keeping the sycoca
database up to date. When an up to date database
is present it goes
into the background and the startup continues.
* Then kdeinit starts kcminit. kcminit performs
initialisation of certain devices according to
the user's settings
#
* Then ksmserver is started which in turn starts
1) the Window Manager (kwin)
2) everything in $KDEDIR/share/autostart
(kdesktop, kicker, etc.)
3) the rest of the session.
Prevent an ever growing .ICEauthority file,
since that will kill application
startup performance.
rm -f $HOME/.ICEauthority
hack, workaraound, evil
rm -f $HOME/.DCOPserver
The user's personal KDE directory is usually
$HOME/.kde, but this setting
may be overridden by setting KDEHOME.
---------aca hay algo comentado---------
kdehome=$HOME/.kde
test -n "$KDEHOME" && kdehome=$KDEHOME
---------hasta aca------------------
Activate the kde font directories.
#
There are 4 directories that may be used
for supplying fonts for KDE.
#
There are two system directories.
These belong to the administrator.
There are two user directories, where the
user may add her own fonts.
#
The 'override' versions are for fonts that
should come first in the list,
i.e. if you have a font in your 'override'
directory, it will be used in
preference to any other.
#
The preference order looks like this:
user override, system override, X, user, system
#
Where X is the original font database that was
set up before this script
runs.
---------aca hay algo comentado---------
usr_odir=$kdehome/share/fonts/override
usr_fdir=$kdehome/share/fonts
if test -n "$KDEDIRS"; then
kdedirs_first= echo $KDEDIRS|sed -e 's/:.*//'
sysodir=$kdedirsfirst/share/fonts/override
sysfdir=$kdedirsfirst/share/fonts
else
sys_odir=$KDEDIR/share/fonts/override
sys_fdir=$KDEDIR/share/fonts
fi
We run mkfontdir on the user's font dirs
(if we have permission) to pick
up any new fonts they may have installed.
If mkfontdir fails, we still
add the user's dirs to the font path, as
they might simply have been made
read-only by the administrator, for whatever reason.
test -d $usrodir && (mkfontdir $usrodir ; xset +fp $usr_odir)
test -d $sysodir && xset +fp $sysodir
test -d $usrfdir && (mkfontdir $usrfdir ; xset fp+ $usr_fdir)
test -d $sysfdir && xset fp+ $sysfdir
Ask X11 to rebuild its font list.
xset fp rehash
---------hasta aca--------------
------y todo el resto queda igual-----
Link "tmp" resource to directory in /tmp
Creates a directory /tmp/kde-$USER and links
$KDEHOME/tmp-$HOSTNAME to it.
lnusertemp tmp >/dev/null
Link "socket" resource to directory in /tmp
Creates a directory /tmp/ksocket-$USER and links $KDEHOME/socket-$HOSTNAME to it.
lnusertemp socket >/dev/null
the splashscreen and progress indicator
ksplash
We set LDBINDNOW to increase the efficiency of kdeinit.
kdeinit unsets this variable before loading applications.
LDBINDNOW=true kdeinit +kcminit
The notification daemon. Not started with
kdeinit because it uses threads
and kdeinit doesn't.
knotify
finally, give the session control to the session manager
Syntax: ksmserver [--restore] [--windowmanager ]
if no windowmanager is specified, ksmserver will
ensure kwin is started.
[--restore] should be controlled by kdm
exec ksmserver --restore
[PAGEBREAK]
Luego de todo, si cronometramos los tiempos de inicio del script original contra el script tocado no vemos diferencias significativas (!!!). Paciencia. Llegó la hora de nuestro amigo xtoolwait, y veamos que puede hacer para que se inicie más rápido el KDE.
Revisando y probando lo que funcionó fue esto (que por supuesto va dentro de un .xinitrc personalizado:
#--------cortar aquí------------------------
esto es p/que se inicie + rapido
rm -f $HOME/.ICEauthority
esto tambien
rm -f $HOME/.DCOPserver
este es el wm de kde
kwin & wmpid=$!
el fondo azul
xtoolwait xsetroot -cursorname leftptr -solid '#666699'
para que las teclas de win
xtoolwait xmodmap -e 'keycode 115=F13'
funcionen en KDE
xtoolwait xmodmap -e 'keycode 117=Menu'
el escritorio del KDE
xtoolwait kdesktop
el panel del KDE
xtoolwait kicker
las teclas rpidas del KDE
xtoolwait khotkeys
wait $wmpid
--------cortar aquí-------------------------
Copiemos esto en un .xinitrc personalizado y ejecutemos...
Se prendió más rápido, ¿no? Pero no hay antialiasing de fuentes, eso todavía no lo pude hacer funcionar; pero fuera de eso, mis tiempos de inicio fueron:
Tipo de "startkde" / Tiempo
Original: 26 a 39 segundos
Modificado: 24 a 25 segundos
Modificado (con xtoolwait): 14 a 15 segundos
Pueden variar de máquina a máquina según el hardware y las optimizaciones personales al sistema.
Notas sobre el inicio acelerado de KDE
Como vimos existen dos maneras de iniciar KDE aparte del modo normal, la primera nos permite omitir (no realizar), ciertas tareas que por lo general solo son necesarias la primera vez que el usuario ejecuta el KDE o luego de realizar personalizaciones muy específicas (por ejemplo: modificar el directorio por defecto donde se ubicarn los íconos del escritorio) es el modo "acelerado sin xtoolwait". El segundo modo implica el uso de xtoolwait . Por esto si hacemos cambios radicales o muy amplios en la interfaz (no, no me refiero a cambiar themes y styles), vinculados con fuentes nuevas, cambio de los directorios por defecto, etc. es necesario que iniciemos normalmente el KDE la primera vez luego de realizados los cambios, también sería apropiado que esos mismos cambios los hagamos desde un KDE iniciado normalmente.
Como ven, el entorno KDE tiene similitudes funcionales con el GNOME.
En el modo "acelerado por xtoolwait", debemos acotar algo, si tenemos seteado el KDE para usar fuentes con antialiasing, éstas se verán normalmente, es decir sin antialiasing. No se preocupen, si iniciamos en modo normal o "acelerado sin xtoolwait" eso no sucede, es más podemos iniciar alternativamente en uno y otro modo, y nuestras queridas fuentes con antialiasing volverán siempre si iniciamos normalmente o "acelerado sin xtoolwait".
Sigan probando a ver si conseguimos fuentes con antialiasing...
[Locale]
Country=$COUNTRY
Language=$LNG
Charset=$CHARSET
[WM]
activeFont=helvetica,12,5,$CHARSET,75,0
EOF
cat >>$HOME/.kde/share/config/konquerorrc <
[FMSettings]
StandardFont=helvetica,12,5,$CHARSET,0,0
EOF
cat >>$HOME/.kde/share/config/kdesktoprc <
[FMSettings]
StandardFont=helvetica,12,5,$CHARSET,50,0
EOF
}
if [ ! -e $HOME/.kde/share/config/kdeglobals ]; then
First startup - as an additional hack, get locales in sync with
the system
The language is the first part of the locale, e.g. en for en_US
LNG= echo $LANG |sed -e "s/@.//;s/..//;s/_.*//"
The country is the second part of the locale (us for en_US); fall
back to the first part if necessary (some broken configs use
LANG=de instead of LANG=de_DE...)
COUNTRY= echo $LANG |sed -e "s/._//;s/@.//;s/..//;s/_.//" |tr A-Z a-z
CHARSET= locale charmap |sed -e "s/ISO-/ISO/g" |tr A-Z a-z
Some locales require special treatment...
if [ $LANG = ca ] ; then
COUNTRY=es
elif [ $LANG = cs ] ; then
COUNTRY=cz
elif [ $LANG = da ] ; then
COUNTRY=dk
elif [ $LANG = el ] ; then
COUNTRY=gr
elif [ $LANG = et ] ; then
COUNTRY=ee
elif [ $LANG = eo ] ; then
COUNTRY=C
elif [ $LANG = en_US ] ; then
LNG=C
elif [ $LANG = en_GB ] ; then
LNG=en_GB
Dadou - 2.1.1-11mdk - Hebrew CHARSET should be
iso8859-8 but KDE crashes at
startup when it uses it. Set CHARSET to iso10646-1
allow KDE to start and display correct characters but
it unfortunaly displays ugly fonts.
elif [ $LANG = he ] ; then
CHARSET=iso10646-1 COUNTRY=il
Dadou - 2.1.1-11mdk - Hebrew CHARSET should be
iso8859-8 but KDE crashes at
startup when it uses it. Set CHARSET to iso10646-1
allow KDE to start and display correct characters but
#
elif [ $LANG = he_IL ] ; then
CHARSET=iso10646-1 COUNTRY=il
elif [ $LANG = nn_NO ] ; then
LNG=no_NY
elif [ $LANG = ko ] ; then
CHARSET=iso10646-1 COUNTRY=kr
elif [ $LANG = ko_KR ] ; then
CHARSET=iso10646-1 COUNTRY=kr
elif [ $LNG = zh -a $COUNTRY = hk ] ; then
LNG=zh_TW
elif [ $LNG = zh ]; then
LNG=$LANG
elif [ $LNG = pt -a $COUNTRY = br ] ; then
LNG=pt_BR
fi
setkdefont
fi
--------------hasta aquí----------------
--------------listo--------------------
----luego fijte bien que es lo que se comenta----
Boot sequence:
#
kdeinit is used to fork off processes which
improves memory usage and startup time.
#
* kdeinit starts the dcopserver and klauncher first.
* Then kded is started. kded is responsible for
keeping the sycoca
database up to date. When an up to date database
is present it goes
into the background and the startup continues.
* Then kdeinit starts kcminit. kcminit performs
initialisation of certain devices according to
the user's settings
#
* Then ksmserver is started which in turn starts
1) the Window Manager (kwin)
2) everything in $KDEDIR/share/autostart
(kdesktop, kicker, etc.)
3) the rest of the session.
Prevent an ever growing .ICEauthority file,
since that will kill application
startup performance.
rm -f $HOME/.ICEauthority
hack, workaraound, evil
rm -f $HOME/.DCOPserver
The user's personal KDE directory is usually
$HOME/.kde, but this setting
may be overridden by setting KDEHOME.
---------aca hay algo comentado---------
kdehome=$HOME/.kde
test -n "$KDEHOME" && kdehome=$KDEHOME
---------hasta aca------------------
Activate the kde font directories.
#
There are 4 directories that may be used
for supplying fonts for KDE.
#
There are two system directories.
These belong to the administrator.
There are two user directories, where the
user may add her own fonts.
#
The 'override' versions are for fonts that
should come first in the list,
i.e. if you have a font in your 'override'
directory, it will be used in
preference to any other.
#
The preference order looks like this:
user override, system override, X, user, system
#
Where X is the original font database that was
set up before this script
runs.
---------aca hay algo comentado---------
usr_odir=$kdehome/share/fonts/override
usr_fdir=$kdehome/share/fonts
if test -n "$KDEDIRS"; then
kdedirs_first= echo $KDEDIRS|sed -e 's/:.*//'
sysodir=$kdedirsfirst/share/fonts/override
sysfdir=$kdedirsfirst/share/fonts
else
sys_odir=$KDEDIR/share/fonts/override
sys_fdir=$KDEDIR/share/fonts
fi
We run mkfontdir on the user's font dirs
(if we have permission) to pick
up any new fonts they may have installed.
If mkfontdir fails, we still
add the user's dirs to the font path, as
they might simply have been made
read-only by the administrator, for whatever reason.
test -d $usrodir && (mkfontdir $usrodir ; xset +fp $usr_odir)
test -d $sysodir && xset +fp $sysodir
test -d $usrfdir && (mkfontdir $usrfdir ; xset fp+ $usr_fdir)
test -d $sysfdir && xset fp+ $sysfdir
Ask X11 to rebuild its font list.
xset fp rehash
---------hasta aca--------------
------y todo el resto queda igual-----
Link "tmp" resource to directory in /tmp
Creates a directory /tmp/kde-$USER and links
$KDEHOME/tmp-$HOSTNAME to it.
lnusertemp tmp >/dev/null
Link "socket" resource to directory in /tmp
Creates a directory /tmp/ksocket-$USER and links $KDEHOME/socket-$HOSTNAME to it.
lnusertemp socket >/dev/null
the splashscreen and progress indicator
ksplash
We set LDBINDNOW to increase the efficiency of kdeinit.
kdeinit unsets this variable before loading applications.
LDBINDNOW=true kdeinit +kcminit
The notification daemon. Not started with
kdeinit because it uses threads
and kdeinit doesn't.
knotify
finally, give the session control to the session manager
Syntax: ksmserver [--restore] [--windowmanager ]
if no windowmanager is specified, ksmserver will
ensure kwin is started.
[--restore] should be controlled by kdm
exec ksmserver --restore
[PAGEBREAK]
Luego de todo, si cronometramos los tiempos de inicio del script original contra el script tocado no vemos diferencias significativas (!!!). Paciencia. Llegó la hora de nuestro amigo xtoolwait, y veamos que puede hacer para que se inicie más rápido el KDE.
Revisando y probando lo que funcionó fue esto (que por supuesto va dentro de un .xinitrc personalizado:
#--------cortar aquí------------------------
esto es p/que se inicie + rapido
rm -f $HOME/.ICEauthority
esto tambien
rm -f $HOME/.DCOPserver
este es el wm de kde
kwin & wmpid=$!
el fondo azul
xtoolwait xsetroot -cursorname leftptr -solid '#666699'
para que las teclas de win
xtoolwait xmodmap -e 'keycode 115=F13'
funcionen en KDE
xtoolwait xmodmap -e 'keycode 117=Menu'
el escritorio del KDE
xtoolwait kdesktop
el panel del KDE
xtoolwait kicker
las teclas rpidas del KDE
xtoolwait khotkeys
wait $wmpid
--------cortar aquí-------------------------
Copiemos esto en un .xinitrc personalizado y ejecutemos...
Se prendió más rápido, ¿no? Pero no hay antialiasing de fuentes, eso todavía no lo pude hacer funcionar; pero fuera de eso, mis tiempos de inicio fueron:
Tipo de "startkde" / Tiempo
Original: 26 a 39 segundos
Modificado: 24 a 25 segundos
Modificado (con xtoolwait): 14 a 15 segundos
Pueden variar de máquina a máquina según el hardware y las optimizaciones personales al sistema.
Notas sobre el inicio acelerado de KDE
Como vimos existen dos maneras de iniciar KDE aparte del modo normal, la primera nos permite omitir (no realizar), ciertas tareas que por lo general solo son necesarias la primera vez que el usuario ejecuta el KDE o luego de realizar personalizaciones muy específicas (por ejemplo: modificar el directorio por defecto donde se ubicarn los íconos del escritorio) es el modo "acelerado sin xtoolwait". El segundo modo implica el uso de xtoolwait . Por esto si hacemos cambios radicales o muy amplios en la interfaz (no, no me refiero a cambiar themes y styles), vinculados con fuentes nuevas, cambio de los directorios por defecto, etc. es necesario que iniciemos normalmente el KDE la primera vez luego de realizados los cambios, también sería apropiado que esos mismos cambios los hagamos desde un KDE iniciado normalmente.
Como ven, el entorno KDE tiene similitudes funcionales con el GNOME.
En el modo "acelerado por xtoolwait", debemos acotar algo, si tenemos seteado el KDE para usar fuentes con antialiasing, éstas se verán normalmente, es decir sin antialiasing. No se preocupen, si iniciamos en modo normal o "acelerado sin xtoolwait" eso no sucede, es más podemos iniciar alternativamente en uno y otro modo, y nuestras queridas fuentes con antialiasing volverán siempre si iniciamos normalmente o "acelerado sin xtoolwait".
Sigan probando a ver si conseguimos fuentes con antialiasing...
[FMSettings]
StandardFont=helvetica,12,5,$CHARSET,0,0
EOF
cat >>$HOME/.kde/share/config/kdesktoprc <
[FMSettings]
StandardFont=helvetica,12,5,$CHARSET,50,0
EOF
}
if [ ! -e $HOME/.kde/share/config/kdeglobals ]; then
First startup - as an additional hack, get locales in sync with
the system
The language is the first part of the locale, e.g. en for en_US
LNG= echo $LANG |sed -e "s/@.//;s/..//;s/_.*//"
The country is the second part of the locale (us for en_US); fall
back to the first part if necessary (some broken configs use
LANG=de instead of LANG=de_DE...)
COUNTRY= echo $LANG |sed -e "s/._//;s/@.//;s/..//;s/_.//" |tr A-Z a-z
CHARSET= locale charmap |sed -e "s/ISO-/ISO/g" |tr A-Z a-z
Some locales require special treatment...
if [ $LANG = ca ] ; then
COUNTRY=es
elif [ $LANG = cs ] ; then
COUNTRY=cz
elif [ $LANG = da ] ; then
COUNTRY=dk
elif [ $LANG = el ] ; then
COUNTRY=gr
elif [ $LANG = et ] ; then
COUNTRY=ee
elif [ $LANG = eo ] ; then
COUNTRY=C
elif [ $LANG = en_US ] ; then
LNG=C
elif [ $LANG = en_GB ] ; then
LNG=en_GB
Dadou - 2.1.1-11mdk - Hebrew CHARSET should be
iso8859-8 but KDE crashes at
startup when it uses it. Set CHARSET to iso10646-1
allow KDE to start and display correct characters but
it unfortunaly displays ugly fonts.
elif [ $LANG = he ] ; then
CHARSET=iso10646-1 COUNTRY=il
Dadou - 2.1.1-11mdk - Hebrew CHARSET should be
iso8859-8 but KDE crashes at
startup when it uses it. Set CHARSET to iso10646-1
allow KDE to start and display correct characters but
#
elif [ $LANG = he_IL ] ; then
CHARSET=iso10646-1 COUNTRY=il
elif [ $LANG = nn_NO ] ; then
LNG=no_NY
elif [ $LANG = ko ] ; then
CHARSET=iso10646-1 COUNTRY=kr
elif [ $LANG = ko_KR ] ; then
CHARSET=iso10646-1 COUNTRY=kr
elif [ $LNG = zh -a $COUNTRY = hk ] ; then
LNG=zh_TW
elif [ $LNG = zh ]; then
LNG=$LANG
elif [ $LNG = pt -a $COUNTRY = br ] ; then
LNG=pt_BR
fi
setkdefont
fi
--------------hasta aquí----------------
--------------listo--------------------
----luego fijte bien que es lo que se comenta----
Boot sequence:
#
kdeinit is used to fork off processes which
improves memory usage and startup time.
#
* kdeinit starts the dcopserver and klauncher first.
* Then kded is started. kded is responsible for
keeping the sycoca
database up to date. When an up to date database
is present it goes
into the background and the startup continues.
* Then kdeinit starts kcminit. kcminit performs
initialisation of certain devices according to
the user's settings
#
* Then ksmserver is started which in turn starts
1) the Window Manager (kwin)
2) everything in $KDEDIR/share/autostart
(kdesktop, kicker, etc.)
3) the rest of the session.
Prevent an ever growing .ICEauthority file,
since that will kill application
startup performance.
rm -f $HOME/.ICEauthority
hack, workaraound, evil
rm -f $HOME/.DCOPserver
The user's personal KDE directory is usually
$HOME/.kde, but this setting
may be overridden by setting KDEHOME.
---------aca hay algo comentado---------
kdehome=$HOME/.kde
test -n "$KDEHOME" && kdehome=$KDEHOME
---------hasta aca------------------
Activate the kde font directories.
#
There are 4 directories that may be used
for supplying fonts for KDE.
#
There are two system directories.
These belong to the administrator.
There are two user directories, where the
user may add her own fonts.
#
The 'override' versions are for fonts that
should come first in the list,
i.e. if you have a font in your 'override'
directory, it will be used in
preference to any other.
#
The preference order looks like this:
user override, system override, X, user, system
#
Where X is the original font database that was
set up before this script
runs.
---------aca hay algo comentado---------
usr_odir=$kdehome/share/fonts/override
usr_fdir=$kdehome/share/fonts
if test -n "$KDEDIRS"; then
kdedirs_first= echo $KDEDIRS|sed -e 's/:.*//'
sysodir=$kdedirsfirst/share/fonts/override
sysfdir=$kdedirsfirst/share/fonts
else
sys_odir=$KDEDIR/share/fonts/override
sys_fdir=$KDEDIR/share/fonts
fi
We run mkfontdir on the user's font dirs
(if we have permission) to pick
up any new fonts they may have installed.
If mkfontdir fails, we still
add the user's dirs to the font path, as
they might simply have been made
read-only by the administrator, for whatever reason.
test -d $usrodir && (mkfontdir $usrodir ; xset +fp $usr_odir)
test -d $sysodir && xset +fp $sysodir
test -d $usrfdir && (mkfontdir $usrfdir ; xset fp+ $usr_fdir)
test -d $sysfdir && xset fp+ $sysfdir
Ask X11 to rebuild its font list.
xset fp rehash
---------hasta aca--------------
------y todo el resto queda igual-----
Link "tmp" resource to directory in /tmp
Creates a directory /tmp/kde-$USER and links
$KDEHOME/tmp-$HOSTNAME to it.
lnusertemp tmp >/dev/null
Link "socket" resource to directory in /tmp
Creates a directory /tmp/ksocket-$USER and links $KDEHOME/socket-$HOSTNAME to it.
lnusertemp socket >/dev/null
the splashscreen and progress indicator
ksplash
We set LDBINDNOW to increase the efficiency of kdeinit.
kdeinit unsets this variable before loading applications.
LDBINDNOW=true kdeinit +kcminit
The notification daemon. Not started with
kdeinit because it uses threads
and kdeinit doesn't.
knotify
finally, give the session control to the session manager
Syntax: ksmserver [--restore] [--windowmanager ]
if no windowmanager is specified, ksmserver will
ensure kwin is started.
[--restore] should be controlled by kdm
exec ksmserver --restore
[PAGEBREAK]
Luego de todo, si cronometramos los tiempos de inicio del script original contra el script tocado no vemos diferencias significativas (!!!). Paciencia. Llegó la hora de nuestro amigo xtoolwait, y veamos que puede hacer para que se inicie más rápido el KDE.
Revisando y probando lo que funcionó fue esto (que por supuesto va dentro de un .xinitrc personalizado:
#--------cortar aquí------------------------
esto es p/que se inicie + rapido
rm -f $HOME/.ICEauthority
esto tambien
rm -f $HOME/.DCOPserver
este es el wm de kde
kwin & wmpid=$!
el fondo azul
xtoolwait xsetroot -cursorname leftptr -solid '#666699'
para que las teclas de win
xtoolwait xmodmap -e 'keycode 115=F13'
funcionen en KDE
xtoolwait xmodmap -e 'keycode 117=Menu'
el escritorio del KDE
xtoolwait kdesktop
el panel del KDE
xtoolwait kicker
las teclas rpidas del KDE
xtoolwait khotkeys
wait $wmpid
--------cortar aquí-------------------------
Copiemos esto en un .xinitrc personalizado y ejecutemos...
Se prendió más rápido, ¿no? Pero no hay antialiasing de fuentes, eso todavía no lo pude hacer funcionar; pero fuera de eso, mis tiempos de inicio fueron:
Tipo de "startkde" / Tiempo
Original: 26 a 39 segundos
Modificado: 24 a 25 segundos
Modificado (con xtoolwait): 14 a 15 segundos
Pueden variar de máquina a máquina según el hardware y las optimizaciones personales al sistema.
Notas sobre el inicio acelerado de KDE
Como vimos existen dos maneras de iniciar KDE aparte del modo normal, la primera nos permite omitir (no realizar), ciertas tareas que por lo general solo son necesarias la primera vez que el usuario ejecuta el KDE o luego de realizar personalizaciones muy específicas (por ejemplo: modificar el directorio por defecto donde se ubicarn los íconos del escritorio) es el modo "acelerado sin xtoolwait". El segundo modo implica el uso de xtoolwait . Por esto si hacemos cambios radicales o muy amplios en la interfaz (no, no me refiero a cambiar themes y styles), vinculados con fuentes nuevas, cambio de los directorios por defecto, etc. es necesario que iniciemos normalmente el KDE la primera vez luego de realizados los cambios, también sería apropiado que esos mismos cambios los hagamos desde un KDE iniciado normalmente.
Como ven, el entorno KDE tiene similitudes funcionales con el GNOME.
En el modo "acelerado por xtoolwait", debemos acotar algo, si tenemos seteado el KDE para usar fuentes con antialiasing, éstas se verán normalmente, es decir sin antialiasing. No se preocupen, si iniciamos en modo normal o "acelerado sin xtoolwait" eso no sucede, es más podemos iniciar alternativamente en uno y otro modo, y nuestras queridas fuentes con antialiasing volverán siempre si iniciamos normalmente o "acelerado sin xtoolwait".
Sigan probando a ver si conseguimos fuentes con antialiasing...
[FMSettings]
StandardFont=helvetica,12,5,$CHARSET,50,0
EOF
}
if [ ! -e $HOME/.kde/share/config/kdeglobals ]; then
First startup - as an additional hack, get locales in sync with
the system
The language is the first part of the locale, e.g. en for en_US
LNG= echo $LANG |sed -e "s/@.//;s/..//;s/_.*//"
The country is the second part of the locale (us for en_US); fall
back to the first part if necessary (some broken configs use
LANG=de instead of LANG=de_DE...)
COUNTRY= echo $LANG |sed -e "s/._//;s/@.//;s/..//;s/_.//" |tr A-Z a-z
CHARSET= locale charmap |sed -e "s/ISO-/ISO/g" |tr A-Z a-z
Some locales require special treatment...
if [ $LANG = ca ] ; then
COUNTRY=es
elif [ $LANG = cs ] ; then
COUNTRY=cz
elif [ $LANG = da ] ; then
COUNTRY=dk
elif [ $LANG = el ] ; then
COUNTRY=gr
elif [ $LANG = et ] ; then
COUNTRY=ee
elif [ $LANG = eo ] ; then
COUNTRY=C
elif [ $LANG = en_US ] ; then
LNG=C
elif [ $LANG = en_GB ] ; then
LNG=en_GB
Dadou - 2.1.1-11mdk - Hebrew CHARSET should be
iso8859-8 but KDE crashes at
startup when it uses it. Set CHARSET to iso10646-1
allow KDE to start and display correct characters but
it unfortunaly displays ugly fonts.
elif [ $LANG = he ] ; then
CHARSET=iso10646-1 COUNTRY=il
Dadou - 2.1.1-11mdk - Hebrew CHARSET should be
iso8859-8 but KDE crashes at
startup when it uses it. Set CHARSET to iso10646-1
allow KDE to start and display correct characters but
#
elif [ $LANG = he_IL ] ; then
CHARSET=iso10646-1 COUNTRY=il
elif [ $LANG = nn_NO ] ; then
LNG=no_NY
elif [ $LANG = ko ] ; then
CHARSET=iso10646-1 COUNTRY=kr
elif [ $LANG = ko_KR ] ; then
CHARSET=iso10646-1 COUNTRY=kr
elif [ $LNG = zh -a $COUNTRY = hk ] ; then
LNG=zh_TW
elif [ $LNG = zh ]; then
LNG=$LANG
elif [ $LNG = pt -a $COUNTRY = br ] ; then
LNG=pt_BR
fi
setkdefont
fi
--------------hasta aquí----------------
--------------listo--------------------
----luego fijte bien que es lo que se comenta----
Boot sequence:
#
kdeinit is used to fork off processes which
improves memory usage and startup time.
#
* kdeinit starts the dcopserver and klauncher first.
* Then kded is started. kded is responsible for
keeping the sycoca
database up to date. When an up to date database
is present it goes
into the background and the startup continues.
* Then kdeinit starts kcminit. kcminit performs
initialisation of certain devices according to
the user's settings
#
* Then ksmserver is started which in turn starts
1) the Window Manager (kwin)
2) everything in $KDEDIR/share/autostart
(kdesktop, kicker, etc.)
3) the rest of the session.
Prevent an ever growing .ICEauthority file,
since that will kill application
startup performance.
rm -f $HOME/.ICEauthority
hack, workaraound, evil
rm -f $HOME/.DCOPserver
The user's personal KDE directory is usually
$HOME/.kde, but this setting
may be overridden by setting KDEHOME.
---------aca hay algo comentado---------
kdehome=$HOME/.kde
test -n "$KDEHOME" && kdehome=$KDEHOME
---------hasta aca------------------
Activate the kde font directories.
#
There are 4 directories that may be used
for supplying fonts for KDE.
#
There are two system directories.
These belong to the administrator.
There are two user directories, where the
user may add her own fonts.
#
The 'override' versions are for fonts that
should come first in the list,
i.e. if you have a font in your 'override'
directory, it will be used in
preference to any other.
#
The preference order looks like this:
user override, system override, X, user, system
#
Where X is the original font database that was
set up before this script
runs.
---------aca hay algo comentado---------
usr_odir=$kdehome/share/fonts/override
usr_fdir=$kdehome/share/fonts
if test -n "$KDEDIRS"; then
kdedirs_first= echo $KDEDIRS|sed -e 's/:.*//'
sysodir=$kdedirsfirst/share/fonts/override
sysfdir=$kdedirsfirst/share/fonts
else
sys_odir=$KDEDIR/share/fonts/override
sys_fdir=$KDEDIR/share/fonts
fi
We run mkfontdir on the user's font dirs
(if we have permission) to pick
up any new fonts they may have installed.
If mkfontdir fails, we still
add the user's dirs to the font path, as
they might simply have been made
read-only by the administrator, for whatever reason.
test -d $usrodir && (mkfontdir $usrodir ; xset +fp $usr_odir)
test -d $sysodir && xset +fp $sysodir
test -d $usrfdir && (mkfontdir $usrfdir ; xset fp+ $usr_fdir)
test -d $sysfdir && xset fp+ $sysfdir
Ask X11 to rebuild its font list.
xset fp rehash
---------hasta aca--------------
------y todo el resto queda igual-----
Link "tmp" resource to directory in /tmp
Creates a directory /tmp/kde-$USER and links
$KDEHOME/tmp-$HOSTNAME to it.
lnusertemp tmp >/dev/null
Link "socket" resource to directory in /tmp
Creates a directory /tmp/ksocket-$USER and links $KDEHOME/socket-$HOSTNAME to it.
lnusertemp socket >/dev/null
the splashscreen and progress indicator
ksplash
We set LDBINDNOW to increase the efficiency of kdeinit.
kdeinit unsets this variable before loading applications.
LDBINDNOW=true kdeinit +kcminit
The notification daemon. Not started with
kdeinit because it uses threads
and kdeinit doesn't.
knotify
finally, give the session control to the session manager
Syntax: ksmserver [--restore] [--windowmanager ]
if no windowmanager is specified, ksmserver will
ensure kwin is started.
[--restore] should be controlled by kdm
exec ksmserver --restore
[PAGEBREAK]
Luego de todo, si cronometramos los tiempos de inicio del script original contra el script tocado no vemos diferencias significativas (!!!). Paciencia. Llegó la hora de nuestro amigo xtoolwait, y veamos que puede hacer para que se inicie más rápido el KDE.
Revisando y probando lo que funcionó fue esto (que por supuesto va dentro de un .xinitrc personalizado:
#--------cortar aquí------------------------
esto es p/que se inicie + rapido
rm -f $HOME/.ICEauthority
esto tambien
rm -f $HOME/.DCOPserver
este es el wm de kde
kwin & wmpid=$!
el fondo azul
xtoolwait xsetroot -cursorname leftptr -solid '#666699'
para que las teclas de win
xtoolwait xmodmap -e 'keycode 115=F13'
funcionen en KDE
xtoolwait xmodmap -e 'keycode 117=Menu'
el escritorio del KDE
xtoolwait kdesktop
el panel del KDE
xtoolwait kicker
las teclas rpidas del KDE
xtoolwait khotkeys wait $wmpid
--------cortar aquí-------------------------
Copiemos esto en un .xinitrc personalizado y ejecutemos... Se prendió más rápido, ¿no? Pero no hay antialiasing de fuentes, eso todavía no lo pude hacer funcionar; pero fuera de eso, mis tiempos de inicio fueron:
Tipo de "startkde" / Tiempo
Pueden variar de máquina a máquina según el hardware y las optimizaciones personales al sistema.
Notas sobre el inicio acelerado de KDE
Como vimos existen dos maneras de iniciar KDE aparte del modo normal, la primera nos permite omitir (no realizar), ciertas tareas que por lo general solo son necesarias la primera vez que el usuario ejecuta el KDE o luego de realizar personalizaciones muy específicas (por ejemplo: modificar el directorio por defecto donde se ubicarn los íconos del escritorio) es el modo "acelerado sin xtoolwait". El segundo modo implica el uso de xtoolwait . Por esto si hacemos cambios radicales o muy amplios en la interfaz (no, no me refiero a cambiar themes y styles), vinculados con fuentes nuevas, cambio de los directorios por defecto, etc. es necesario que iniciemos normalmente el KDE la primera vez luego de realizados los cambios, también sería apropiado que esos mismos cambios los hagamos desde un KDE iniciado normalmente.
Como ven, el entorno KDE tiene similitudes funcionales con el GNOME.
En el modo "acelerado por xtoolwait", debemos acotar algo, si tenemos seteado el KDE para usar fuentes con antialiasing, éstas se verán normalmente, es decir sin antialiasing. No se preocupen, si iniciamos en modo normal o "acelerado sin xtoolwait" eso no sucede, es más podemos iniciar alternativamente en uno y otro modo, y nuestras queridas fuentes con antialiasing volverán siempre si iniciamos normalmente o "acelerado sin xtoolwait".
Sigan probando a ver si conseguimos fuentes con antialiasing...


Links