Configurando Qtile

Work in progress
Estos apuntes de configuración del gestor de ventanas Qtile están INCOMPLETOS

ACTUALIZACIÓN: La instalación de Qtile falla por las versiones de las dependencias

No funciona la instalación descrita más abajo en un entorno virtual y no funciona la instalación por paquetes del sistema (al menos en Linux Mint Vanessa). Las versiones de las dependencias son demasiado modernas.

Sólo he conseguido compilar una versión funcional de Qtile usando las fuentes de desarrollo, con la siguiente receta:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# Creamos el directorio de trabajo
mkdir <workPath>/qtile
cd <workPath>/qtile

# Creamos el entorno virtual, si usas pyenv esto te vale:
pyenv virtualenv system ve_qtile
pyenv local ve_qtile

# SI NO USAS pyenv haz esto, crearas el entorno virtual en el
# directorio <workPath>/qtile/venv
python -m venv venv
. ./venv/bin/activate

# Asegurate de estar en el entorno virtual que hayas creado y que lo tengas activo y haz:
pip install git+https://github.com/qtile/qtile@master

Con los pasos descritos tendrás un Qtile en el directorio <workPath>/qtile/venv/bin, pero evidentemente sólo funciona con el virtualenv activado.

Tenenemos que crear un script para tu gestor de login gráfico favorito (yo uso Lightdm)

Como root nos creamos un script launch_qtile en /usr/local/bin, con el siguiente contenido (estoy suponiendo que no usas pyenv)

1
2
3
4
#!/bin/bash
source '/home/<user>/<workPath>/qtile/venv/bin/activate'

/home/<user>/<workPath>/qtile/bin/qtile start

Le damos permisos de ejecución con chmod 755 launch_qtile (ojo a los permisos para all que si no son estos no le gusta a Lightdm)

También como root creamos el fichero /usr/share/xsessions/qtile.desktop con el contenido:

1
2
3
4
5
6
[Desktop Entry]
Name=Qtile
Comment=Qtile Session
Exec=launch_qtile
Type=Application
Keywords=wm;tiling

Y con esto tendremos Qtile disponible en Lightdm.

Instalando Qtile en un virtualenv

Vamos a describir la instalación del Qtile en un virtualenv dedicado. Si te bajas la versión estable de Qtile desde su página web en el paquete vienen un montón de script auxiliares que te permiten hacer la instalación aislada en un virtualenv pero lo voy a hacer a mano para tenerlo controlado con pyenv.

  • Creamos el virtualenv qtile basado en la versión 3.10.0 que teniamos instalada previamente:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Creamos el directorio de trabajo
mkdir <workPath>/qtile
cd <workPath>/qtile

# OPCIONAL: Descargamos el qtile estable de la página web
# sólo es necesario si quieres curiosear los scripts auxiliares
wget https://github.com/qtile/qtile/archive/v0.18.1.tar.gz
tar xvzf v0.18.1.tar.gz
rm v0.18.1.tar.gz

# Creamos el entorno virtual
pyenv virtualenv 3.10.0 qtile
pyenv local qtile
# Instalamos los paquetes iniciales (comunes a mis entornos)
pip install --upgrade pip setuptools wheel

# instalamos los requisitos
pip install --no-cache-dir xcffib
pip install --no-cache-dir cairocffi

# Instalamos la versión estable de qtile
pip install --no-cache-dir qtile

Con esto ya estamos listos, podríamos arrancar Qtile con qtile start, pero no puede funcionar claro. Para que arranque correctamente, tenemos que lanzarlo en un servidor X. (ver el punto “[Lanzar Window Managers con Xephyr]”)

Configurar Qtile en virtualenv para arrancer desde el Lightdm

Como root nos creamos un script launch_qtile en /usr/local/bin, con el siguiente contenido

1
2
3
#!/bin/bash
source '/home/user/.pyenv/versions/3.10.0/envs/qtile/bin/activate'
qtile start

Le damos permisos de ejecución con chmod 755 launch_qtile (ojo a los permisos para all que si no son estos no le gusta a Lightdm)

También como root creamos el fichero /usr/share/xsessions/qtile.desktop con el contenido:

1
2
3
4
5
6
[Desktop Entry]
Name=Qtile
Comment=Qtile Session
Exec=launch_qtile
Type=Application
Keywords=wm;tiling

Y con esto tendremos Qtile disponible en Lightdm.

Lanzar Window Managers con Xephyr

Para probar (o configurar) los Window Managers sin salir de nuestra sesión de Mate podemos usar Xephyr, si no lo tienes instalado ejecuta:

1
2
sudo apt update
sudo apt install xserver-xephyr

Para lanzar un Xserver usaríamos un comando como:

1
Xephyr -ac -screen 800x600 -br -reset -terminate 2> /dev/null :1 &
-ac

Autorizar conexiones de clientes indiscriminadamente (disable access restrictions)

-screen

Especificar la geometría de la pantalla.

-br

La ventana raiz tendrá fondo negro

-reset

Reset al terminar el último cliente

-terminate

Finalizar cuando se resetee el servidor

2> /dev/null

Mandar los mensajes de error al limbo (alias NE en nuestro pc)

:1

Arrancar el server en el DISPLAY=1

Asi que si queremos arrancar por ejemplo el i3wm podríamos hacer un script con las siguientes lineas:

1
2
3
Xephyr -ac -screen 800x600 -br -reset -terminate 2> /dev/null :1 &
export DISPLAY=:1
qtile start

Configuración de Qtile

La configuración de Qtile reside en ~/.config/qtile/config.py

Configuración de programas en el arranque

Vamos a implementar la ejecución de programas en el arranque de nuestro Qtile.

Por un lado es necesario que importemos los módulos os y subprocess y desde el módulo libqtile necesitamos importar hook.

1
2
3
4
import os
import subprocess

from libqtile import hook

Ahora podemos implementar la función startup

1
2
3
4
@hook.subscribe.startup_once
def start_once():
    home = os.path.expanduser('~')
    subprocess.call([home + '/.local/bin/autostart'])

Con el decorador @hook.subscribe hemos hecho que la función start_once() quede suscrita al evento startup_once que Qtile genera, una sola vez, en el arranque (ver documentación).

El script ~/.local/bin/autostart tiene el siguiente contenido:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env bash
# ---
# Use "run program" to run it only if it is not already running
# Use "program &" to run it regardless
# ---

function run {
    if ! pgrep $1 > /dev/null ;
    then
        $@&
    fi
}

# run picom -CGb &
run nitrogen --restore &
# run megasync
# run xfce4-clipman
# run gammy

Programas que queremos lanzar en el arranque

picom

picom es un window composer

Nitrogen

Nitrogen nos valdrá para gestionar los fondos de pantalla. Tenemos la última versión 1.6.1 disponible en los repos. Podemos instalar con sudo apt install nitrogen

Rofi

rofi ya lo teníamos instalado. Es un sustito para Dmenu que ya usamos en Mate

gammy

gammy nos sirve para gestionar el brillo de la pantalla

urxvt

Un terminal con soporte UTF

feh

Un visor de imágenes para los fondos de pantalla (no está claro que sea necesario)

Cambios variados

  • Cambiamos el tamaño de letra para widgets a 16 puntos (lo vemos en la barra de estado)
pyenv
Antes de arrancar Qtile parece que tenemos que asegurarnos de tener pyenv global system de lo contrario no veremos el entorno virtual de Qtile.
0%