Los gestores de ventanas definen la forma en que las ventanas son posicionadas y distribuidas, es decir, controlan la apariencia de las ventanas. Pueden ayudarte a aprovechar al máximo tu escritorio y mejorar tu productividad en entornos multitarea. Algunos ejemplos son: FancyZones (Windows), Amethyst (macOS), i3, Awesome WM y XMonad.
i3 es un administrador de ventanas minimalista que está dirigido principalmente a desarrolladores y usuarios avanzados.
En primer lugar, instala algunos paquetes: sudo apt install xorg i3 i3blocks fonts-font-awesome suckless-tools picom nitrogen
Cierra sesión y selecciona i3 como administrador de ventanas.
Cuando inicies sesión por primera vez, se te preguntará: Do you want me to generate an i3 configuration file (~/.config/i3/config) or use the default configuration file? (¿Quieres que genere un archivo de configuración i3 o utilizar el archivo de configuración por defecto?) Presiona Enter/INTRO para generar un archivo de configuración para i3. A continuación, debes definir la tecla principal o modificadora ($mod). Puedes elegir entre la tecla de Windows (Super) o la tecla Alt. Pulsa Enter/INTRO para usar la tecla de Windows.
Finalmente, puedes ver y usar tu escritorio. A continuación, abre un terminal: $mod + ENTER. Abre varios terminales y notarás que i3 los coloca automáticamente para ocupar todo el espacio disponible. Es posible que desees utilizar Mod + v para distribuirlas verticalmente o Mod + h para posicionar las ventanas horizontalmente. Para lanzar aplicaciones con dmenu, utiliza la combinación de teclas: Mod + d. Para alternar de modo de pantalla completa a normal, pulsa Mod + f. Otras combinaciones: Cerrar la ventana de una aplicación: Mod + Shift + q. Reiniciar i3: Mod + Shift + r. Salir de i3: Mod + Shift + e. Cambiar al espacio de trabajo n: Mod + n. Mover la ventana activa al espacio de trabajo n: Mod + Shift + n.
Instala los temas Pop GTK y Material, los temas de iconos Pop y Papirus, y lxappearance (un programa para cambiar temas GTK+, temas de iconos y fuentes): sudo apt install pop-gtk-theme materia-gtk-theme pop -icon-theme papirus-icon-theme lxappearance. Lanza lxappearance y selecciona Control y Temas de icono (Pop) y Tipo de letra predeterminada (Ubuntu, 12).
Editemos el archivo de configuración de i3: gedit ~/.config/i3/config (siempre puedes encontrar problemas con tu configuración y depurar errores con i3 -C -c ~/.config/i3/config)
# Tecla principal (modificadora) para trabajar con i3 sea Windows o Super
set $mod Mod4
# Fuente del sistema, por ejemplo, para los títulos de las ventanas
font pango:Ubuntu Regular 14
set $myTerm kitty
# Utilizaremos kitty como terminal predeterminado
bindsym $mod+Return exec $myTerm # Lanza el terminal
bindsym $mod+Shift+x exec i3lock -c 000000 # Bloquea el sistema
bindsym $mod+b exec pavucontrol # Inicia el control de volumen de PulseAudio
playerctl es un programa que permite controlar reproductores multimedia desde la línea de comandos: reproducir, pausar, anterior, etc.
bindsym $mod+Shift+F1 exec playerctl play-pause # Controles del reproductor multimedia.
bindsym $mod+Shift+F5 exec playerctl pause
bindsym $mod+Shift+F6 exec playerctl previous
bindsym $mod+Shift+F7 exec playerctl next
# Usamos pactl para ajustar el volumen en PulseAudio. Controla el volumen del sink predeterminado -flujo de audio activo-: aumentar el volumen, disminuir el volumen y silenciar.
bindsym $mod+Shift+F3 exec pactl set-sink-volume @DEFAULT_SINK@ +6%
bindsym $mod+Shift+F2 exec pactl set-sink-volume @DEFAULT_SINK@ -5%
bindsym $mod+Shift+F4 exec pactl set-sink-mute @DEFAULT_SINK@ toggle
pactl es una utilidad de línea de comandos para ejecutar comandos de control al servidor de sonido PulseAudio.
Es posible que desees cambiar el sink predeterminado: (cambiar entre altavoces y auriculares):
pacmd list-sinks | grep -e 'name:' -e 'index:'
En mi caso, devuelve:
index: 1
name: <alsa_output.pci-0000_00_1f.3.iec958-stereo> # Headphones
* index: 5
name: <alsa_output.pci-0000_01_00.1.hdmi-stereo> # Speakers are the default sink
Edita sudo vim /etc/pulse/default.pa: y añade la siguiente línea:
set-defaults-sink alsa_output.pci-0000_01_00.1.hdmi-stereo
Finalmente, reinicia PulseAudio: systemctl –user restart pulseaudio.socket
Seleccionamos Rofi, un lanzador de aplicaciones, como alternativa a dmenu.
bindsym $mod+d exec rofi -show run
bindsym $mod+Shift+d exec rofi -show p -modi p:$HOME/.local/bin/rofi-power-menu -theme Paper -font "JetBrains Mono NF 16" -width 20 -lines 6
# Toma capturas de pantalla y las guarda en Dropbox. Utiliza scrot, una aplicación de captura de pantalla de línea de comandos minimalista.
bindsym --release $mod+z exec scrot -s ~/Dropbox/%b%d::%H%M%S.png
# Una alternativa es flameshot, un software de captura de pantalla potente pero sencillo de utilizar
bindsym --release Print exec flameshot full # Tomas capturas de pantalla completa. Puede añadir la opción -p rutaADirectory.
bindsym --release Shift+Print exec flameshot gui # Tomas capturas de pantallas de una región.
Conky es un monitor de sistema gratuito para el sistema X Window. Queremos activar/desactivar Conky con un atajo de teclado (Win+Shift+t) por lo que usamos el siguiente script conkytoggle.sh: if pgrep conky; then pkill conky; else conky; fi (pgrep busca procesos utilizando como criterio el nombre que se le pasa como parámetro).
# Activa y desactiva Conky con un atajo de teclado.
bindsym $mod+Shift+t exec /home/nmaximo7/.local/bin/conkytoggle.sh
# Definimos nombres para los espacios de trabajo predeterminados para los que configuraremos atajos de teclas más adelante.
set $ws1 "1: Terminal"
set $ws2 "2: Chrome"
set $ws3 "3: Gedit"
set $ws4 "4: Station"
set $ws5 "5: Nautilus"
# Forzamos a que determinadas aplicaciones se lancen en espacios de trabajo predefinidos. xprop es una utilidad para visualizar las propiedades de las ventanas y fuentes para X. Lanza xprop, haz clic sobre la ventana de la que deseas obtener información (en mi caso, el navegador de Google) y obtendrás bastante información, entre la cual destaca: WM_CLASS(STRING) = "google-chrome", "Google-chrome"
for_window [class="Google-chrome"] move to workspace $ws2
# Aplicaciones para programación
for_window [class="Code"] move to workspace $ws3
for_window [class="Gedit"] move to workspace $ws3
# Station
for_window [class="Station"] move to workspace $ws4
# Administradores de archivos
for_window [class="Nautilus"] move to workspace $ws5
# Configuración del color
set $bgcolor #3F8AC2
set $ibgcolor #424242
set $textcolor #ffffff
set $ubgcolor #ff0000
# Colores de las ventanas
client.focused $bgcolor $bgcolor $textcolor $bgcolor
client.unfocused $ibgcolor $ibgcolor $textcolor $ibgcolor
client.focused_inactive $ibgcolor $ibgcolor $textcolor $ibgcolor
client.urgent $ubgcolor $ubgcolor $textcolor $ubgcolor
# Configuración de la barra i3wm
bar {
status_command i3status -c ~/.config/i3status/i3status.conf
colors {
background $bgcolor
separator #292929
focused_workspace $bgcolor $bgcolor $textcolor
inactive_workspace $ibgcolor $ibgcolor $textcolor
urgent_workspace $bgcolor $bgcolor $textcolor
}
}
# Aplicaciones que se ejecutan al inicio automáticamente
exec --no-startup-id nm-applet # Network Manager proporciona una interfaz de alto nivel para la configuración de las interfaces de red y nm-applet es un simple applet de NetworkManager que proporciona una bandeja del sistema.
exec --no-startup-id start-pulseaudio-x11 # Inicia el servidor PulseAudio, un servidor de sonido de propósito general destinado a ejecutarse como un software intermedio entre tus aplicaciones y los dispositivos de hardware.
exec /usr/bin/barrierc -f --no-tray --debug INFO --name myarch [192.168.1.40]:24800 &
exec_always Dropbox start -i
Picom es el compositor o gestor de composición de ventanas más popular y utilizado para GNU/Linux.
exec_always picom --config ~/.config/picom/picom.conf
Nitrogen es un selector y gestor de fondos de escritorios ligero. Clona los fondos de pantallas de Derek Taylor: git clone https://gitlab.com/dwt1/wallpapers.git ~/Pictures/wallpapers. El argumento ‐‐random selecciona un archivo de la carpeta especificada y lo aplica como fondo de escritorio utilizando la opción de relleno/zoom (‐‐set‐zoom-fill). En definitiva, Nitrogen seleccionará fondos arbitrarios de la carpeta ~/Pictures/wallpapers.
exec_always nitrogen --set-zoom-fill --random ~/wallpapers
exec_always --no-startup-id copyq # CopyQ es un administrador de portapapeles
exec --no-startup-id i3-msg 'workspace 1:Terminal; exec /usr/bin/kitty'
exec --no-startup-id i3-msg 'workspace 3:Code; exec /usr/bin/code ~/justtothepoint/'
exec --no-startup-id i3-msg 'workspace 5:Nautilus; exec /usr/bin/nautilus'
exec --no-startup-id i3-msg 'workspace 2:Brave; exec /usr/bin/brave'
exec --no-startup-id greenclip daemon>/dev/null # Greenclip es un gestor de portapapeles sencillo diseñado para integrarse con Rofi.
exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
polkit es un agente de autenticación (sudo pacman -Syu polkit, sudo pacman -Syu polkit-gnome). Se utiliza para que el usuario de una sesión demuestre que realmente es el usuario (autenticándose como usuario) o un usuario con privilegios administrativos (autenticándose como administrador).
Barra de estado: mkdir .config/i3status && sudo cp /etc/i3status.conf ~/.config/i3status/i3status.conf && sudo chown myUser:myUser i3status.conf
i3-autolayout es un servicio ligero que ayuda a mantener un diseño de ventanas razonable para tu gestor de ventanas i3.
Primero, debes instalar Cargo: curl https://sh.rustup.rs -sSf | sh. Para configurar tu shell actual, ejecuta: source “$HOME/.cargo/env”. Para instalar i3-autolayout: cargo install i3-autolayout (no se necesita clonar el repositorio).
exec_always --no-startup-id i3-autolayout autolayout
gaps inner 5 # Márgenes entre ventanas
gaps outer 5
Xmonad es un administrador de ventanas de mosaico dinámico que está escrito y configurado en Haskell.
-- Necesitamos esta biblioteca para lanzar programas en el inicio.
import XMonad.Util.SpawnOnce
-- Necesitamos estas bibliotecas para ejecutar xmobar
import XMonad.Util.Run
import XMonad.Hooks.ManageDocks
-- Definimos nuestro terminal por defecto
myTerminal = "kitty"
-- Ancho del borde de la ventana en píxeles
myBorderWidth = 2
-- modMask te permite especificar qué tecla de mod quieres usar: mod4Mask es la "tecla de Windows"
myModMask = mod4Mask
-- Atajos de teclado
myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
-- Lanzar un terminal: Super + Shift + Enter
[ ((modm .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf)
-- Lanzar dmenu: Super + p
, ((modm, xK_p ), spawn "dmenu_run")
-- Reiniciar xmonad: Super + q.
, ((modm , xK_q ), spawn "xmonad --recompile; xmonad --restart")
-- Puedes alternar los modos de mosaico o de distribución de ventanas con mod-Espacio, que recorrerá los modos disponibles y cambiar al espacio de trabajo N con mod-N (N = 1, 2, etc.) El algoritmo de distribución/organización de ventanas en mosaico predeterminado divide la pantalla en dos paneles: a la izquierda, una sola ventana (maestra), a la derecha, las demás ventanas apiladas horizontalmente ocupando todo el panel izquierdo.
-- Añadimos el modificador avoidStruts para evitar que las ventanas se superpongan a xmobar.
myLayout = avoidStruts (tiled ||| Mirror tiled ||| Full)
-- Aplicaciones que arrancamos automáticamente al inicio
myStartupHook = do
spawnOnce "nitrogen --set-zoom-fill --random ~/wallpapers"
spawnOnce "picom -b"
spawnOnce "barrier"
spawnOnce "dropbox"
-- Lanzar xmonad con xmobar
main = do
xmproc <- spawnPipe "xmobar -x 0 /home/myUser/.config/xmobar/xmobar.config"
-- Cambiamos "xmonad defaults" con este código para que XMonad.Hooks.ManageDocks pueda automáticamente administrar xmobar.
xmonad $ docks defaults
Awesome Window Manager es un administrador de ventanas altamente configurable. Es gratis, rápido y extensible.
-- Variables personales
terminal = "kitty"
editor = os.getenv("EDITOR") or "nvim"
-- Modkey predeterminado. Mod4 es la tecla "especial" (la tecla de Windows)
modkey = "Mod4"
-- Las ventanas se organizan siguiendo un diseño predeterminado. El diseño en mosaico consta de dos columnas: una para la ventana principal y la otra para las ventanas "no principales". Solo hay una ventana maestra que ocupa la mitad de la pantalla, mientras que todas las demás ventanas, no maestras, se apilan verticalmente.
awful.layout.layouts = {
awful.layout.suit.tile,
}
[...]-- Eliminar barras de título.
{ rule_any = {type = { "normal", "dialog" }
}, properties = { titlebars_enabled = false }
},[...]
-- Combinaciones de teclas personales.
-- Dmenu
awful.key({ modkey }, "r", function () awful.util.spawn("dmenu_run") end,
{description = "Dmenu", group = "launcher"}),
-- Google Chrome
awful.key({ modkey }, "c", function () awful.util.spawn("google-chrome") end,
{description = "Open Google Chrome", group = "launcher"}),
-- Station
awful.key({ modkey }, "b", function () awful.util.spawn( terminal.." -e /home/myUser/Applications/Station.AppImage") end,
{description = "Open Station", group = "launcher"}),
beautiful.useless_gap = 5 -- Espacio entre ventanas clientes
-- Aplicaciones que se inician automáticamente al iniciar la sesión
awful.spawn.with_shell("barrier")
awful.spawn.with_shell("dropbox")
-- Nitrogen es un navegador y configurador de fondos de escritorio rápido y ligero. Descarga la galería de fondos de pantalla de Derek Taylor: git clone https://gitlab.com/dwt1/wallpapers.git. Con la opción --random, Nitrogen elige fondos aleatorios del directorio ~/wallpapers
awful.spawn.with_shell("nitrogen --set-zoom-fill --random ~/wallpapers")
-- Usamos picom como compositor de ventanas. Asegúrate de editar ~/.config/kitty/kitty.conf e incluir la línea: _background_opacity 0.9_ para habilitar las transparencias en el terminal.
awful.spawn.with_shell("picom -b")
Utilizaremos Rofi (sudo apt install rofi) como una alternativa a dmenu. Rofi es un commutador de ventanas, un lanzador de aplicaciones y una excelente alternativa a dmenu. Es liviano, de código abierto, gratuito y muy configurable. Ctrl + tab te permite cambiar entre los diferentes modos: run (lanzador de aplicaciones), window (commutador de ventes), y ssh.
-- Rofi. Teclas rápidas: Modkey + r
awful.key({ modkey }, "r", function () awful.util.spawn("rofi -show run") end,
{description = "Dmenu", group = "launcher"}),