domingo, 7 de octubre de 2012

ssh-keygen

<h1>ssh-keygen</h1>
<p>Es un comando usado para generar certificados digitales.</p>
<h2>Que es un certificado digital</h2>
<p>Es un fichero que contiene:
<ul>
<li>Una clave pública, </li>
<li>junto con información de identificación de un sujeto o de una máquina (user or host) y </li>
<li>opcionalmente, la clave de una una Autoridad de Certificación (CA)</li>
</ul>
<p>

martes, 8 de mayo de 2012

Inicio de sesión automático en ssh

Inicio de sesión automático en ssh

Un problema que solemos tener constantemente es tener que introducir la contraseña de los usarios de forma continua cuando conectamos a una máquina remota via SSH.
En linux se resuelve siguiendo estos dos pasos:
  1. Creando un par  clave privada-publica para mi usuario.
  2. Añadiendo la clave pública del par al fichero de claves autorizadas del equipo al cual queremos conectarnos.

Generar el par clave privada - clave pública

Debemos generar un par de clave privada-pública en el equipo desde el cual queremos acceder, de forma, que estos autentifiquen a nuestro usuario frente al servidor ssh.

En Windows

En Windows, debemos usar la utilidad Puttygen, que nos permitirá crear la clave deseada:

Para generar una clave, primero escogemos en los botones de abajo entre las tres opciones de clave:
  1. SSH1(RSA)
  2. SSH2-RSA
  3. SSH2-DSA
En principio el algoritmo RSA aunque es algo más antiguo es seguro, mientras que el DSA es más novedoso y también es considerado seguro.
Tras escoger el algoritmo, debemos pulsar el boton generate, y luego, mover el ratón por la pantalla para que el programa pueda crear nuestra clave.
Tras tener la clave, nos aparecerá una ventana similar a esta:
Como puedes ver, se muestra dos cuadros donde pone Key passphrase: En ellos debemos colocar una clave que usaremos para poder instalar nuestra clave privada, de forma que si perdemos esta, no puedan facilmente obtenerla del archivo.
Ya solo nos queda ver que disponemos de dos botones, uno llamado "Save Public Key" que se usa para guardar la clave pública en un fichero de texto plano.
Para mi clave pública ese texto es el siguiente:
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "dsa-key-20120508"
AAAAB3NzaC1kc3MAAACBALCFITMt1WUK1Ix8BPaqv+nNCd1h0dURKtXvGLiGqBRI
zTamYdqiYUXdOfOEArWgpe3wdXrM2J0FJso6tLw1qk4iVDlISVPhu4EcV1NhZRcb
e4xRi50Q8PlCIbMbaqKiqti993AcPGEx1oan+ExYf1AtoWj83Qykk8UOZwWI6v5d
AAAAFQDWQtzlyi61eHhhyVH27juoTnlWRQAAAIABlRJ1R+aTUfuw0Yrsl4iRvBht
SYibepyzaWCfy0l/xKbnoMsrhlpZ2UlapSYUV1zjZiiu5cA52iV//PpjfD21v/r7
zfWrLpxbGVnkhz+gN/zNgqMquUu1s6+l2yeCHX9ASpG3cfwJOzW/RUvtP9o4vtPU
j0WLv9+jmncc8RXddwAAAIB1SFPkyAmyAdvUahOEfHTV+rgQtoZz0bfzs9uslNoI
3r395u/ozaz8nqs7d5KT0LzkKGM5tnQMJG1VazGNjfL4E5DdcPMXEirZ5jrV5xU5
7jpdZAQVBrkAkYR9Bmasbqbpohb2PLoGYHw5L5A9a1cpRSQ7F9SuDoJ5S6BRhP7A
sA==
---- END SSH2 PUBLIC KEY ----
Y otro botón denominado save private key, que nos guardará en un fichero de certificado ppk la clave privada.
Nota: El fichero ppk contiene tanto la clave privada como la pública.

En Linux

En Linux deberemos crear el par de clave privada-pública con el comando ssh-keygen, que nos creará una clave RSA por defecto:
emc2@server1:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/emc2/.ssh/id_rsa): emc2@server1.emc.lan
emc2@server1.emc.lan already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Passphrases do not match.  Try again.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in emc2@server1.emc.lan.
Your public key has been saved in emc2@server1.emc.lan.pub.
The key fingerprint is:
f9:fc:c2:22:9b:53:59:ef:a8:e5:32:1e:c9:6e:be:11 emc2@server1
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|         ..      |
|        Eo .     |
|       .o=  .    |
|       .=.+o     |
|      oo==+..    |
|      oB**...    |
+-----------------+
Como puedes ver, en primer lugar nos pide un nombre de fichero donde guardar la clave, a lo cual respondemos con emc2@server1.emc.lan.ppk (si no le pongo extensión me dejaría el fichero ppk sin extensión).
Tras ello, me pide una contraseña de paso para instalar el certificado, y despues lo genera.
El programa va a generar dos archivos:
  1. emc2@server1.emc.lan.ppk: Contiene el par clave publica y privada.
  2. emc2@server1.emc.lan.ppk.pub: Contiene la clave pública, y es un fichero de texto normal y corriente.

