Migrando a systemd en ArchLinux

Aunque ya son meses de planes y avisos, hace apenas un par de semanas se dió a conocer que ArchLinux reemplazará sysvinit (así como initscripts) por systemd, lo cual ha causado mucha polémica. El cambio ha sido gradual: Hace tres meses, udev fue reemplazado por (fusionado en) el paquete systemd-tools, y hace apenas unas horas este último, al igual que libsystemd, acaban de ser reemplazados por el mismísimo paquete systemd. La migración definitiva está muy próxima, ¡debes estar preparado!

Si eres usuario de ArchLinux seguro te estás preguntando: ¿Debemos migrar en este momento?, ¿qué implica usar systemd?, ¿qué ventajas me ofrece con respecto a sysvinit?, o peor aún, ¿qué rayos es eso de systemd y sysvinit?

Luego de haber leído bastante documentación (referencias al final de este post) y de haber realizado varias pruebas (primero en una máquina virtual y luego en mi sistema principal), trataré de responder a cada una de esas preguntas.

Un poco de historia

En los sistemas operativos basados en UNIX (Linux, FreeBSD, MacOS X, etc) existe un proceso especial, el primero generado por el kernel y en ejecutarse durante el booteo, conocido como init (el cual obviamente tiene el PID número 1), el cual se encarga de ejecutar el resto de los procesos del sistema, e incluso sigue activo como daemon (comunicándose constantemente con el kernel) hasta que el usuario apaga o reinicia el equipo, momento en que dicho proceso ejecuta todo lo necesario para cerrar el sistema.

Desde sus inicios, y hasta la fecha, la mayoría de las distros de Linux utilizan sysvinit. A primera vista podemos darnos cuenta que su nombre proviene de SysV init, o UNIX System V init system, con lo cual nos damos una idea de lo veterano que es este proceso de inicialización (por no decir viejo y obsoleto).

¿Qué alternativas modernas existen?

  • Existe launchd, pero es exclusivo del sistema MacOS X.

  • En 2006 fue liberado Upstart, desarrollado por Scott James Remnant (ex empleado de Canonical, ahora trabaja en Google). Este proceso es usado principalmente por Ubuntu y Chrome OS. Algunas otras distros, como Fedora, lo implementaron en algunas de sus versiones, pero han optado por una mejor opción (sigue leyendo).

  • ¡Y llegó systemd!, liberado apenas en 2010. Su desarrollador principal es Lennart Poettering, creador del conocido PulseAudio (actualmente labora para RedHat). Debido a sus fantásticas características, hoy día es usado de manera predeterminada en distros populares como Fedora y OpenSUSE, por lo que podemos inferir que, a pesar de su corta vida, systemd ya está listo para nivel producción.

Beneficios de systemd

Los principales beneficios de systemd comparado con sysvinit / initscripts son:

  • Tiene capacidades “hotplug”, o sea, systemd asume que todos los recursos del sistema pueden aparecer o desaparecer en cualquier momento. Si conectamos un disco duro externo después de que systemd ha iniciado, se encargará de aplicarle fsck y montarlo correctamente, a diferencia de initscripts que necesita que todos los discos se encuentren enumerados y listos cuando ejecuta fsck para luego montarlos.

  • Podemos saber el estado del sistema en cualquier momento, ya que systemd lleva un registro (journal) mediante cgroups (ya no más PIDs) de todos los daemons y procesos que ha iniciado, quién es el dueño, cuál ha fallado, etc.

  • Es modular. Todo el contenido ejecutado por initscripts en /etc/rc.sysinit ahora es dividido en varios servicios independientes, cada uno de ellos bien documentado y de fácil comprensión. ¡Puedes crear tus propios servicios!

  • Actualmente udev (que incluso ha sido fusionado en systemd) y dbus son usados (inapropiadamente) para iniciar daemons y servicios sobre demanda. Con systemd todo ese trabajo está cubierto, pues es una de sus funciones principales.

  • Actualmente debemos especificar y tener mucho cuidado en el orden de los daemons en la sección DAEMONS del archivo /etc/rc.config. Con systemd se utiliza la activación de daemons por medio de sockets, aportando capacidades de paralelización.

  • Actualmente es bastante complicado implementar seguridad vía sandboxing a cada script rc (/etc/rc.sysinit,/etc/rc.single,/etc/rc.multi, etc). Con systemd sólo necesitamos agregar unas simples opciones de configuración a los archivos de cada unit (de las cuales hablaré más adelante) para aislarlas del sistema de diversas maneras.

  • Los archivos de servicio de systemd pueden ser escritos y distribuidos por cualquier usuario, en vez de los scripts rc escritos específicamente para cada distro. De esta manera, la colaboración entre usuarios y desarrolladores de systemd puede lograr la creación de servicios “perfectos”, que deberían funcionar en cualquier distro.

  • Por origen, systemd es un proyecto “cross-distro“, donde colaboran desarrolladores de todas las grandes y muchas pequeñas distros.

  • Y como ya se lo pueden imaginar, ¡systemd es muy rápido!. Es notable la reducción del tiempo al momento del booteo, incluso al cerrar el sistema es mucho, ¡pero mucho más rápido! (comparado con sysvinit/initscripts, por supuesto). Toda esta velocidad es básicamente un “efecto secundario” de todas las bondades descritas en los puntos anteriores.

La lista anterior no es exhaustiva, ¡hay más beneficios al usar systemd!

Preparando nuestro ArchLinux para systemd

Seguro que después de haber leído la lista anterior quieres salir corriendo para instalar systemd… ¡no lo hagas! Antes necesitas preparar tu sistema antes de la migración.

