Cambiar de escritorio en Debian y Ubuntu

Captura de GNOME 3, Ubuntu Desktop. Extensiones usadas: Unite, GSConnect, Bitcoin markets y Openweather


Si estás harto de tu escritorio actual en distribuciones GNU/Linux, las Debian y derivadas disponen de un comando llamado tasksel, que es un script escrito en Perl. Éste dispone de una lista de tareas que permiten instalar distintas distribuciones de programas. Cada una de ellas se corresponde con un paquete en los repositorios de la distribución GNU/Linux. Una vez seleccionado y dándole a aceptar, tasksel ejecutará el comando

apt-get -q -y -o APT::Install-Recommends=true -o APT::Get::AutomaticRemove=true -o APT::Acquire::Retries=3 install

con los paquetes seleccionados. Si escogemos ubuntu-desktop, el comando incluirá la cadena de texto ubuntu-desktop^. Si deseamos eliminarlo, pondrá ubuntu-desktop^- (guión al final indicando el borrado). Obviamente si desinstalamos el *-desktop que tengamos instalado habrá que instalar otro. Nótese que ubuntu-desktop no incluye todos los paquetes de la versión live (ubuntu-live). Entre los faltantes están grub-pc, cryptsetup y linux-image-generic. Conviene instalarlos después de acabar con tasksel. De lo contrario algunos dispositivos no funcionarán por falta de drivers o el disco duro quedará inaccesible si lo tenemos cifrado, puesto que no se habrá incluido la información de identificación de la partición cifrada ni el driver necesario para manejar particiones cifradas. Otros paquetes candidatos a instalar son ubuntu-restricted-extras y ubuntu-restricted-addons. Añaden soporte adicional para códecs patentados de vídeo y audio. Estos paquetes son desinstalados al eliminar el *-desktop que tengamos instalado actualmente y no se instalan al instalar otro *-desktop distinto.

Lista de tareas de tasksel

Si ya tenemos el sistema que no puede arrancar, entonces hay que iniciar el ordenador con un USB cargado con GNU/Linux y desde el entorno de pruebas instalar los paquetes que faltan en el sistema que hay en el disco. Para ello se echa mano de chroot.

Si tenemos discos cifrados, entonces hay que pasarle el nombre correcto para que los monte. No vale utilizar la interfaz gráfica para ello.1 Dicha información reside en el archivo /etc/crypttab de la partición a la que ya no se tiene acceso. El nombre se corresponde con la primera palabra de la (o las, una por cada disco cifrado) línea(s) que aparezca. Por ejemplo:

nombre UUID=451f0d32-a5f2-d44c-9c44-d35e7d3b494c none luks,discard


Para montar dicha partición, sabiendo que se corresponde con la partición lógica del disco duro, habría que usar el siguiente comando en una sesión «live»:

user@host:~$ sudo cryptsetup open /dev/sda5 nombre --type=luks


Ese comando supone un único disco duro (sda,sdb,sdc, ...) y estar usando la primera partición lógica (a partir de 5: 5,6,7, ...). Si desconocemos el nombre, entonces hay que leer el crypttab. Esto requiere montar la partición que desconocemos. Una vez leído, se reinicia el ordenador. Desmontarla sin reiniciar también es posible siempre que el volumen no esté ocupado. Todo esto suponiendo que no nos sabemos el nombre empleado para la partición cifrada. El crypttab está ahí para que la imagen del núcleo (/boot/vmlinuz-X.YZ.A-BC-generic) incluya dicha información cuando se genere con update-initramfs. No es una necesidad para GNU/Linux, sólo para el arranque. Cryptsetup nos habrá creado nuevos dispositivos en /dev/mapper, los desbloqueados al abrir la partición cifrada. Ya podemos proceder al chroot:

user@host:~$ sudo mount /dev/mapper/ubuntu-root /mnt
user@host:~$ sudo mount /dev/mapper/ubuntu-home /mnt/home
user@host:~$ sudo mount /dev/sda1 /mnt/boot
user@host:~$ sudo mount -t procfs /proc /mnt/proc
user@host:~$ sudo mount -t sysfs /sys /mnt/sys
user@host:~$ sudo mount -o bind /dev /mnt/dev
user@host:~$ sudo mount -t devpts /dev/pts /mnt/dev/pts
user@host:~$ sudo chroot /mnt
root@chroot:~#