Añadir al repositorio de claves del servidor ssh nuestra clave pública

Deberemos añadir la clave en cada usuario del servidor al cual queramos conectarnos automaticamente.
Este proceso lo podemos realizar de dos formas:
  1. Editando los ficheros de configuración ssh.
  2. Con el comando ssh-copy-id

Editando los ficheros de configuración del servidor ssh:

Nuestro usuario en el servidor debe tener una carpeta .ssh, que deberá tener los siguientes permisos:
emc2@server1:~$ ls -ld .ssh
drwx------ 2 emc2 emc2 4096 may  8 09:43 .ssh
Como ves, solo es accesible al usuario.
Dentro de esa carpeta, debe existir (y si no lo creamos) denominado 
 en la cual aparecerá un fichero denominado authorized_keys que contiene las claves públicas autorizadas:
emc2@server1:~/.ssh$ ls -l authorized_keys
-rw------- 1 emc2 emc2 618 may  8 09:43 authorized_keys
Como puedes ver, el fichero tiene permisos solo para el propietario.
Debemos editar el fichero que contiene la clave pública que hemos generado en el cliente, y debemos pegar esa clave pública en nuestro fichero authorized_keys, el formato, es el siguiente:
En mi caso el contenido del fichero es el siguiente:
emc2@server1:~/.ssh$ cat authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAACBALCFITMt1WUK1Ix8BPaqv+nNCd1h0dURKtXvGLiGqBRIzTamYdqiYUXdOfOEArWgpe3wdXrM2J0FJso6tLw1qk4iVDlISVPhu4EcV1NhZRcbe4xRi50Q8PlCIbMbaqKiqti993AcPGEx1oan+ExYf1AtoWj83Qykk8UOZwWI6v5dAAAAFQDWQtzlyi61eHhhyVH27juoTnlWRQAAAIABlRJ1R+aTUfuw0Yrsl4iRvBhtSYibepyzaWCfy0l/xKbnoMsrhlpZ2UlapSYUV1zjZiiu5cA52iV//PpjfD21v/r7zfWrLpxbGVnkhz+gN/zNgqMquUu1s6+l2yeCHX9ASpG3cfwJOzW/RUvtP9o4vtPUj0WLv9+jmncc8RXddwAAAIB1SFPkyAmyAdvUahOEfHTV+rgQtoZz0bfzs9uslNoI3r395u/ozaz8nqs7d5KT0LzkKGM5tnQMJG1VazGNjfL4E5DdcPMXEirZ5jrV5xU57jpdZAQVBrkAkYR9Bmasbqbpohb2PLoGYHw5L5A9a1cpRSQ7F9SuDoJ5S6BRhP7AsA== emc2@portatilemc2sev.emc.lan
Ojo: tras ssh-dss no hay un retorno de carro, hay un espacio que corta la propia página web.
Como puedes ver, tendremos:
  1. en primero lugar el protocolo ssh-dss (también podría ser ssh-rss), 
  2. la clave pública que queremos usar (esa la editamos con el block de notas o cualquier editor de textos).
  3. == usuario@nodo que autenticamos.

Usar el comando ssh-copy-id

Con el comando ssh-copy-id la vida es más facil. Pero esto solo lo podemos hacer con clientes Linux.
Para usarlo, solamente ejecutamos:
$ ssh-copy-id usuario@maquina
Ahora la máquina nos pedirá la contraseña de usario, y tras iniciar sesión, añadirá la clave pública a el repositorio de claves del cliente.
Ojo: Para que esto funcione, al crear la clave con ssh-keygen, no debemos haber dado nombre al fichero de certificado, escogiendo el nombre por defecto (~/.ssh/id_rsa.pub).

jueves, 3 de mayo de 2012

Como hacer una copia de seguridad del sector de arranque con Linux

El "Master Boot Record (MBR)" o "Sector de Arranque" es una de las piezas que debemos conocer de nuestro disco duro para poder mantener de forma acertada un equipo con varios sistemas operativos instalados.

El BIOS (Basic Input Output System)

Todos hemos oido hablar del BIOS, es esa pantallita que aparece en un ordenador al arrancar, pero vamos a intentar contextualizar la BIOS dentro del mundo de la informática.

Plataforma de un ordenador

No todos los equipos tienen BIOS. Entendemos por plataforma hardware como una combinación de hardware que va a constituir una computadora.
Por ejemplo, si cogemos un ordenador Apple con un microprocesador PowerPC, tendremos lo que llamamos una plataforma PowerPC.
Tendremos una plataforma PC o tambien llamada x86 cuando tengamos un equipo basado en un microprocesador descendiente del 8086 (como lo son el 80286, 80386, 80486, Pentium, II, III, IV, AMD K6, AMD Athlon, etc) con una placa base compatible con este, memoria y disco duro.
También podremos tener una plataforma PC de 64 bits, también denominada x86_64, que es una nueva plataforma basada en los PC, pero compatible hacia atrás con estos.
Además existen múltiples plataformas: Alpha, Itanium, etc. cada una de ellas con sus características distintivas.

