8.0 KiB
weight | title | date | draft | summary | resources | categories | tags | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
4 | Configurando Qtile | 2023-08-05T18:16:09+0200 | false | Notas sobre configuración de Qtile |
|
|
|
{{< admonition type=warning title="Work in progress" open=true >}}
Estos apuntes de configuración del gestor de ventanas Qtile están INCOMPLETOS
{{< /admonition >}}
{{< admonition type=info title="Referencias" open=true >}}
{{< /admonition >}}
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:
# 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)
#!/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:
[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:
# 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
#!/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:
[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:
sudo apt update
sudo apt install xserver-xephyr
Para lanzar un Xserver usaríamos un comando como:
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:
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
.
import os
import subprocess
from libqtile import hook
Ahora podemos implementar la función startup
@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:
#!/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)
{{< admonition type=danger title="pyenv" open=true >}}
Antes de arrancar Qtile parece que tenemos que asegurarnos de tener pyenv global system
de lo contrario no veremos el entorno virtual de Qtile.
{{< /admonition >}}