Lo primero que debemos hacer, es revisar nuestro querido y viejo archivo /etc/rc.conf (el cual es usado por initscripts), pues prácticamente ya no será utilizado con systemd, por lo que debemos migrar toda las configuraciones ahí contenidas por el nuevo esquema de configuración:

  • El valor de HOSTNAME ahora se establece en el archivo /etc/hostname (el nombre de nuestro hostname, por ejemplo localhost, es lo único que debe tener dicho archivo). También hay que ajustar el archivo /etc/hosts para que coincidan.

  • El valor de TIMEZONE ahora se establece por medio de un symlink de /etc/localtime a /usr/share/zoneinfo/<ZONA>/<SUBZONA> (reemplaza <ZONA> y <SUBZONA> según tu ubicación geográfica). Por ejemplo, para México:

    ln -s /usr/share/zoneinfo/America/Mexico_City /etc/localtime
  • Los valores de KEYMAP, CONSOLEFONT y CONSOLEMAP ahora se establecen en el archivo /etc/vconsole.conf (el cual debes crear).

    • KEYMAP especifica la distribución del teclado. Las opciones disponibles se encuentran en /usr/share/kbd/keymaps.

    • CONSOLEFONT especifica la fuente (tipo de letra) a usar en la consola (el programa setfont toma este valor durante el booteo). Las opciones disponibles se encuentran en /usr/share/kbd/consolefonts. También puede usarse FONT. Esta configuración es opcional.

    • CONSOLEMAP especifica el mapa de consola correspondiente, que también es leído por setfont. Las opciones disponibles se encuentran en /usr/share/kbd/consoletrans. También puede usarse FONT_MAP. Esta configuración es opcional.

    Por ejemplo:

    KEYMAP=es
    CONSOLEFONT=lat9w-16
    CONSOLEMAP=8859-1_to_uni
  • El valor de LOCALE (el cual especifica el idioma del sistema y de la mayoría de las aplicaciones) ahora se establece en el archivo /etc/locale.gen, donde debemos descomentar (eliminar el “#” al inicio de la línea) la localización deseada. Por ejemplo, para soporte UTF-8 en Español para México:

    ...
    #es_HN ISO-8859-1
    es_MX.UTF-8 UTF-8
    #es_MX ISO-8859-1
    ...

    Para aplicar los cambios realizados, debemos ejecutar el comando locale-gen.

    También es buena idea establecer dicho valor con la variable LANG en el archivo /etc/locale.conf, donde también podemos establecer otros valores interesantes, como LC_COLLATE, que especifica cómo se ordenan los archivos al ejecutar el comando ls. Ejemplo:

    LANG="es_MX.UTF-8"
    LC_COLLATE="C"
  • Los valores (lista separada por espacios) de MODULES ahora deben establecerse en uno o más archivos del tipo <MODULO>.conf: En el directorio /etc/modules-load.d/ los módulos para ser cargados incondicionalmente durante el booteo, y en /etc/modprobe.d/ (normalmente usado por udev para cargar módulos sobre demanda) los módulos que no se auto ejecutarán (anteponiendo la palabra blacklist). Ejemplos:

    # /etc/modules-load.d/virtualbox.conf
    vboxdrv
    # /etc/modprobe.d/nobeep.conf
    blacklist pcspkr

Puedes poner varios módulos en un sólo archivo .conf, pero cada uno en una línea aparte.

¿Y los valores de DAEMONS? Esos no los cambiaremos por el momento (es lo único que debemos dejar habilitado en /etc/rc.conf). Lo que si haremos es tener muy presente qué daemons son los que ahí se encuentran. Posteriormente (luego de instalar systemd), migraremos cada daemon a su respectiva unidad de servicio (no se desesperen, ya llegaremos a este punto).

Instalación de systemd en ArchLinux

¡Por fin! Luego de tanta introducción y preparación, hemos llegado al punto clave, ¡instalemos systemd en nuestro querido ArchLinux!

  1. Antes que nada, ¡actualiza tu sistema!

    sudo pacman -Syu
  2. Ya debes tener instalado el paquete systemd (vuelve a leer el primer párrafo de este post). De todas formas, lo puedes instalar con el comando:

    sudo pacman -S systemd
  3. A pesar de que ya instalamos systemd, si reiniciamos nuestro equipo, de nuevo sysvinit e initscripts se ejecutarán, ya que aún estamos en un “esquema mixto” (para ver que todo funciona bien). Lo que haremos entonces, es agregar init=/bin/systemd a los parámetros del kernel del bootloader que utilices.

    • Si usas Grub Legacy, edita el archivo /boot/grub/menu.lst y modifica la línea que inicia con kernel.

      title Arch Linux
      root (hd0,0)
      kernel /vmlinuz-linux root=/dev/sda3 ro quiet init=/bin/systemd
      initrd /initramfs-linux.img
    • Si usas Grub2, edita el archivo /etc/default/grub y modifica la línea que inicia con GRUB_CMDLINE_LINUX_DEFAULT.

      GRUB_DISTRIBUTOR="Arch Linux"
      GRUB_CMDLINE_LINUX_DEFAULT="quiet init=/bin/systemd"
      GRUB_CMDLINE_LINUX=""

      Es necesario actualizar Grub2 con el comando

      sudo grub-mkconfig -o /boot/grub/grub.cfg
    • Si usas syslinux, edita el archivo /boot/syslinux/syslinux.cfg y modifica la línea que inicia con APPEND.

      LABEL arch
      MENU LABEL Arch Linux
      LINUX ../vmlinuz-linux
      APPEND root=/dev/sda3 ro quiet init=/bin/systemd
      INITRD ../initramfs-linux.img

    ¡Nota! A pesar de que en los ejemplos incluí el parámetro quiet, es recomendable no incluirlo las primeras veces que iniciamos el sistema con systemd, para poder verificar que todo esté funcionando adecuadamente.

  4. ¡Reinicia el sistema! Ahora el proceso de booteo estará a cargo de systemd. ¿Algún problema? Ya que seguimos en un esquema mixto, puedes eliminar init=/bin/systemd de los parámetros del kernel para bootear nuevamente con sysvinit e initscripts, y así puedas corregir algún error.

    ¿Todo bien? ¡Sigue leyendo!

  5. ¿Recuerdas que mencioné que no olvidaras qué daemons teníamos en /etc/rc.conf? ¡Ahora es momento de migrarlos a systemd! Cada daemon debe tener su correspondiente unidad de servicio (las que explicaré a fondo en la siguiente sección), y cada una de ellas debemos habilitarlas (para que se ejecuten automáticamente al momento del booteo) por medio del comando:

    sudo systemctl enable <NOMBRE_DEL_SERVICIO>.service

    Algunos ejemplos (daemons con sus respectivas unidades de servicio):

    • network (Conexión ethernet por DHCP)

      sudo systemctl enable dhcpcd@eth0.service
    • networkmanager (Reemplazo de network)

      sudo systemctl enable NetworkManager.service
    • wicd (Reemplazo de network, más ligero que networkmanager)

      sudo systemctl enable wicd.service
    • crond (Programación de eventos)

      sudo systemctl enable cronie.service
    • cupsd (Common UNIX Printing System)

      sudo systemctl enable cupsd.service
    • ntpd (Cliente y servidor del Network Time Protocol)

      sudo systemctl enable ntpd.service
    • samba (Servicios de archivos e impresión para clientes de Microsoft Windows)

      sudo systemctl enable smbd.service
    • nginx (Servidor Web Nginx)

      sudo systemctl enable nginx.service
    • mysqld (Servidor de Base de Datos MySQL)

      sudo systemctl enable mysqld.service
    • postgresql (Servidor de Base de Datos PostgreSQL)

      sudo systemctl enable postgresql.service
    • gdm (Gnome Display Manager)

      sudo systemctl enable gdm.service
    • kdm (KDE Display Manager)

      sudo systemctl enable kdm.service
    • slim (Simple Login Manager, ¡mi preferido!)

      sudo systemctl enable slim.service

    Algunas observaciones muy importantes:

    • Algunos daemons no tenemos que habilitarlos explícitamente, como es el caso de dbus y netfs.

    • Algunos daemons desgraciadamente aún no tienen unidades de servicio (como dropboxd y httpd). Si no puedes prescindir de ellos, te recomiendo continúes con el esquema mixto (para que sigan siendo llamados desde la línea DAEMONS del archivo /etc/rc.conf), hasta que hayan sido implementados, lo cual no debe demorar mucho tiempo… ¡hay que ser pacientes!

    • El daemon syslog-ng (que normalmente es el primero en la línea DAEMONS del archivo /etc/rc.conf), causa conflictos con el nuevo syslog.socket, por lo que es necesario eliminarlo de la lista si planeamos seguir con el esquema mixto.

    Cuando estés seguro que ya no ejecutas ningún daemon especificado en el archivo /etc/rc.conf, entonces éste deja de tener utilidad. Te recomiendo hacerle un respaldo para recordar a nuestro viejo amigo, que tantos años nos acompañó.

  6. ¿Tienes personalizados los archivos /etc/rc.local y/o /etc/rc.local.shutdown? ¡Debes convertirlos a unidades de servicio! Pero ya que aún no sabemos cómo hacer eso, podemos darles soporte usando unas unidades de servicio especiales que llaman a ambos archivos.

    cp /usr/lib/systemd/system/rc-local{,-shutdown}.service /etc/systemd/system/
  7. Reinicia el sistema nuevamente. Si hay algún error, verifica de nuevo los pasos previos. ¿Todo bien? ¡Sigue leyendo!

  8. Cuando ya todo funcione perfectamente, ya podemos dar el paso definitivo del esquema mixto a un sistema systemd puro, y eso lo logramos instalando el paquete systemd-sysvcompat, el cual al mismo tiempo eliminará sysvinit e initscripts (éste último es probable que previamente tengas que eliminarlo manualmente con pacman -R), y le aplicará un pacsave a rc.conf, rc.local and rc.local.shutdown.

    sudo pacman -S systemd-sysvcompat
  9. Ya podemos eliminar init=/bin/systemd de nuestro parámetro del kernel (lo que hicimos en el paso 4), ya que ahora /sbin/init es un symlink a systemd.

¡Eso es todo! Si gustas puedes reiniciar nuevamente, para disfrutar al 100% de systemd en tu ArchLinux.

¡Ya tengo systemd! ¿Y ahora qué?

¡Ahora muchas cosas han cambiado! Acciones como ejecutar daemons, cambiar de runlevel, revisar el log del sistema o usar pm-utils para suspender o hibernar, ahora tienen un enfoque diferente, básicamente nos estamos enfrentando a un nuevo paradigma. En la presente sección les mencionaré los conceptos básicos para que empiecen a familiarizarse con systemd.

Previamente he mencionado el término “unidades de servicio“, pero no había explicado de qué se trataban exactamente. Una unidad o unit, no es más que un archivo de configuración que contiene información no sólo de servicios (.service, los más comunes, nuestros conocidos daemons), si no también de sockets (.socket), dispositivos (.device), puntos de montaje (.mount), puntos de auto-montaje (.automount), e incluso grupos de otras unidades (.target).

Como dato adicional, es interesante saber que la sintaxis de la información contenida en los archivos de las unidades está inspirada en los archivos .desktop de la especificación XDG Desktop Entry, que a su vez estuvo inspirada por… wait for it… ¡los archivos .ini de Microsoft Windows!, ironías de la vida.

Los archivos de unidades disponibles en nuestro sistema podemos encontrarlos en /usr/lib/systemd/system/ y /etc/systemd/system/ (éste último directorio toma precedencia en caso de duplicados).

Básicamente estaremos trabajando con el comando systemctl para interactuar con las diversas unidades de systemd. Algunos comandos de uso común son:

  • Listar las unidades que se estén ejecutando actualmente.

    systemctl

    o bien,

    systemctl list-units
  • Listar las unidades con errores.

    systemctl --failed
  • Listar las unidades instaladas.

    systemctl list-unit-files
  • Activar una unidad inmediatamente.

    systemctl start <unit>
  • Desactivar una unidad inmediatamente.

    systemctl stop <unit>
  • Reiniciar una unidad.

    systemctl restart <unit>
  • Recargar la configuración de una unidad.

    systemctl reload <unit>
  • Mostrar el estado de una unidad, esté o no en ejecución.

    systemctl status <unit>
  • Verificar si una unidad está habilitada.

    systemctl is-enabled <unit>
  • Habilitar una unidad para ejecutarse en cada booteo.

    systemctl enable <unit>
  • Deshabilitar una unidad para que no se ejecute en cada booteo.

    systemctl disable <unit>
  • Mostrar la ayuda asociada a una unidad (si se encuentra disponible).

    systemctl help <unit>

En el caso de la administración de energía del sistema, también debemos usar el comando systemctl. Si nos encontramos en una sesión de usuario de ConsoleKit, podemos ejecutar los siguientes comandos sin necesidad de privilegios de root (a no ser que haya otra sesión activa):

  • Cerrar y reiniciar el sistema.

    systemctl reboot
  • Cerrar y apagar el sistema.

    systemctl poweroff
  • Cerrar y detener el sistema.

    systemctl halt
  • Suspender el sistema.

    systemctl suspend
  • Hibernar el sistema.

    systemctl hibernate

Ahora bien, los clásicos runlevels son un concepto de sysvinit, quien examinaba el archivo /etc/inittab (ahora obsoleto) para saber el valor de :initdefault:. El paradigma correspondiente en systemd son las unidades .target, que básicamente tienen el mismo propósito, pero con algunas diferencias, por ejemplo, cada target tiene un nombre, en vez de la clásica numeración de los runlevels:

  • Runlevel 0 = poweroff.target

  • Runlevel 1 = rescue.target

  • Runlevels 2, 3 y 4 = multi-user.target

  • Runlevel 5 = graphical.target

  • Runlevel 6 = reboot.target

Ejemplos de uso:

  • Para cambiarnos a otro target en la sesión actual (no afecta al siguiente booteo).

    systemctl isolate graphical.target
  • Para establecer un nuevo target predeterminado (el usado en cada booteo).

    systemctl enable multi-user.target

Por último, quisiera mencionarles un poco acerca del nuevo log del sistema, conocido como journal. Para revisarlo, basta usar el comando:

journalctl

El journal escribe en los archivos contenidos en el directorio /run/systemd/journal/, y por lo mismo, se pierden al reiniciar el sistema. Si deseamos logs persistentes, sólo debemos crear el directorio /var/log/journal/:

mkdir /var/log/journal/

¡Aclaración! En todos los comandos de esta sección omití el uso de sudo para facilitar la lectura de los comandos; no olviden incluirlo al inicio de ellos cuando sea necesario.

Referencias

Es importante que tomes en cuenta que todo lo expuesto en el presente post es meramente un resumen (si, ¡por largo que se vea!), y sólo describe los pasos generales al instalar y usar systemd en ArchLinux. Siempre habrán excepciones o casos especiales, por lo que les recomiendo leer, investigar y documentarse a fondo sobre el tema. Aquí les dejo una lista de referencias, que son las que usé para elaborar este tutorial.

Share

¿Cansado de GRUB? ¡Usa Syslinux en ArchLinux!

Por años he sido usuario de GRUB (ya ni recuerdo la última vez que usé LILO) como bootloader. Desde que salieron las nuevas ISO de instalación de ArchLinux he tenido ganas de probar Syslinux, y luego de algunas pruebas (primero en una máquina virtual y luego en mi sistema principal) he quedado satisfecho: ¡procedimiento sencillo y resultado sobresaliente!

[Booteando con Syslinux en ArchLinux]

Paso 1: Preliminares

Un par de cosas que debes tener en cuenta:

  • ¿Usas /boot como partición independiente? ¡Asegúrate de que esté montada! (Usa lsblk)
  • ¿Sabes dónde se encuentra tu partición / (root)? ¡Verifica en el archivo /etc/fstab!

Paso 2: Instala Syslinux

Instalemos el paquete syslinux desde [core]:

sudo pacman -S syslinux

Ahora, ejecutaremos un script que terminará de instalar Syslinux de manera automática (instala diversos archivos en /boot/syslinux/, marca la partición con la bandera boot y escribe el código de booteo en la MBR):

sudo syslinux-install_update -iam

¿Usas un disco con GPT (GUID Partition Table) en vez de MBR (Master Boot Record)? ¿Usas un arreglo de discos RAID? El script anterior tiene previsto ambos casos.

Paso 3: Configura Syslinux

¡Aún no reinicies tu sistema! Usa tu editor de texto favorito (en mi caso, vim) para abrir el archivo de configuración de Syslinux:

sudo vim /boot/syslinux/syslinux.cfg

El contenido de dicho archivo es muy intuitivo, y podemos modificarlo según nuestras necesidades.

Lo más importante (y necesario) que deben verificar se encuentra casi al final del archivo. Se trata de la ruta de nuestra partición / (¡no uses /boot!) sea la utilizada en las líneas que inician con APPEND en cada entrada del menú de Syslinux (las cuales inician con LABEL). Por ejemplo, en mi caso, mi / (root) es /dev/sda3:

LABEL arch
	MENU LABEL Arch Linux
	LINUX ../vmlinuz-linux vga=773
	APPEND root=/dev/sda3 ro
	INITRD ../initramfs-linux.img
 
LABEL archfallback
	MENU LABEL Arch Linux Fallback
	LINUX ../vmlinuz-linux
	APPEND root=/dev/sda3 ro
	INITRD ../initramfs-linux-fallback.img

Si son observadores, al final de la línea que inicia con LINUX (que también puede iniciar con KERNEL) incluí vga=773, para que se use un framebuffer de 1024×768.

Ahora bien, las primeras opciones del archivo son las siguientes:

DEFAULT arch
PROMPT 0
TIMEOUT 50

El significado de cada una de las líneas:

  • Cada opción del menú de Syslinux tiene un identificador asociado con LABEL, y uno de ellos debemos especificarlo como nuestra opción predeterminada con DEFAULT.

  • Si establecemos a 1 la línea PROMPT, haremos siempre visible el prompt boot:

  • El TIMEOUT indica la cantidad de décimas de segundo de espera (en nuestro ejemplo: 50 = 5 segundos).

Adicionalmente, podemos cambiar los colores usados en el menú de Syslinux, modificando los valores de las líneas que inician con MENU COLOR.

Ahora si, guarda las modificaciones en el archivo, sal de tu editor, ¡y reinicia tu sistema!

Paso Extra: ¡Syslinux Gráfico!

Si el menú textual no es lo suficientemente agradable a la vista, podemos establecer un menú gráfico. Para ello, antes de entrar nuevamente a editar el archivo /boot/syslinux/syslinux.cfg, debemos hacer dos pasos previos:

  • Copia el archivo vesamenu32.c32, que se encuentra en /usr/lib/syslinux/, al directorio /boot/syslinux/

    sudo cp /usr/lib/syslinux/vesamenu.c32 /boot/syslinux/
  • Aunque no es algo obligatorio, es muy atractivo tener una imagen de fondo, la cual debe ser de 640 x 480 pixeles. ¿Quieres usar la que se muestra en el ISO de instalación de ArchLinux? Aquí los pasos para descargarla y copiarla a /boot/syslinux/

    wget http://projects.archlinux.org/archiso.git/plain/configs/releng/syslinux/splash.png
    sudo cp ./splash.png /boot/syslinux/

Ahora si, editemos de nuevo nuestro archivo de configuración:

sudo vim /boot/syslinux/syslinux.cfg

En las líneas que inician con UI, debemos deshabilitar la opción menu.c32 y habilitar vesamenu.c32:

#UI menu.c32
UI vesamenu.c32

En la línea MENU BACKGROUND debemos especificar el nombre del archivo de la imagen que usaremos de fondo. En nuestro ejemplo:

MENU BACKGROUND splash.png

Si usaste la imagen de la ISO de instalación de ArchLinux, te recomiendo los siguientes parámetros extras para ajustar a dicho fondo la posición y tamaño del menú:

MENU WIDTH 78
MENU MARGIN 4
MENU ROWS 5
MENU VSHIFT 10
MENU TIMEOUTROW 13
MENU TABMSGROW 11
MENU CMDLINEROW 11
MENU HELPMSGROW 16
MENU HELPMSGENDROW 29

El resultado será similar a la imagen que observan al inicio del presente post.

Obviamente, si usan una imagen de fondo diferente, deben especificar valores adecuados para que el menú se vea bien.

Observaciones finales

¡Syslinux aún no soporta UEFI! Eventualmente lo hará, pero no hay fecha oficial.

Para más información, les recomiendo ampliamente leer sobre Syslinux en la Wiki de ArchLinux.

Share

Instalación de ArchLinux 2012 Paso a Paso [Tutorial]

[Actualización 7-Enero-2013] Nueva ISO de instalación disponible: ArchLinux 2013.01.04. Aún no hay anuncio oficial, pero es un hecho que aún no incluye el nuevo kernel 3.7. No hay cambios relevantes que afecten el procedimiento de instalación descrito en el presente tutorial, sin embargo, he actualizado los enlaces a esta última versión. ¡Esta es la última actualización que le hago a este post! El tutorial aumentado y actualizado llegará de la mano de mi nuevo proyecto.

[Actualización 1-Diciembre-2012] Nueva ISO de instalación disponible: ArchLinux 2012.12.01. No hay cambios relevantes que afecten el procedimiento de instalación descrito en el presente tutorial, sin embargo, he actualizado los enlaces a esta última versión.

[Actualización 2-Noviembre-2012] Nueva ISO de instalación disponible: ArchLinux 2012.11.01. No hay cambios relevantes que afecten el procedimiento de instalación descrito en el presente tutorial, sin embargo, he actualizado los enlaces a esta última versión.

[Actualización 13-Octubre-2012] ¡Por fin! Ahora el paquete systemd-sysvcompat se ha incluído de manera predeterminada en el grupo base, lo cual significa que cualquier nueva instalación dejará systemd instalado y corriendo por defecto en nuestro sistema (cabe mencionar que esto no afecta a instalaciones ya existentes, así que no se alarmen). Los pasos del tutorial son exactamente los mismos (ya realicé una instalación de prueba y todo perfecto), nada ha cambiado en el proceso, excepto un pequeño detalle (de la conexión a la red) que al final del tutorial lo explico.

[Actualización 8-Octubre-2012] Acaba de salir la nueva ISO de instalación: ArchLinux 2012.10.06, la cual incluye a systemd en su instalación, pero aún sigue instalando initscripts por defecto, por lo que el presente tutorial es 100% válido para este nuevo medio (como siempre, corrí una instalación de prueba, y todo perfecto).

[Actualización 7-Septiembre-2012] Acaba de salir la nueva ISO de instalación: ArchLinux 2012.09.07, qué básicamente contiene paquetes actualizados, por lo que el presente tutorial es 100% válido para este nuevo medio (ya corrí una instalación de prueba, y todo perfecto).

[Actualización 10-Agosto-2012] Tutorial actualizado para la última ISO de instalación: ArchLinux 2012.08.04.

ArchLinux LogoArchLinux es una excelente distro, y todos quienes la usan quedan encantados por sus bondades: rolling-release (una sola instalación, no hay “nuevas versiones”, sólo actualizaciones), bleeding-edge (siempre usarás las últimas versiones de tus aplicaciones favoritas, a unas horas de haber sido liberadas), KISS (“Keep it simple, Stupid!”, o sea, minimalista y sumamente personalizable), etc.

El presente tutorial surge del reciente lanzamiento de las nuevas ISOs de instalación de ArchLinux, las versiones 2013.01.04, 2012.12.01, 2012.11.01, 2012.10.06, 2012.09.07, 2012.07.15 y 2012.08.04, cuyo procedimiento de instalación es prácticamente el mismo, por lo que el presente tutorial es válido para cualquiera de ellas (obviamente, lo recomendable es instalar la última versión disponible).

Quienes hayan seguido el procedimiento de instalación de la anterior versión 2011.08.19 se encontrarán que ha cambiado drásticamente, pues ya no utiliza el conocido AIF (Arch Installation Framework), y prácticamente todo hay que hacerlo manualmente. ¡Pero no hay que asustarnos! Todo lo contrario, ya que debemos tomar este nuevo procedimiento de instalación como una nueva oportunidad para “redescubrir” las bases de nuestra querida distro.

¡Aclaración! El presente tutorial no pretende reemplazar la guía oficial de instalación (ahora también disponible en /root/install.txt desde el medio de instalación), la cual recomiendo ampliamente leer, ya que contiene información valiosa y complementaria.

¿Listos para entrar al asombroso mundo de Arch? ¡Iniciamos!

Paso 1: Obtener el medio de instalación

Ahora sólo tenemos una ISO de instalación, la conocida como Netinstall (ya no existe la edición “core”).

Descarga la ISO vía torrent:

archlinux-2013.02.01-dual.iso.torrent

Si no te agradan los torrents, puedes usar alguno de los mirrors de descarga directa.

Debido a que ahora la ISO se encuentra firmada, es importante descargar su firma PGP

archlinux-2013.02.01-dual.iso.sig

… y verificamos la ISO con la firma PGP:

pacman-key -v archlinux-2013.02.01-dual.iso.sig

Lo único que falta en este paso, es grabar la imagen ISO en un CD (pueden usar K3B, Brasero, etc), o bien, grabarla en una Memoria USB (pendrive) siguiendo las instrucciones siguientes:

  1. Hay que saber el nombre del dispositivo de tu pendrive (¡no vayas a formatear tu disco duro!):
    dmesg |tail

    Observa bien la salida del comando anterior. Lo más común es que el pendrive sea [sdb], en cuyo caso el dispositivo a usar sería /dev/sdb

  2. Desmontamos el pendrive:
    sudo umount /dev/sdb
  3. Finalmente, grabamos la imagen ISO al pendrive (¡esto elimina todo el contenido del dispositivo!):
    dd if=archlinux-2013.02.01-dual.iso of=/dev/sdb

Paso 2: Booteo y preparación inicial

Bootea desde tu CD o pendrive de instalación. Lo primero que veremos es la pantalla de bienvenida con un menú de varias opciones. Elige la primera.

[Pantalla de Bienvenida de ArchLinux]

Al finalizar el procedimiento de booteo, estaremos en el prompt de root.

[Login automático de root]

Lo primero que debemos hacer es establecer la distribución de nuestro teclado. Por ejemplo, para teclado “Español de España” usar:

loadkeys es

Para otras distribuciones de teclados QWERTY, verificar con:

ls /usr/share/kbd/keymaps/i386/qwerty

Paso 3: Particionar el Disco Duro

Aclaración: Para efectos del presente tutorial, asumiré que estamos instalando ArchLinux como único sistema operativo en el disco duro.

La utilería que usaremos para particionar el disco duro es cfdisk, y la ejecutamos con … wait for it …

cfdisk

[cfdisk con disco duro vacío]

Debemos crear al menos cuatro particiones.

  1. La primera, /boot, es donde se almacenarán los archivos esenciales para bootear ArchLinux (tales como el kernel, imágenes ramdisk, el bootloader, etc). Se recomienda un tamaño de 100 MiB (no es necesario dejarle más espacio).
  2. La segunda es la partición / (root), en donde se instalará el sistema operativo y las aplicaciones (entre muchas otras cosas). Su tamaño depende del uso que desees darle a ArchLinux. Unos 10 GiB deben ser más que suficientes para un sistema tradicional; si piensas que instalarás muchas aplicaciones (los juegos, entre ellas), será mejor pensar en unos 20 o 30 GiB.
  3. La tercera es la partición /home, donde se almacenarán nuestras configuraciones personales, las configuraciones de las aplicaciones (y tus perfiles en ellas), y tradicionalmente nuestros datos (documentos, fotos, videos, etc), por lo que se recomienda asignarle un espacio considerable del disco duro.
  4. Por último, toca elegir el tamaño de la partición swap, lugar donde se almacena temporalmente información de la memoria RAM (cuando ésta se llena) en el disco duro.¿Qué tamaño elegir para la swap?
    • Si tu equipo tiene poca memoria, lo tradicional es asignarle a la swap el doble de tamaño de la RAM (por ejemplo, con 512 MiB de RAM, usar una swap de 1 GiB).
    • Si tu equipo tiene una cantidad moderada de memoria, es común elegir una swap del mismo tamaño de la memoria (1 GiB RAM = 1 GiB de swap, 2 GiB de RAM = 2 GiB de swap).
    • Si eres de los afortunados en tener un equipo con generosa memoria, no es necesario aplicar las reglas anteriores, con 1 o 2 GiB es más que suficiente para la swap (y muy probablemente ni llegues a usarla).

Tip: Si creas la partición swap antes que /home, tienes una ventaja, ya que puedes asignarle a /home el espacio restante del disco duro. Para efectos del presente tutorial, seguiré con el orden arriba mencionado.

Usando cfdisk debemos crear el esquema de particionado elegido, creando una partición a la vez, con la secuencia de órdenes: New » Primary | Logical » Size (en MB) » Beginning

Dos detalles a tomar en cuenta:

  • En el caso de la partición elegida como Swap, ir a la opción “Type” y seleccionar 82 (Linux Swap) de la lista.
  • En el caso de la partición elegida como /boot, seleccionar la opción “Bootable

Al final, debemos tener algo como se aprecia en la siguiente imagen:

[cfdisk con disco duro particionado]

Una vez seguros, debemos elegir la opción “Write“, y confirmar escribiendo “yes“, la escritura de la nueva tabla de particiones. ¡Este procedimiento elimina todo el contenido previo del disco duro!

Para salir de cfdisk, elegir “Quit“.

¡Importante! Recuerda el “nombre” de cada partición, pues los usaremos en el siguiente paso. Ejemplo: sda1 = /boot, sda2 = /, sda3 = /home y sda4 = swap.

Paso 4: Formatear las Particiones del Disco Duro

El comando a usar es mkfs, y por medio de -t elegimos el tipo de formato.

  • Para /boot se recomienda Ext2 (que no tiene journaling):
    mkfs -t ext2 /dev/sda1
  • Para /, usar Ext4:
    mkfs -t ext4 /dev/sda2
  • Para /home, usar Ext4:
    mkfs -t ext4 /dev/sda3

Para formatear Swap, usar el comando mkswap:

mkswap /dev/sda4

Sólo resta activar Swap con:

swapon /dev/sda4

Paso 5: Montar las Particiones del Disco Duro

Primero, montamos la partición root (/) en /mnt

mount /dev/sda2 /mnt

Creamos los directorios para las otras particiones dentro de /mnt

mkdir /mnt/boot
mkdir /mnt/home

Y montamos las respectivas particiones

mount /dev/sda1 /mnt/boot
mount /dev/sda3 /mnt/home

Paso 6: Conectarse a Internet

Si estás usando las nuevas ISO 2012.09.07 o 2012.08.04 no necesitas conectarte manualmente a Internet, pues el daemon network es iniciado de manera predeterminada, configurando automáticamente tu red vía DHCP.

Ahora bien, si aún usas la ISO 2012.07.15, y te conectas por cable (ethernet), sólo basta levantar nuestra interfaz de red …

ip link set eth0 up

… y asignarle una IP dinámica vía DHCP.

dhclient eth0

Para conexiones inalámbricas, favor de leer https://wiki.archlinux.org/index.php/Wireless_Setup

Paso 7: Instalación del Sistema Base

Usaremos el nuevo script de instalación llamado pacstrap para instalar el sistema base. Además, el grupo de paquetes base-devel debe instalarse si posteriormente planeas compilar software desde AUR (recomendado).

pacstrap /mnt base base-devel

Paso 8: Instalación de Gestor de Arranque

Toca instalar el popular gestor de arranque GRUB (que realmente se trata de la recién liberada versión estable de GRUB2):

pacstrap /mnt grub-bios

Como pueden ver, se trata del GRUB diseñado para BIOS. Si estás interesado en el polémico UEFI, te recomiendo leer la documentación oficial.

Si no eres fan de GRUB, puedes instalar syslinux (aunque por el momento no tiene soporte para UEFI).

Paso 9: Configurando el Sistema

En este paso haremos diversas acciones de configuración de nuestro sistema. Primero, vamos a generar el archivo fstab con:

genfstab -p /mnt >> /mnt/etc/fstab

Para el resto de las acciones de configuración, haremos un chroot en nuestro recién instalado sistema:

arch-chroot /mnt

Debemos establecer el nombre de nuestro hostname en el archivo /etc/hostname. Por ejemplo:

localhost

Si, sólo tienes que escribir el nombre deseado, es lo único que debe tener dicho archivo.

Ahora, creamos un enlace simbólico (symlink) de /etc/localtime a /usr/share/zoneinfo/<ZONA>/<SUBZONA> (reemplaza <ZONA> y <SUBZONA> según tu ubicación geográfica). Por ejemplo, para México:

ln -s /usr/share/zoneinfo/America/Mexico_City /etc/localtime

Establece tus preferencias de localización editando el archivo /etc/locale.conf, por ejemplo para México:

LANG=es_MX.UTF-8

Así mismo, en el archivo /etc/locale.gen debemos descomentar (eliminar el “#” al inicio de la línea) tu localización, por ejemplo:

...
#es_HN ISO-8859-1
es_MX.UTF-8 UTF-8
#es_MX ISO-8859-1
...

Entonces, ya podemos generar tu localización con:

locale-gen

No hay que perder de vista que lo anterior no establece la distribución de nuestro teclado (lo que hicimos para la sesión actual/ con loadkeys en el paso 2), por lo que debemos establecer la variable KEYMAP en el archivo /etc/vconsole.conf (debes crear este archivo). Por ejemplo:

KEYMAP=es

Seguro te estarás preguntando: “¿Y no todo ésto se configura en /etc/rc.conf, el principal archivo de configuración de ArchLinux?”. La respuesta corta: ¡Ya no más!. El motivo: Unificar las configuraciones de initscripts y systemd (leer más al respecto). Ahora cada opción de configuración se establece en su archivo correspondiente.

Ahora, configuramos el bootloader, en este caso, GRUB:

grub-install /dev/sda

Y creamos el archivo grub.cfg con:

grub-mkconfig -o /boot/grub/grub.cfg
[Actualización 15-Agosto-2012] Luego de repetir en varias ocasiones el proceso de instalación, noté un molesto bug en el GRUB (no es un bug de ArchLinux), el cual muestra por una fracción de segundo un mensaje de error al iniciar el sistema:
Welcome to Grub!
error: file '/boot/grub/locale/en.mo.gz' not found

El bug está documentado pero aún no ha sido solucionado. El problema es que el archivo de localización en.mo.gz no existe (mas bien, no fue incluido por error), pero podemos hacer un truco: copiar el archivo en@quot.mo (que si existe) y ponerle el nombre en_US.mo (por desgracia, no existe la localización en español).

cp /boot/grub/locale/en@quot.mo /boot/grub/locale/en_US.mo

Si es necesario (aunque normalmente no lo es), edita el archivo /etc/mkinitcpio.conf según necesidades propias. Entonces, creamos el disco RAM inicial con:

mkinitcpio -p linux

No debemos olvidarnos de establecer la contraseña para el usuario root con:

passwd

Ahora si, ya podemos salir del entorno chroot con:

exit

Desmontamos las particiones previamente montadas en /mnt con:

umount /mnt/{boot,home,}

Y finalmente, reiniciamos el sistema con:

reboot

Si no has removido el medio de instalación (CD o pendrive), volverás a ver el menú de bienvenida, donde ahora debes elegir la segunda opción (para la próxima, no se te olvide removerlo).

Entonces, aparecerá el menú de GRUB, donde debemos elegir la primera opción para al fin entrar a nuestro recién instalado ArchLinux.

Paso 10: Habilitando la red con systemd [ ¡NUEVO! ]

¿Leíste mi comentario de actualización del 13-Oct-2012 al inicio de este tutorial? ¡Este es el paso adicional que debes ejecutar! Por algún motivo, a los chicos de ArchLinux se les ha olvidado habilitar la red luego de finalizada la instalación con el nuevo y flamante systemd (imagino que este detalle será corregido en la siguiente ISO), así que debemos hacerlo manualmente con el comando:

systemctl enable dhcpcd@eth0.service

¡Eso es todo! Reinicia (o activa la red de manera inmediata con systemctl start dhcpcd@eth0.service) y ya tendrás nuevamente acceso a la red, y obviamente a Internet.

Paso 11: Creación de nuestro usuario

Por motivos de seguridad no debemos usar el usuario root para el trabajo cotidiano, así que debemos crear nuestro propio usuario con adduser, una sencilla utilería que nos guiará paso a paso.

adduser

Se nos padirán varios datos, donde los únicos importantes son el nombre de usuario (con su respectiva contraseña) y los grupos a los cuales deseamos asignar al nuevo usuario. Ejemplo:

Login name for new user []: gespadas
...
Additional groups (comma separated) []: audio,lp,optical,storage,video,wheel,games,power,scanner
...

Los grupos especificados le darán privilegios necesarios al usuario para operar el sistema sin mayor problema:

  • audio – Tareas que involucran la tarjeta de sonido y aplicaciones relacionadas.
  • lp – Administración de impresoras.
  • optical – Manejo de los dispositivos ópticos (CD, DVD, etc).
  • storage – Manejo de diversos dispositivos de almacenamiento.
  • video – Tareas que onvolucran la tarjeta de video y aceleración por hardware.
  • wheel – ¡Importantísimo! Para que el usuario pueda usar sudo.
  • games – Necesario para permisos de escritura para juegos.
  • power – Necesario para poder apagar y reiniciar el sistema.
  • scanner – Administración y uso de digitalizadores (scanners).

Ya creado el usuario, debemos convertirlo en un “sudoer” (un usuario capaz de usar sudo), o sea, otorgarle permisos administrativos de manera temporal para, por ejemplo, instalar aplicaciones y actualizar el sistema.

Primero, instalamos sudo (si es que previamente no lo hicimos durante la instalación de ArchLinux):

pacman -S sudo

Luego, ejecutaremos visudo:

visudo

El comando anterior lo que realmente hace es invocar al editor vi para modificar el archivo /etc/sudoers (¡no debes hacer vi /etc/sudoers manualmente!). Si no quieres usar vi, puedes usar nano:

EDITOR=nano visudo

En dicho archivo, lo único que debemos hacer es descomentar (eliminar el “#” al inicio) la línea:

%wheel  ALL=(ALL)  ALL

Donde wheel es el grupo especial al cual previamente ya asignamos a nuestro usuario.

Para probar que todo funciona correctamente, vamos a salirnos del usuario root y entremos con el comando “su” a nuestro usuario (usaré “gespadas” como nombre de usuario de ejemplo):

su - gespadas

Obviamente, nos pedirá la contraseña correspondiente. Ahora, vamos a ejecutar con sudo el comando de actualización del sistema:

sudo pacman -Syu

Como es la primera vez que usamos sudo, asomará un mensaje que nos invita ser un sudoer responsable (¡recuerden al buen Stan Lee!: “With great power comes great responsibility.”).

¡Paso Extra! Instalación del Entorno Gráfico

Este paso en particular es demasiado extenso, y lo he dividido en varios tutoriales (previamente publicados).

Primero, procede a la Instalación del Entorno Gráfico Básico (X Window System) en ArchLinux (¡indispensable!), y luego elige el entorno de escritorio de tu preferencia:

¡A disfrutar del poderoso ArchLinux!

¡Paso Plus! Migración a Syslinux y Systemd

Migrar al bootloader Syslinux es totalmente opcional, pero lo recomiendo sobre el típico GRUB.

Y por supuesto, la migración a systemd en ArchLinux es casi inminente ya es un hecho en nuevas instalaciones, por lo que les recomiendo lean todos los detalles al respecto.

Share

¿Problemas con glibc al actualizar ArchLinux? Solución Paso a Paso

Acabas de ejecutar sudo pacman -Syu en ArchLinux y obtienes lo siguiente:

error: error al realizar la transacción (archivos en conflicto)
glibc: /lib existe en el sistema de archivos
Ocurrieron errores, no se actualizaron paquetes

De inmediato, tu impulso es volver a ejecutar el comando con --force, pero…. ¡NO LO HAGAS! Dejarás tu sistema más corrupto que la clase política mexicana.

Hace unos días se implementó un cambio importante en nuestra querida distro, y ahora todos los paquetes que tenían sus archivos en el directorio /lib se movieron a /usr/lib, y ahora /lib pasa a ser un symlink a /usr/lib.

¿Qué hacer entonces? Allan McRae nos avisa de este conflicto y pone a nuestra disposición una guía detallada para solucionarlo. Si me lo permiten, aquí les dejo los puntos importantes.

Los comandos a usar son

pacman -Syu --ignore glibc
pacman -Su

Si al final sigues obteniendo el error de conflicto, ejecuta el siguiente comando:

$ sudo find /lib -exec pacman -Qo -- {} +

Debes obtener una extensa lista de archivos y directorios, algunos propiedad de glibc y otros que nadie posee, y estos últimos son los que nos están ocasionando el problema. Lo que debemos hacer es eliminarlos, ya que en realidad son “sobras” de actualizaciones pasadas. En mi caso (tú podrías obtener otro resultado), todas esas sobras se encontraban dentro del directorio /lib/modules/, por lo que el comando apropiado para eliminar dicho directorio y todo su contenido es:

¡Advertencia! Ten mucho cuidado al eliminar archivos y directorios, este blog y su autor no se hacen responsables por sistemas inestables y/o corruptos.

sudo rm -rf /lib/modules/

Entonces, volvemos a ejecutar pacman -Su para actualizar glibc, ¡y eso es todo!

Si siguen obteniendo errores, o si desean leer más a fondo sobre el problema, les recomiendo leer la guía detallada que mencioné previamente.

Share

¿Actualizaste a Xfce 4.10 y ya no puedes Apagar o Reiniciar tu equipo?

Xfce LogoLuego de un par de meses sin hacerlo, actualicé un equipo que tenía ArchLinux con Xfce 4.8, y cual va siendo mi sorpresa de que al actualizarse a Xfce 4.10 ya no tenía disponibles las opciones para apagar o reiniciar el sistema.

¿La solución? La siempre actualizada ArchWiki la tiene :-)

En mi ~/.xinitrc original tenía la siguiente línea:

exec ck-launch-session startxfce4

Si booteas directo al runlevel 3, y usas startx para iniciar las X, cambia dicha línea por:

exec startxfce4 --with-ck-launch

Si usas SLiM u otro Display Manager que soporta ConsoleKit, sólo debes tener:

exec startxfce4

Eso es todo, ¿sencillo no? \nn/

Nota: En ninguno de los casos anteriores, es necesario ejecutar manualmente dbus-launch, ya que startxfce4 lo hace por nosotros.

Share

Linux Kernel 3.4 liberado con muchas mejoras en Btrfs

linux-tuxAyer domingo Linus Torvalds liberó el Linux Kernel 3.4.

Las principales novedades de esta versión son:

  • Muchas novedades para el sistema de archivos Btrfs: Bloques de metadatos más grandes (mayores que 4KB), mejor rendimiento de los metadatos (caché de páginas de memoria mejorado, uso de CPU reducido), mejor gestión de errores (evitando el molesto “kernel panic“) y herramientas de recuperación (nuevo btrfs-restore y fsck mejorado).

  • Nueva ABI X32 que permite compilar y ejecutar programas en modo de 64 bits, con totas sus ventajas, pero con punteros de 32 bits, que ocupan menos espacio en memoria y tienen mejor rendimiento.

  • Actualizaciones de drivers de video, con soporte para Nvidia Geforce 600 ‘Kepler’, AMD RadeonHD 7xxx y APUs Trinity e Intel Medfield.

  • Soporte para la carga automática y autosondeo de drivers de CPU x86

    .

Si están interesados en conocer a fondo el nuevo Kernel, los invito a leer la lista completa de novedades y el excelente análisis de Diego en D’Oh!.

Share

¿Te sientes limitado con Xcompmgr? ¡Usa Compton!, un poderoso y liviano Composite Manager para Linux

Como ustedes saben (o se están esterando si es la primera vez que leen este humilde blog), soy fiel usuario de ArchLinux y Openbox, y aunque a veces me pongo a probar otros entornos de escritorio (como el recién liberado Xfce 4.10), siempre regreso a mi “dúo dinámico” :-)

El minimalismo de la mancuerna mencionada no está peleado con darle un toque agradable a la vista al escritorio, y eso se logra gracias al compositing, por medio de un Composite Manager. Uno de los más conocidos en Compiz, pero por desgracia es a la vez un Window Manager, y por obviedad no puede coexixtir con Openbox. Dos alternativas muy livianas son Xcompmgr o Cairo Compmgr, que funcionan sin problemas con Openbox.

[Compton en Acción]Hoy leyendo DesdeLinux me entero de la nueva versión de Crunchbang, una distro basada en Debian que usa Openbox como Window Manager… y algo me llamó la atención: El uso de Compton en vez de Xcompmgr o Cairo Compmgr como Composite Manager para gestionar los efectos de escritorio.

Investigando un poco más, veo que Compton es un fork de xcompmgr-dana, que a su vez es un fork del propio xcompmgr, cuyo objetivo es la corrección de bugs y nuevas características, entre las que destacan la transparencia para ventanas activas e inactivas, para el marco de las ventanas (incluyendo la barra de título) y para los menús.

Para instalar Compton en ArchLinux, podemos hacerlo desde AUR (¡merece estar en el repositorio [community]!)

yaourt -S compton-git

Su ejecución más básica:

compton

Para aplicar sombras a las ventanas:

compton -c

Para que las sombras no afecten a los paneles y docks:

compton -cC

Para especificar la opacidad (transparencia) de las ventanas inactivas y los marcos:

compton -cC -i 0.6 -e 0.6

Para habilitar efectos suaves de transición en ventanas y menús, incluso cuando cambian su opacidad:

compton -cC -i 0.6 -e 0.6 -fF

Para especificar el cambio y tiempo de opacidad al desvanecerse las ventanas:

compton -cC -i 0.6 -e 0.6 -fF -I 0.065 -O 0.065 -D 6

Para especificar la opacidad de los menús:

compton -cC -i 0.6 -e 0.6 -fF -I 0.065 -O 0.065 -D 6 -m 0.8

Más información en la página oficial de Compton en Github y la ayuda de Compton en la Wiki de ArchLinux.

Share

Combinar varios JPG y convertirlos en un PDF en Linux

[JPG a PDF]Hace unos momentos tuve la necesidad de unir o combinar varios archivos JPG (unos documentos escaneados) y convertirlos en un solo archivo PDF.

Para mi fortuna, ¡estoy usando Linux!, así que para lograrlo sólo necesito tener instalado el poderoso ImageMagick, y ejecutar:

convert *.jpg archivo.pdf

¡Eso es todoooo! ¿Y hay gente que aún me pregunta por qué uso Linux? ;-)