¿Todos los ordenadores tienen BIOS?

Te lo estás imaginando, no, no todos los ordenadores tienen BIOS, solamente los PC's la tienen.
Me parece un error garrafal no comentar a los estudiantes de informática sobre lo específico que es el mundo PC, que aunque domine casi toda la computación, no es lo único disponible. No es necesario enseñar a nadie nuevas plataformas, ya que estas son minoritarias, pero por lo menos, que sepan que no todo el "monte es oregano".
De hecho, ya ha habido intentos de sustituir la obsoleta BIOS, por un sistema más potente de esquema de arranque (el sistema EFI) que además de usar memoria ROM, usaría una pequeña partición en el disco duro para tal cometido. Estos intentos se han topado con el poco interés de los fabricantes de hardware por implementarlos, además del requisito de la compatibilidad con la BIOS.

Pero exactamente, ¿que hace la BIOS?

Como todos sabeis, hay dos tipos generales de memoria, RAM (Random Access Memory) y ROM (Read Only Memory), y que un ordenador para arrancar necesita que se le proporcione un programa, pues bién, debemos introducir de algún modo ese programa, y ese modo es tenerlo guardado en memoria ROM, la cual no va a ser borrada en el arranque del equipo.
Cuando un PC arranca, comienza a ejecutar instrucciones a partir de la dirección de memoria 0x0000 (cero o la primera dirección de memoria), donde casualmente está ubicado el chip BIOS.
En el arranque, el programa BIOS lee una pequeña memoria flash donde se guarda la configuración del ordenador (o también llamado configuración de la BIOS). En esta memoria va a leer cosas como ¿que dispositivos deben ser activados?, ¿cuales no?, ¿orden de arranque de los dispositivos?, ¿fecha y hora?, etc.
Tras leer la flash, la BIOS va a activar y chequear que los dispositivos que componen el PC funcionan correctamente.
Una vez comprobado que todo está bien, el programa BIOS va a cargar en memoria el primer sector del disco duro y va a comenzar a ejecutarlo. Esto es el arranque a partir del disco duro. Si arrancamos a partir de un CD o de otro dispositivo el procedimiento tienen que ser similar: Leer un sector, y proceder a su ejecución.
Lo que mucha gente no sabe, es que la BIOS mantiene una segunda función: Es una especie de API o biblioteca de funciones que permite acceder al hardware. Efectivamente, La BIOS tiene rutinas para leer y escribir en los discos duros, en pantalla, puertos, etc. De hecho los sistemas operativos MS-DOS no tenían sus propias rutinas para estos cometidos ya que llamaban a las rutinas de la BIOS, pero posteriormente, debido a limitaciones en la BIOS, los sistemas operativos no van a usar las rutinas BIOS, sustituyendo estás por sus propias rutinas (en esto también influye que la memoria ROM que forma la BIOS es mucho más lenta de leer que la RAM).

El Master boot Record (MBR)

El MBR es el primer sector del del disco duro. Cuando la BIOS decide que es nuestro disco duro el que debe arrancar el equipo, lee el MBR, lo coloca en memoria y comienza a ejecutarlo.
El MBR está compuesto por tres zonas:
  1. El arranque maestro (446 bytes): No es más que un programa para ser ejecutado por el procesador. Este se encargará de cargar el sistema operativo. Hay que notar que el tamaña de este programa es demasiado pequeño para contener un sistema operativo, por lo cual solamente se podrá hacer cargo de buscar el resto del sistema operativo y cargarlo en memoria. Digamos que el arranque maestro tira del hilo para seguir cargando nuestro sistema operativo.
  2. Tabla de Particiones (64 bytes): Aquí se guarda la configuración de las particiones del disco.
  3. Firma de unidad arrancable (2bytes).

Arranque maestro en Windows

En los sistemas operativos Windows, a grandes rasgos, tras cargarse el MBR, el arranque maestro lee la tabla de particiones y busca la partición activa. A partir de hay cede el control a determinados ficheros de la partición activa.
Como en una plataforma Windows el código de arranque solo sabe ceder el control a la partición activa, este arranque es igual en todos los sistemas Windows.

Arranque maestro en Linux

En los sistemas Linux, se pueden usar multitud de gestores de arranque, pero el que vamos a ver nosotros es el GRUB.
El gestor de arranque GRUB está formado por dos partes:
  1. Stage1: Es el código que se coloca en el arranque maestro (o alternativamente en el primer sector de una partición primaria, pero este caso no es muy frecuente).
  2. Stage2: Es código que se coloca en la partición donde tenemos instalado Linux. Esto es a grosso modo, ya que realmente, el stage2 se coloca dentro de la carpeta /boot/grub.
