Hola a todos En este artículo, describiré mi experiencia en la configuración y el uso de sway, un administrador de ventanas de mosaico para Linux.
¿Qué es y por qué se necesita?
Oficialmente, sway es un administrador de ventanas de mosaico, un reemplazo transparente de i3wm que se ejecuta sobre Wayland.
Weiland, también conocido como Wölund, etc. - Un personaje de la antigua mitología alemana y nórdica antigua, un libro sobre el que fue escrito en un tiempo por el folklorista inglés Jessie Weston. Ahora ya lo sabes.
Sin embargo, en mi opinión, la característica principal de sway es que es un constructor, con todas las ventajas y desventajas de este enfoque. Si te gusta Vim (la similitud se ve agravada por la orientación sobre el uso del teclado), Archlinux y proyectos similares, entonces te aconsejo que eches un vistazo más de cerca a la influencia. Mi opinión personal es que una vez que pase un poco más de tiempo configurándolo, obtendrá un entorno muy estable y conveniente para usted personalmente, en el que no sucederá nada inesperado.
Si las desventajas de sway y Wayland (como la falta de soporte para los controladores privados de NVidia y la necesidad de buscar análogos para muchos programas familiares) le parecen fatales, le aconsejo que preste atención al x3 i3wm. Las partes del constructor allí serán completamente diferentes, tendrá que instalar xinit, configurar varios .Xauthority, es posible lidiar con el desgarro, pero la lógica general del sistema es exactamente la misma.
Instalación
Sway está probablemente en los repositorios de su distribución. Sin embargo, si desea instalar una versión más nueva, entonces es muy simple. La página del proyecto github tiene una lista escasa de sus dependencias. Instálelos, clone el repositorio, clone wlroots
en la carpeta de subprojects
:
hub clone swaywm/sway hub clone swaywm/wlroots sway/subprojects/wlroots
(Aquí uso un hub . Una herramienta no estándar, pero muy conveniente). Después de eso, puede configurar y construir:
meson setup ./sway-build ./sway --buildtype=minsize ninja -C ./sway-build doas ninja -C ./sway-build install
doas es un reemplazo ligero de sudo de los desarrolladores de OpenBSD. Linux usualmente usa su bifurcación de OpenDoas.
Lanzamiento
Si desea correr desde la línea de comando sin usar administradores como SDDM, entonces la única forma correcta de hacerlo es
$ exec sway
Si ejecuta sway sin exec
, bloquea la pantalla con swaylock y sway se bloquea, volverá a la línea de comando. La cerradura será inútil.
Nota para los fanáticos de systemd: sway no requiere systemd-logind ni elogind. Es cierto que en este caso tendrá que establecer el bit suid o configurar las capacidades. Ver la wiki .
Variables de entorno
Hay varios lugares donde los prescribo.
Script de shell en ~/.local/bin/sway
: para variables específicas de sway. Por ejemplo, quiero que las aplicaciones Qt no muestren el escenario y utilicen el tema de qt5ct
:
#!/bin/bash QT_QPA_PLATFORMTHEME=qt5ct \ QT_WAYLAND_DISABLE_WINDOWDECORATION=1 \ /usr/bin/sway
~/.pam_environment
: para las variables que deseo que estén disponibles de inmediato en la sesión del usuario systemd. Un ejemplo:
SSH_AUTH_SOCK DEFAULT="${XDG_RUNTIME_DIR}/gnupg/S.gpg-agent.ssh"
Sin embargo, cambie este archivo con precaución, especialmente si utiliza otros entornos. Por ejemplo, a KDE Plasma no le gustará mucho si detecta $WAYLAND_DISPLAY
(irónicamente, el módulo pam_env
que pam_env
este archivo fue creado hace N años principalmente para establecer la variable $DISPLAY
).
~/.bashrc
: para todos los demás casos.
Configuración de balanceo
Entrar
Todo es bastante simple en mi sistema: instalamos diseños en ruso e inglés y cambiamos entre ellos mediante Alt+Shift
. En la configuración de balanceo, se ve así:
input * { xkb_layout us,ru xkb_options grp:alt_shift_toggle }
Sway usa la biblioteca libinput
para entrada, igual que KDE y Gnome. Entonces, tenemos muchas de sus opciones disponibles. Configuración del panel táctil, desplazamiento natural, aceleración del puntero del mouse, etc. etc. La lista de opciones se puede examinar en man sway-input
y la lista de dispositivos de entrada en la salida del comando
swaymsg -t get_inputs
Sin embargo, me gustaría llamar la atención sobre una oportunidad interesante. Si se está mudando de un entorno X, simplemente puede transferir la configuración del teclado desde allí. Ejecute el comando en este entorno
$ xkbcomp $DISPLAY /path/to/keymap.xkb
y en el registro de configuración sway
input * { xkb_file /path/to/keymap.xkb }
Teclas de acceso rápido
Las teclas de acceso rápido, como todo lo demás en Sway, se configuran en la configuración. Hay 3 comandos para definirlos:
bindswitch
. Se realiza al abrir / cerrar la tapa de la computadora portátil, cambiar al modo tableta, etc.bindcode
Se ejecuta cuando se presiona una tecla con el código especificado. No depende del diseño actual, especialmente útil para teclas multimedia.bindsym
El carácter actual introducido depende del diseño. Sin embargo, si agrega el parámetro --to-code
, este carácter se convertirá implícitamente al código correspondiente para el primer diseño desde xkb_layout
(consulte la configuración de entrada).
Por ejemplo, dicha tecla de acceso directo superará la ventana actual independientemente del diseño:
bindsym --to-code $mod+Shift+q kill
Puedes leer más sobre estos parámetros en mana: man 5 sway
.
Para determinar fácilmente qué se presionó, el autor de sway escribió un keylogger especial (necesita derechos de root para trabajar, por lo que no hay que preocuparse por la seguridad).
Conclusión
Se puede obtener una lista de dispositivos de salida disponibles con el comando
swaymsg -t get_outputs
En la configuración de cada uno de ellos, puede configurar el modo de video, la escala (incluida la fracción), la imagen, la rotación, etc. La configuración más simple se ve así:
output HDMI-A-1 mode 1920x1080@60Hz output * bg /path/to/wallpaper.jpg fill
Se puede encontrar una lista completa de opciones en el man sway-output
mana.
También hay un programa wlr-randr en el que todo esto se puede configurar desde la línea de comandos (es decir, es un análogo de XRandr para Wayland).
Barra estabilizadora
Barra estabilizadora: un panel en el que se muestra la información de estado. Fecha, hora, bandeja del sistema, etc. etc. Por lo general, los fanáticos de i3 y sway pasan la mayor parte del tiempo configurando este panel en particular (o paneles, puede haber varios). Personalmente, tengo suficiente de esto, cerca de la configuración mínima:
bar { position top colors { statusline #ffffff background #282828E6 inactive_workspace #282936BF #282936BF #5c5c5c } font Hack 11 status_command i3blocks }
Hay muchas opciones para ajustar la posición, los colores, las fuentes, la bandeja, etc. Puedes man 5 sway-bar
sobre ellos en mana - man 5 sway-bar
.
Swaybar se compromete a leer y analizar json en formato i3bar, generado por status_command
. Hay muchos programas que pueden usarse aquí. i3status , waybar , i3status-rs y muchos otros proyectos. Personalmente, prefiero i3blocks debido a la simplicidad de la configuración y la facilidad de agregar bloques personalizados.
Configuración de la aplicación
Notificaciones
Esto lo puede hacer el demonio mako (lo más probable es que haya en su distribución). Allí también puede ajustar los colores, etc., pero todo esto es opcional. Solo ejecútalo y funcionará.
Mako implementa la especificación de notificaciones de escritorio XDG basada en dbus. Es compatible con muchos programas, incluidos Chromium, Firefox y Telegram.
Emulador de terminal
En entornos como KDE, Plasma generalmente usa emuladores integrados que muestran menús, pestañas y muchos otros elementos de diseño. Pero, ¿por qué todo esto se balancea? Prefiero Alacritty , muy rápido gracias al uso del emulador de GPU, por cierto escrito en Rust. Agregué tales teclas de acceso rápido a la sección key_bindings en su configuración ( ~/.config/alacritty/alacritty.yml
):
- { key: T, mods: Control|Shift, action: SpawnNewInstance }
abre una nueva ventana con el directorio actual. Un excelente reemplazo para las pestañas, y el balanceo se encargará del diseño.
- { key: Up, mods: Control|Shift, action: ScrollLineUp, mode: ~Alt } - { key: Down, mods: Control|Shift, action: ScrollLineDown, mode: ~Alt }
desplazarse hacia arriba / abajo de una línea.
Escribimos en la configuración de balanceo
set $term alacritty bindsym $mod+Return exec $term
Alacritty no admite ligaduras, ya que afectan la velocidad de renderizado. Si aún los necesita, preste atención a kitty : este emulador también es muy rápido y solo hay una cantidad aterradora de características y configuraciones debajo del capó.
Lanzar aplicaciones
Las aplicaciones en Sway generalmente se inician utilizando el menú de teclas de acceso rápido. En la configuración escriben algo como
set $menu ... bindsym --to-code $mod+d exec $menu
Hay muchos programas para mostrar el menú. Algunos, como dmenu o rofi , necesitan XWayland. Entre los que trabajan en Wayland podemos distinguir bemenu e incluso krunner (lo que aparece en KDE por Alt+F2
. Sí, este es un programa independiente).
Sin embargo, prefiero una solución más universal, a saber, sway-launcher-desktop . A pesar del nombre, no depende de la influencia y, en general, no es un programa GUI, sino un pequeño script de shell que funciona en la consola. Este script forma un menú a partir de programas en $PATH
, archivos de escritorio instalados (de acuerdo con la especificación XDG Desktop Entry) y posiblemente fuentes adicionales (configuradas en la configuración). La maravillosa utilidad fzf
se usa para mostrar y buscar en el menú; preste atención.
Por lo tanto, para mostrar el menú, necesitamos abrir una ventana de terminal con este programa. Con alacritty, esto se hace así:
set $menu exec alacritty -e sway-launcher-desktop bindsym --to-code $mod+d exec $menu
Es posible que desee hacer que esta ventana flote de forma predeterminada. En i3 y sway, tales reglas se configuran en la configuración utilizando la directiva for_window
. Para asignar la regla a la ventana sway-launcher-desktop
, se le debe asignar una clase única, para mí es solo Launcher
. Tenga en cuenta que debido al uso de Wayland, los criterios enumerados en el manual de i3 no son adecuados para el balanceo. Los correctos se pueden encontrar en man 5 sway
, sección CRITERIA
. En este caso, app_id
es bastante adecuado, y la configuración final se ve así:
set $menu exec alacritty --class Launcher -e sway-launcher-desktop for_window [app_id="Launcher"] floating enable, border pixel 10, sticky enable bindsym --to-code $mod+d exec $menu
Aplicaciones de inicio automático
En principio, para iniciar automáticamente un programa, simplemente puede escribir
exec /path/to/program
en la configuración de balanceo, o incluso crear una unidad systemd personalizada. Sin embargo, en este artículo utilizaré la especificación XDG Autostart adoptada por KDE y Gnome.
La especificación es ejecutar archivos de escritorio ubicados en los ~/.config/autostart
/etc/xdg/autostart
y ~/.config/autostart
. Como regla general, estos archivos vienen en paquetes con programas, pero son fáciles de crear usted mismo.
Aquí es donde se manifiesta la esencia modular de la influencia. Sway en sí mismo no sabe nada sobre el inicio automático XDG, ni la entrada de escritorio XDG. Además, a sus desarrolladores les disgustan activamente estas y todas las especificaciones similares. Sin embargo, la utilidad de consola dex puede administrarlos (lo más probable es que esté en el repositorio de su distribución).
Para verificar qué estará en ejecución automática, escriba el comando
$ dex -ade Sway
a
significa inicio automático, d
- "ejecución en seco", -e Sway
establece el nombre del entorno (puede ser cualquiera) y se utiliza para el filtrado.
Lo más probable es que la lista resultante no le convenga. Por ejemplo, obtuve kgpg
. Procedemos de la siguiente manera: copie el archivo de escritorio correspondiente desde /etc/xdg/autostart
a ~/.config/autostart
, agregue la línea allí
NotShowIn=Sway
y verifique la ejecución automática nuevamente. Es posible que a muchos programas (especialmente aquellos escritos en Electron) no les guste ejecutar bajo Wayland. Hacemos lo mismo con ellos. Copiamos el archivo de escritorio y cambiamos la línea de lanzamiento allí. Fue:
Exec=/usr/bin/skypeforlinux
se convirtió en:
Exec=env GDK_BACKEND=x11 /usr/bin/skypeforlinux
la misma técnica se puede aplicar a sway-launcher-desktop del párrafo anterior. Cuando se resuelvan todos los problemas, agregue la línea a la configuración de balanceo
exec dex -ae Sway
O puede hacer lo contrario: copie los archivos de escritorio deseados en algún directorio no estándar y configure el dex con el comando
exec dex -as /path/to/your/dir
Capturas de pantalla
Dos de los ataúdes nos ayudarán con esto. slurp le permite seleccionar un área rectangular arbitraria en la pantalla, y Grim hace una captura de pantalla. En mi configuración se ve así:
bindsym Print exec grim ~/Pictures/screen-"$(date +%s)".png bindsym $mod+Print exec grim -g "$(slurp)" ~/Pictures/screen-"$(date +%s)".png
$mod+PrintScreen
: captura de pantalla de un área arbitraria, PrintScreen
: captura de pantalla de toda la pantalla.
Screencasts
Si necesita escribir un screencast en un archivo o transmitirlo a un flujo RTMP (por ejemplo, en Twitch), wf-recorder lo ayudará (también es compatible con slurp).
Si desea utilizar OBS Studio, existe el complemento wlrobs para esto.
Sin embargo, la solución más universal admitida por un lado en KDE y Gnome, y por otro, en particular en los navegadores Chrome y Firefox, es usar Pipewire y la especificación XDG Desktop Portal. Para influir, existe la capa necesaria xdg-desktop-portal-wlr , aunque no verifiqué su rendimiento.
Modo nocturno
El modo nocturno consiste en reemplazar los colores del monitor con colores más cálidos en la oscuridad. Los científicos dudan de cuán útil sea realmente esto, y los desarrolladores de Wayland decidieron que estandarizar el protocolo de corrección gamma era inútil por razones técnicas.
Sin embargo, me gusta esta característica, y en realidad también está ahí. Para el modo nocturno, necesitamos esta bifurcación de desplazamiento al rojo con soporte para el protocolo específico de balanceo.
Lo instalamos de cualquier manera, en la ~/.config/redshift/redshift.conf
, seleccionamos el protocolo deseado y especificamos la longitud y latitud.
[redshift] location-provider=manual adjustment-method=wayland [manual] lat=xx.xx lon=yy.yy
Bloqueo y pantalla apagada
Dos de otro ataúd vienen al rescate aquí. swayidle
ejecuta los comandos dados en tiempo de espera si no hay actividad (o viceversa, su apariencia), y swaylock
bloquea la pantalla y requiere una contraseña. Puede apagar la pantalla (o todas las pantallas, si hay varias)
swaymsg "output * dpms off"
Así es como se verá el demonio, bloqueando la pantalla después de 300 segundos de inactividad y apagándola después de 600:
swayidle -w \ timeout 300 'swaylock -f -c 000000' \ timeout 600 'swaymsg "output * dpms off"' \ resume 'swaymsg "output * dpms on"' \ before-sleep 'swaylock -f -c 000000'
Ejecútelo de cualquier manera.
i3blocks
Bloques listos para usar con calendario, red, estado del disco, etc. etc. se puede tomar prestado del repositorio i3blocks-contrib . En i3blocks se agregan en la configuración en ~/.config/i3blocks/config
. Por ejemplo, un bloque con actualizaciones cada 5 segundos por día de la semana, fecha y hora:
[time] command=date +"%a %d/%m %H:%M" interval=5
Pero este era un ejemplo demasiado simple. De hecho, los entusiastas de i3 y sway tienen un santo grial: mostrar la barra de título de la ventana actual en la barra superior. Vamos a descubrir cómo lograr esto.
En primer lugar, comenzamos a leer man sway-ipc
y descubrimos que puedes suscribirte a eventos allí. El requerido tiene el código 0x80000003. WINDOW
0x80000003. WINDOW
y devuelve objetos json de esta estructura:
{ "change" : "focus | title | ...", "container": { focused: true | false, name: "...", ... } }
De hecho, la ventana en sí misma puede cambiar su título ( change == title
), o podemos mover el foco a otra ventana ( change == focus
). Sin embargo, la ventana puede cambiar el título y desenfocado. Para filtrar tales eventos, debemos verificar la propiedad container.focused
.
Puede describir toda esta lógica en Python o Go, pero hay una mejor manera. swaymsg
hace que sea fácil suscribirse a los eventos deseados y enviarlos a stdout:
$ swaymsg -m -t SUBSCRIBE "['window']"
y procesaremos el json resultante en jq
. Sin entrar en las sutilezas de la sintaxis de consulta de esta maravillosa utilidad, aquí está el resultado:
$ query='select(.change == "focus" or (.change == "title" and .container.focused)) | .container.name' $ swaymsg -m -t SUBSCRIBE "['window']" | jq --unbuffered -r "$query"
Un script de dos líneas en la fiesta, ¡y no más código! Se --unbuffered
indicador --unbuffered
; de lo contrario, i3blocks no recibirá nuevas líneas de inmediato, sino solo cuando se borre el búfer.
Finalmente, agregue el siguiente bloque a la configuración de i3blocks:
[active_window] command=/path/to/our/script.sh interval=persist
Tarea: enséñele a tomar una captura de pantalla de la ventana actual. Dicen que tales cosas son imposibles en Wayland, pero los hombres lo dudan.
Tarea 2: Enseñe a i3blocks a mostrar la distribución actual del teclado como una bandera. Hay un par de bloques en i3blocks-contrib, pero muestran texto en lugar de una bandera y no funcionan en Wayland.
Otros programas
wl-clipboard le permite trabajar con el portapapeles desde la terminal, es decir, reemplaza xclip y xsel. Es especialmente útil para los usuarios de vim, en los que copiar / pegar comienza a usar "+y
/ "+p
(simplemente instale este paquete, no se requiere configuración adicional).
ydotool - reemplazo de xdotool.
waypipe : proxy para la transparencia de la red. Para ser sincero, no recuerdo la última vez que alguien hizo una pregunta relacionada con esta función en foros especializados. ¿Quizás no lo usan en absoluto? Yo definitivamente no.
KDE Connect Agregue el archivo org.kde.kdeconnect.nonplasma.desktop
a la org.kde.kdeconnect.nonplasma.desktop
(consulte las secciones anteriores), instale KDE Connect en su teléfono inteligente y configure su conexión, y puede controlar la reproducción de música y video desde su teléfono inteligente en un navegador con el complemento de integración de plasma , en vlc , en cantata, en mpv con el plugin mpv-mpris , y también recibir notificaciones en mako. Mi respeto por el proyecto KDE para el desarrollo de programas no clavado en su ecosistema.
Conclusión
Puede escribir sobre cómo configurar todo esto (especialmente el panel i3blocks) sin fin, pero es mejor detenerse aquí. Esto es lo que obtuve:

También vaya al subreddit / r / unixporn y admire lo que la gente está haciendo. (Sin embargo, el 95% de todo lo que se presenta allí se ve hermoso, pero categóricamente no es adecuado para el trabajo diario :)).