¿No tienes instalado ImageMagick?

  • En ArchLinux:
    sudo pacman -S imagemagick
  • En Ubuntu:
    sudo apt-get install imagemagick

Ah, por cierto, así como funciona con JPG, ¡también para PNG!

Un último detalle: Si tu PDF final es mucho más pesado que la suma de tus imágenes, es muy probable que estés usando una versión no reciente de ImageMagick, pero no importa, sólo tendrías que agregar un modificador al comando mencionado:

convert *.jpg -compress zip archivo.pdf

¡Sumamente sencillo!

Share

Ajustes en los iconos del escritorio de Xfce

Ajustes en los iconos del escritorio de Xfce

Desde que salió Xfce 4.10 lo he estado usando bastante, ¡y me ha gustado mucho!, tanto que a veces siento que no extraño a mi querido Openbox.

Sin embargo, había un detalle que me molestaba: el comportamiento de los iconos del escritorio, en particular el fondo opaco del texto de los iconos, y la rejilla (grid) tan amplia usada para acomodar los iconos.

Como en ningún lugar de las opciones de configuración existe la posibilidad de personalizar lo anterior, investigué en la web cómo hacerlo, y me encontré con las poderosas hidden customisations (les recomiendo ampliamente leer el texto completo).

¿Qué hay que hacer? Es sencillo, sólo debemos editar el archivo ~/.gtkrc-2.0 (aunque se recomienda mejor editar o crear el archivo ~/.gtkrc-2.0.mine, pues el primero es probable que sea sobreescrito por el sistema), y agregar lo siguiente (ajusta los valores según tus necesidades):