El stage1 es distinto en cada disco duro, ya que este debe ceder el control al stage2, que se encuentra dentro de una partición, y no disponemos de espacio para incluir los controladores de los sistemas de archivos más usados en Linux. Por esto, debemos de incluir en el stage1 la dirección de disco del stage2 (es decir el número de sector donde está escrito), y esta dirección será distinta en cada disco duro.

El comando dd

El comando dd es usado por los administradores de sistemas para hacer copias de seguridad de discos duros y tareas parecidas. Es un comando peligroso, pero que bien usado, tiene grandes ventajas.
Dd copia dispositivos a nivel físico (es decir, sector a sector) sin pasar a través de un sistema de archivos.
dd admite estos parámetros principales:
dd [if=<fichero|dispositivo>][of=<fichero|dispositivo>][bs=tamaño_sector][count=numero_sectores]
  1. if indica el dispositivo o fichero del cual vamos a leer. Si no lo indicamos, leemos de la entrada estandard.
  2. of indica el fichero o dispositivo en el cual vamos a escribir. Si no lo indicamos, escribimos en la salida estandard.
  3. bs indica el tamaño de sector que vamos a usar, por defecto, 512 bytes.
  4. count indica el numero de sectores que queremos copiar. Si no lo indicamos dd irá copiando de la entrada hasta llegar al final.
Veamos un ejemplo, queremos hacer una copia de un disco duro (/dev/sda) a otro disco duro idéntico (/dev/sdb). Para ello usaremos el siguiente comando:
# dd if=/dev/sda of=/dev/sdb
Estoy leyendo el dispositivo (if) /dev/sda (primer disco duro), y el contenido leido lo guardo en /dev/sdb (segundo disco duro).
El proceso termina cuando se haya leido todo el disco duro del que leo, o cuando en el segundo disco duro se acabe el espacio. Si los dos discos tienen el mismo tamaño, se hará una copia exacta del primero.

Hacemos la copia del sector de arranque

Bueno, para copiar nuestro sector de arranque, tendremos que usar el siguiente comando (suponiendo que el disco sea /dev/sda):
# dd if=/dev/sda of=copia_arranque bs=446 count=1
Que explicado, copia del primer disco duro (/dev/sda) 446 bytes (el tamaño del arranque maestro) en un fichero denominado copia_arranque.

Restaurar la copia del sector de arranque

Para restaurar la copia del sector de arranque, tendremos que invertir entrada y salida en el comando anterior:
# dd if=copia_arranque of=/dev/sda
No nos hace falta indicar cuantos bytes escribir, ya que el fichero copia_arranque solo tiene 446 bytes, y los debe copiar en el primer sector del disco duro.

lunes, 23 de abril de 2012

lightdm.conf

lightdm.conf

Vamos a ver las opciones disponibles para este fichero, que está compuesto por 5 secciones
  1. LightDM: Opciones generales de configuración del servicio.
  2. SeatDefaults: Configuración por defecto para los Seats o puestos.
  3. Seat:0, Seat:1, etc: Configuración de cada uno de los Seat que se mostrarán al arrancar el servicio.
  4. XDMCPServer: Opciones para compartir el escritorio con máquinas remotas.
  5. VNCServer: Opciones para compartir el escritorio con máquinas remotas a través del protocolo VNC.

LightDM

Las opciones que podemos configurar en LightDM son las siguientes:

start-default-seat

Indica si se va a arrancar de forma automática el puesto por defecto.
Si lo ponemos a false, no se mostrará el entorno gráfico en la máquina local. Esta configuración solo tiene sentido si nuestro propósito es conectar remotamente a esta máquina. Si hay definidos otros puestos (el Seat:0, Seat:1, etc) si que serán mostrados.
Si lo ponemos a true, se mostrará el puesto por defecto, y si hay más, también los otros.

greeter-user

Por defecto los greeters (o saludadores) se ejecutan bajo el privilegio del usuario lightdm, pero podemos hacer que se ejecute el greeter bajo las credenciales del usuario que aquí indiquemos.

minimum-display-number

Aquí indicamos el número más bajo de pantalla que vamos a usar con el servidor X.

minimum-vt

Aquí indicamos el número de terminal virtual mínimo que usará el entorno gráfico

xsessions-directory

Directorio donde se colocan los ficheros de definición de los distintos inicios de sesión disponibles. Por defecto es /usr/share/xsessions.

xgreeters-directory

Es el directorio donde se colocan los ficheros de definición de los distintos greeters disponibles en el sistema. Por defecto es el directorio /usr/share/xgreeters.

SeatDefaults

Los SeatDefaults son la configuración por defecto para el puesto. Los parámetros más usados aquí son:

xserver-command

Es el comando que nos va a proveer el entorno gráfico, por defecto es el comando X (xserver-command = X).

xserver-config

Fichero de configuración del servidor X. Por defecto en ubuntu es /etc/X11/xorg.conf.

xserver-allow-tcp

Se pone a verdadero si permitimos conexiones TCP/IP al servidor.

xdmcp-manager