Con esos comandos hemos montado las particiones cifradas que hemos desbloqueado previamente así como la partición de arranque que nunca va cifrada. Luego hemos montado las carpetas que contienen la información de tiempo de ejecución del sistema operativo «live» arrancado mediante USB. Seguidamente ejecutamos el comando chroot. Desde ese momento y hasta utilizar el comando exit o la combinación de teclas ctrl+d para finalizar la sesión del usuario chroot, todos los programas ejecutados serán los del sistema que hay en el disco duro y todo se aplicará al sistema del disco duro, no al «live». Durante este tiempo instalaremos los paquetes que nos falten, entre ellos cryptsetup. La instalación de cryptsetup incluye la regeneración de la imagen de arranque mediante update-initramfs -u, comando que utiliza todo lo que hay en /usr/share/initramfs-tools para crearla. La instalación de cryptsetup añade una serie de scripts en ese directorio para que update-initramfs los ejecute. Dichos scripts leen el archivo /etc/crypttab para configurar la imagen del núcleo, añadiendo la información de identificación del volumen cifrado, los drivers para manejarlo (función add_crypto_modules() en el script /usr/share/initramfs-tools/hooks/cryptroot) y los binarios de cryptsetup. Cuando hayamos acabado, salimos del chroot y desmontamos todas las particiones en orden inverso con el comando umount:

root@chroot:~# exit
user@host:~$ sudo umount /mnt/dev/pts
user@host:~$ sudo umount /mnt/dev
user@host:~$ sudo umount /mnt/sys
user@host:~$ sudo umount /mnt/proc
user@host:~$ sudo umount /mnt/boot
user@host:~$ sudo umount /mnt/home
user@host:~$ sudo umount /mnt

En realidad no tiene que ser un orden inverso estricto sino jerárquico. home, boot, proc y sys se pueden desmontar en cualquier orden. Pero pts debe ir antes que dev y mnt debe ser siempre el último. En caso contrario se nos indicará que el punto de montaje está ocupado y no se puede desmontar. Finalmente, bloqueamos la partición cifrada con

user@host:~$ sudo cryptsetup close nombre --type=luks

Otro tema es que puede haber paquetes que impidan la desinstalación del escritorio actual (véase los sistemas de gestión de paquetes). Estos han de ser eliminados manualmente antes de ejecutar tasksel o el comando equivalente. De hecho para averiguar qué paquetes son los que bloquean el procedimiento se puede utilizar el comando en vez de la interfaz de tasksel, ya que así apt-get nos mostrará su progreso, errores incluidos. En caso contrario podemos ver el registro en /var/log/apt/term.log. Los archivos history.log muestran los comandos. Los term.log la información que aparece en la terminal de texto. Una vez sepamos qué paquetes dan problemas de dependencias, los eliminamos con apt.

Las operaciones relacionadas con tasksel se han de realizar desde una TTY, por lo que se ha de cambiar a una de ellas mediante Ctrl+Alt+FX donde X es el número de TTY. En versiones recientes de Ubuntu la TTY 1 se corresponde con el entorno gráfico. Por tanto el rango disponible es Ctrl+Alt+F2-6.

Cambiando de escritorio no se pierden las configuraciones. Los programas pese a desinstalarlos y volverlos a instalar mantienen tus historiales y opciones personalizadas. Se puede tener más de un escritorio instalado pero se mezclarán programas y el resultado puede no ser satisfactorio: mezcla de programas de distintos escritorios y estética poco cohesionada. Por ejemplo Network Manager tiene una interfaz para GNOME y otra para KDE. Es razonable desinstalar primero un escritorio y luego instalar el deseado. Si se instala un escritorio manteniendo el actual puede que se nos pregunte por cuál gestor de sesión se desea mantener. GNOME instala GDM3 y KDE instala SDDM. El resto de escritorios usan uno de los dos normalmente, salvo que tengan uno propio también.

Si te compras un ordenador con GNU/Linux de serie,  siempre podrás cambiarle el escritorio si no te gusta.

1 Salvo que el nombre en /etc/crypttab sea el mismo que asigna por defecto el montaje automático de la interfaz gráfica. Siempre es luks-UUID, en este caso sería luks-451f0d32-a5f2-d44c-9c44-d35e7d3b494c

Comentarios