style "xfdesktop-icon-view" {
	XfdesktopIconView::label-alpha = 0
	XfdesktopIconView::selected-label-alpha = 100
	XfdesktopIconVIew::ellipsize-icon-labels = 1
 
	XfdesktopIconView::shadow-x-offset = 1
	XfdesktopIconView::shadow-y-offset = 1
	XfdesktopIconView::shadow-color = "#000000"
	XfdesktopIconView::selected-shadow-x-offset = 1
	XfdesktopIconView::selected-shadow-y-offset = 1
	XfdesktopIconView::selected-shadow-color = "#000000"
 
	XfdesktopIconView::cell-spacing = 0
	XfdesktopIconView::cell-padding = 0
	XfdesktopIconView::cell-text-width-proportion = 2
 
	base[NORMAL] = "#3F6BA4"
	base[SELECTED] = "#3F6BA4"
	base[ACTIVE] = "#3F6BA4"
 
	fg[NORMAL] = "#ffffff"
	fg[SELECTED] = "#ffffff"
	fg[ACTIVE] = "#ffffff"
}
widget_class "*XfdesktopIconView*" style "xfdesktop-icon-view"

Las propiedades anteriores son sencillas de entender; de todas formas, aquí les explico las principales:

  • label-alpha es el porcentaje de opacidad del fondo del texto de los iconos. Si su valor es cero el fondo será totalmente transparente, si es 50 tendrá una semi transparencia, etc.

  • shadow-x-offset y shadow-y-offset indican la posición de la sombra del texto, mientras shadow-color indica su color.

  • cell-spacing indica la separación entre cada celda del grid de los iconos del escritorio, mientras cell-padding especifica un espacio adicional que rodea a cada uno de los iconos. Ambas medidas son en pixeles.

  • cell-text-width-proportion indica el ancho máximo proporcional del texto debajo de los iconos. Por ejemplo, si los iconos son de 30px, un valor de ‘2.5’ dejaría un ancho máximo de 75px para los textos.

Cada vez me gusta más Xfce :-)

Share