Cliente X al que se va a conectar nuestro servidor X. Evidentemente, si colocamos esta linea, se van a permitir las conexiones TCP/IP.
Un ejemplo para esta linea será: xdmcp-manager=192.168.1.1, que nos permitiría conectar el entorno al equipo 192.168.1.1.

xdmcp-port

Puerto usado por xdmcp.

xdmcp-key

Clave de autenticación usada por xdmcp. Por defecto en blanco.

greeter-session

Greeter que va a ser usado en ese puesto. Por defecto Ubuntu usa el unity-greeter, pero dispone de alguno más.

greeter-hide-users

Por defecto, el greeter nos va a mostrar un listado de los usuarios. Escogemos uno e introducimos la contraseña. Al poner esta variable a true, tendremos que introducir el nombre del usuario manualmente.

user-session

Es la sesión por defecto con la que iniciarán los usuarios.

allow-guest

Si es verdadero se permiten sesiones de invitado.
Las sesiones de invitado se ejecutan en perfiles generados al azar dentro de la carpeta tmp, y cada nueva sesión de invitado se arrancará con un nuevo perfil. Solo son útiles para accesos temporales a internet y similares.

guest-session

En principio es la sesión con la que arrancará un acceso de invitado, pero no funciona correctamente.

display-setup-script - greeter-setup-script - session-setup-script -  session-cleanup-script

Son scripts que se arrancan tras el inicio de lightdm, o tras el arranque del greeter, o al iniciar sesión o al salir de ella. Son ejecutados con permisos de root, lo cual los hace bastante peligrosos.

autologin-guest

Verdadero si permitimos que por defecto se inicie una sesión de invitado. No espera y entra en ella automaticamente.

autologin-user

Nombre del usuario que iniciará sesión de forma automática pasado un tiempo fijado por autologin-user-timeout.

autologin-user-timeout

Es el tiempo en segundos que deben pasar sin que el greeter tenga actividad para que se inicie de forma automática la sesión de usuario por defecto.

autologin-session

Es la sesión en la que iniciará de forma automática el usuario por defecto.

exit-on-failure

Si lo ponemos a true, el demonio termina (lightdm) si el puesto falla.

Sección Seats o puestos

Por defecto no tenemos que tener ningún puesto activado. En este caso, solamente se abrirá un terminal gráfico con las opciones definidas en la sección SeatDefaults.
Los parámetros que admiten los puestos son los mismos que los que hemos visto en SeatDefaults, y heredan la configuración de SeatDefaults, salvo en lo que cambien ellos mismos.
Pero podríamos querer tener dos pantalla abiertas simultaneamente, o tres, o cuatro, etc. Para ello deberemos configurar los seats que Queramos. Veamos varios ejemplos:

Dos pantallas gráficas se inician simultaneamente

Para ello nos bastará con añadir al fichero de configuración estas dos lineas:
[Seat:0][Seat:1]
Estos dos puestos son idénticos al SeatDefaults, ya que heredan su configuración y no se ha modificado. Y podremos acceder a dos greeters iguales, uno con CTRL+ALT+F7 y otra con CTRL+ALT+F8.

Dos pantallas gráficas una de ellas conectándose a otra máquina

Para ello nos basta con añadir algo parecido a lo anterior, pero modificando uno de los seats para que conecte con una máquina remota.
En el ejemplo, se crea una pantalla que conecta a la máquina local (en el terminal 7) y otra (en el terminal 8) que conecta a un equipo llamado xdmcppruebas.emc.lan:
[Seat:0]
[Seat:1]
xdmcp-manager=xdmcppruebas.emc.lan
Evidentemente, debemos tener configurada la red para que pueda haber conectividad con la otra máquina.

Una pantalla gráfica con un greeter distinto al provisto por Ubuntu

Ubuntu provee un paquete denominado unity-greeter, que muestra la pantalla de inicio de sesión a la que estamos acostumbrados.
Podemos instalar otro greeter, como puede ser  el lightdm-qt-greeter, un greeter pensado más para máquinas con KDE.
Para instalar el greeter usaremos:
aptitude install lightdm-qt-greeter
Y luego para disponer de dos pantallas, una con el greeter de unity, y otra con el greeter qt, usaremos:
[Seat:0]
[Seat:1]
greeter-session=lightdm-qt-greeter
Et voila, en la pantalla 8 (CTRL+ALT+F8) nos aparece lo siguiente:

Sección XDMCPServer

Basicamente, xdmcp lo que hace es permitir compartir un escritorio en red. Para ello, se comparte el seat por defecto. En esta sección disponemos solamente de los siguientes parámetros:

enabledTrue si queremos poder conectar desde máquinas remotas.

port

Puerto por defecto para conectar. Por defecto el 177

key

Es una clave 3DES o una palabra que servirá como secreto entre el cliente y el servidor para autenticarse.
Sección VNCServer
Permite la conexión 

Sección VNCServer

Permite conectar el inicio de lightdm mediante el protocolo VNC.

domingo, 22 de abril de 2012

Configurar Lightdm (1)

Configurar Lightdm (1)

Lightdm se configura a través del fichero de configuración /etc/lightdm/lightdm.conf. Este fichero, con una sintaxis de fichero .ini, en Ubuntu casi aparece vacio:
[LightDM]
[SeatDefaults]
greeter-session=unity-greeter
user-session=ubuntu
Como puedes ver, no tenemos acceso a los muchos parámetros que seguro que usa lightdm.
Para acceder a un fichero de configuración completo, usaremos el fichero lightdm.conf de ejemplo que se encuentra en el directorio /usr/share/doc/lightdm:
#
# General configuration
#
# start-default-seat = True to always start one seat if none are defined in the configuration
# greeter-user = User to run greeter as
# minimum-display-number = Minimum display number to use for X servers
# minimum-vt = First VT to run displays on
# user-authority-in-system-dir = True if session authority should be in the system location
# guest-account-script = Script to be run to setup guest account
# log-directory = Directory to log information to
# run-directory = Directory to put running state in
# cache-directory = Directory to cache to
# xsessions-directory = Directory to find X sessions
# xgreeters-directory = Directory to find X greeters
#

[LightDM]
#start-default-seat=truedfdf
#greeter-user=lightdm
#minimum-display-number=0
#minimum-vt=7
#user-authority-in-system-dir=false
#guest-account-script=guest-account
#log-directory=/var/log/lightdm
#run-directory=/var/run/lightdm
#cache-directory=/var/cache/lightdm
#xsessions-directory=/usr/share/xsessions
#xgreeters-directory=/usr/share/xgreeters

#
# Seat defaults
#
# xserver-command = X server command to run
# xserver-layout = Layout to pass to X server
# xserver-config = Config file to pass to X server
# xserver-allow-tcp = True if TCP/IP connections are allowed to this X server
# xdmcp-manager = XDMCP manager to connect to (implies xserver-allow-tcp=true)
# xdmcp-port = XDMCP UDP/IP port to communicate on
# xdmcp-key = Authentication key to use for XDM-AUTHENTICATION-1 (stored in keys.conf)
# greeter-session = Session to load for greeter
# greeter-hide-users = True to hide the user list
# user-session = Session to load for users
# allow-guest = True if guest login is allowed
# guest-session = Session to load for guests (overrides user-session)
# session-wrapper = Wrapper script to run session with
# display-setup-script = Script to run when starting a greeter session (runs as root)
# greeter-setup-script = Script to run when starting a greeter (runs as root)
# session-setup-script = Script to run when starting a user session (runs as root)
# session-cleanup-script = Script to run when quitting a user session (runs as root)
# autologin-guest = True to log in as guest by default
# autologin-user = User to log in with by default (overrides autologin-guest)
# autologin-user-timeout = Number of seconds to wait before loading default user
# autologin-session = Session to load for automatic login (overrides user-session)
# exit-on-failure = True if the daemon should exit if this seat fails
#
[SeatDefaults]
#xserver-command=X
#xserver-layout=
#xserver-config=
#xserver-allow-tcp=false
#xdmcp-manager=
#xdmcp-port=177
#xdmcp-key=
#greeter-session=example-gtk-gnome
#greeter-hide-users=false
#user-session=default
#allow-guest=true
#guest-session=UNIMPLEMENTED
#session-wrapper=lightdm-session
#display-setup-script=
#greeter-setup-script=
#session-setup-script=
#session-cleanup-script=
#autologin-guest=false
#autologin-user=
#autologin-user-timeout=0
#autologin-session=UNIMPLEMENTED
#exit-on-failure=false

#
# Seat configuration
#
# Each seat must start with "Seat:".
# Uses settings from [SeatDefaults], any of these can be overriden by setting them in this section.
#
#[Seat:0]

#
# XDMCP Server configuration
#
# enabled = True if XDMCP connections should be allowed
# port = UDP/IP port to listen for connections on
# key = Authentication key to use for XDM-AUTHENTICATION-1 or blank to not use authentication (stored in keys.conf)
#
# The authentication key is a 56 bit DES key specified in hex as 0xnnnnnnnnnnnnnn.  Alternatively
# it can be a word and the first 7 characters are used as the key.
#
[XDMCPServer]
#enabled=false
#port=177
#key=

#
# VNC Server configuration
#
# enabled = True if VNC connections should be allowed
# port = TCP/IP port to listen for connections on
#
[VNCServer]
#enabled=false
#port=5900
#width=1024
#height=768
#depth=8
Esto es otra cosa, como podeis ver, ya podemos acceder a todas las caracteristicas de configuración de lightdm.

Componentes de Lightdm

Componentes de lightdm

Lightdm es el gestor de sesiones usado en Ubuntu. su aspecto es similar al que podeis ver en la imagen:
Como puedes ver, indica en la parte superior el nombre de la máquina (esto es importante por que se pueden iniciar sesiones remotas), opciones de accesibilidad, de sonido, la hora y un icono para apagar el equipo.
Luego puedes escoger el usuario, introducir la contraseña, y si pulsas en el engranaje, podrás ver las distintas sesiones en las cuales puede iniciar el usuario.
Lightdm usa dos componentes primordiales: El greeter y las sesiones.

Greeter

Lightdm no es el programa que aparece en pantalla. En realidad es otro programa llamado Unity-Greeter, o saludador de Unity.
El greeter es el programa que ejecuta lightdm para que los usuarios puedan iniciar sesión.
En el caso de Ubuntu 11.10 disponemos de estos greeters:
  1. unity-greeter.
  2. lightdm-gtk-greeter.
  3. lightdm-qt-greeter.
Por ejemplo, si hubieramos usado el lightdm-qt-greeter, el aspecto de la pantalla de inicio sería el siguiente:

xsessión

Una sesión gráfica, o xsession, es una forma de iniciar el entorno gráfico para un usuario. Tendremos una sesión para KDE, otra para Gnome, etc.
Las podemos ver en esta imagen:
XBMC crea una xsession
XBMC crea una xsession llamada XBMC en la cual entramos al entorno XBMC.

Resumen

  • Lightdm permite iniciar sesión a los usuarios.
  • El programa donde introducimos nuestro usuario y contraseña se llama greeter (unity-greeter).
  • Podemos iniciar sesión en varias xsession (por ej. kde, gnome o unity).
  • xbmc al ser instalado crea una xsessión llamada XBMC.

Componentes del servidor grafico en Ubuntu

Componentes del servidor gráfico en Linux

Para crear nuestro media center debemos modificar el inicio del entorno gráfico para que se arranque la aplicación xbmc, y además será necesario que en caso de que esta provoque errores, que se reinicie de forma automática.
Como puedes imaginar, deberemos conocer que componentes gráficos forman el entorno de escritorio de Linux.

Servidor gráfico (Xserver)

Por debajo de todo el entramado de pantallas que vemos cuando usamos Linux en modo gráfico, hay un programa llamado servidor gráfico (Xserver), que en versiones muy antiguas de linux seria el servidor Xfree, y que para el caso de las últimas distribuciones (a partir del 2005 aproximadamente) sería el proporcionado por Xorg.
El servidor gráfico solamente se va a encargar de mostrar por un layout (o diseño de pantalla) todo lo que le envien los clientes que a el se conecten. El layout estará formado por una o varias pantallas (de forma que puedo crear un escritorio compuesto), y uno o varios teclados y ratones.
Pero, el servidor gráfico no se encarga de mover las ventanas, cambiar su tamaño, Mostrar un escritorio con iconos, etc: Estas tareas son realizadas por otros componentes, como son el gestor de ventanas o el gestor de escritorios.
El servidor gráfico en Linux tiene una potencia inusitada, ya que los clientes que se conectan al servidor pueden ser procesos locales al servidor (es decir, procesos que están ejecutándose en el mismo ordenador), o procesos que pueden ejecutarse remotamente.
Pero esta potencia tiene su coste: Es un entorno gráfico más lento que el usado por Microsoft en Windows.

Aplicaciones gráficas

Las aplicaciones gráficas son aplicaciones que conectan con el servidor gráfico para mostrar un area rectangular llamado ventana, y dentro de el una serie de controles que forman la aplicacion.
Un ejemplo de ventana lo vemos a continuación:
Una aplicación gráfica no tiene bordes de ventana, ya que los bordes son dibujados por el gestor de ventanas, que veremos a continuación. Es decir, la aplicación no es más que la ventana sin bordes.

Bibliotecas de controles

Una aplicación se diseña usando controles que pertenecen a una biblioteca de controles, que no es más que un conjunto de controles (como cuadros de texto, botones, etc) que podemos usar al programar una aplicación.
Actualmente Linux usa profusamente una de las dos siguientes bibliotecas de controles:
  1. gtk: Son los controles usados en el escritorio gnome.
  2. qt: Son los controles usados en el escritorio KDE.

Entorno de escritorio

Un entorno de escritorio no es más que una serie de programas que nos van a permitir usar aplicaciones gráficas en el entorno gráfico de forma cómoda. Este nos va a proveer de una interfaz de usuario gráfica completa, incluyendo iconos,  ventanas, barras de herramientas, etc... , así como la posibilidad de mover las ventanas o modificar sus tamaños. Sus componentes más importantes son el gestor de ventanas y el gestor de escritorio.

Gestor de Ventanas

Una aplicación para el servidor gráfico no dispone de bordes de ventana, ni de botón maximizar, etc.
Para que podamos mover las ventanas, cambiar su tamaño y resto de tareas a las que estamos habituados debemos tener instalado un gestor de ventanas, que no es más que un programa que se va a encargar de dibujar bordes a nuestras ventanas, y nos va a permitir realizar tareas tan habituales con estas, que serían imposibles si solo dispusiéramos del servidor gráfico.
Como en puntos anteriores, en función del entorno de escritorio, tendremos distintos gestores de ventanas:
  1. Para KDE disponemos de Kwin.
  2. Para gnome disponemos de Metacity.

Gestor de archivos

El gestor de archivos nos va a proveer de la posibilidad de poder manejar carpetas y archivos mediante el uso de iconos, usualmente dibujando un/os escritorio/s donde también podremos dejar nuestros iconos.
  1. En KDE el gestor de archivos es el propio navegador Web Conqueror.
  2. Nautilis: Gestor de archivos para Gnome.

Gestor de Sesiones

La forma tradicional de iniciar el entorno gráfico en Linux era iniciar una consola y lanzar el comando startx.
Startx se encargaba de arrancar para el usuario el entorno de escritorio (gnome, KDE, etc) que tuviera configurado.
Pero posteriormente, surgió la necesidad de crear un entorno que nos permitiera arrancar el equipo de una forma similar a como lo hacia Windows: Pidiéndonos nuestro usuario y contraseña. Eso es un gestor de sesiones.
Además de pedirnos nuestro usuario y contraseña, el gestor de sesiones nos va a permitir iniciar la sesión en uno de los entornos de escritorio que tengamos instalados en el equipo, ya sea Unity, KDE, Gnome, etc.
Los gestores de sesiónes más habituales son los siguientes:
  1. xdm: Xdm fue el primer gestor de sesiones para el mundo linux y actualmente está en desuso. Además es muy limitado ya que no permite escoger el entorno de escritorio al usuario.
  2. gdm: Es el gestor de sesiones de Gnome. Gdm nos permitirá iniciar sesiones, tanto locales como remotas. También permite apagar y reiniciar el equipo, escoger el entorno de escritorio al usuario, el idioma del teclado y los mensajes, etc. Es un entorno muy completo, aunque está empezando a caer en desuso.
  3. kdm: Es el gestor de sesiones oficial de KDE. Es similar a gdm.
  4. lightdm: Es un gestor de sesiones nuevo. Su objetivo es ser un gestor de sesiones ligero, y muy adaptable. Es el que usa Ubuntu desde hace algunos años.

Resumen

Cuando iniciamos Linux, se arranca el servidor gráfico Xorg, que nos mostrará un programa llamado Gestor de Sesiones, donde podremos iniciar sesión.
Tras el inicio de sesión, se descarga el gestor de sesiones, y se carga un gestor de escritorio, que nos mostrará el escritorio y las barrás de herramientas que forman el entorno.
En Linux actualmente, el gestor de sesiónes más usado es lightdm.

jueves, 19 de abril de 2012

Un media center con XBMC

Un media center con XBMC

En mi casa tengo un ordenador siempre encendido, y desde hace bastante me asalta la idea de convertirlo en un media center.
Es una máquina con Ubuntu Linux, usando como gestor de sesiones LightDM, para luego arrancar gnome o KDE como entornos de escritorio.
Existe un paquete denominado XBMC que podemos usar como media center, pero que normalmente se arranca como una aplicación más sobre KDE o gnome para después ponerla en pantalla completa: No es lo que buscamos, ya que nuestro objetivo es usar XBMC independientemente de un entorno de escritorio.

Que es XBMC

  1. XBMC es un media center con licencia libre GNU diseñado para la primera consola XBox.
  2. XBMC ha sido portado a distintos sistemas operativos, como son GNU/Linux, Windows, Mac OS X.
  3. XBMC puede reproducir la mayoría de los formatos multimedia.
  4. XBMC puede ser ampliado con plug-ins escritos en Phyton.

Como se instala XBMC en Ubuntu 12.04

En Ubuntu 12.04 ya aparece incluido en los repositorios oficiales, de modo que basta con la siguiente línea para instalarlo:

sudo apt-get install xbmc
En distribuciones mas antiguas de Ubuntu no estaba incluido, por lo cual habrá que incluir un repositorio no oficial para poder usarlo. Para más información, ver la página oficial de xbmc(http://xbmc.org/).

Arrancar XBMC dentro de un entorno de escritorio

Mediante el comando xbmc, obtendremos el siguiente resultado:
Como puedes ver, el aspecto es genial, pero: Todavía no tenemos un media center, ya que necesitamos que xbmc se inicie de forma automática en el inicio del ordenador.

Arranque de XBMC en el inicio de sesión

Si salimos a la pantalla de inicio de sesión, veremos que disponemos de un nuevo inicio de sesión, el inicio XBMC, que nos va a permitir iniciar sesión directamente en xbmc:
Cuando iniciamos sesión en XBMC nos aparece XBMC en modo de pantalla completa, de forma que podremos usarlo como centro multimedia. Al salir de XBMC volveremos a la pantalla de inicio de sesión.

Por que esta solución no es la correcta

Xbmc dispone de una característica de perfiles, que permite crear dentro de xbmc perfiles de usuario con contraseñas, y con los tipicos ajustes de seguridad, haciendo que ciertas características del programa solo esten accesibles desde ciertos perfiles.
Además, lo deseable para un media center sería que xbmc se iniciara automáticamente  en vez de arrancarse la pantalla de inicio de sesión. Es decir, no queremos que aparezca por ningún lado la pantalla de inicio de sesión, y lo que queremos es que xbmc sea nuestro inicio de sesión.