Sway (Español)

Sway (proveniente de S'irCmpwn's Way'land compositor ) es un compositor para Wayland diseñado para ser totalmente compatible con i3. Según el sitio web oficial:

Sway es un compositor de Wayland en mosaico y un reemplazo directo del gestor de ventanas i3 para X11. Funciona con su configuración existente de i3 y soporta la mayoría de las características de i3, además de algunas adicionales.

Instalación

Sway puede ser instalado con el paquete sway. La versión de desarrollo se puede instalar con sway-gitAUR. Se aconseja actualizar siempre wlroots cuando se actualice sway, debido a que ambos paquetes dependen uno del otro.

Nota: Los drivers gráficos propietarios no están soportados], incluyendo NVIDIA. Después de la versión 495 del controlador de NVIDIA, sway funciona si activa kernel mode setting y ejecutas sway con --unsupported-gpu.

También se recomienda instalar swaylock, swayidle y swaybg para bloquear la pantalla, configurar un gestor de inactividad y establecer fondos de pantalla respectivamente.

El lanzador de aplicaciones por defecto es y el emulador de terminal por defecto es . Antes de iniciar sway se aconseja instalar estos paquetes o establecer un nuevo lanzador y terminal en el archivo de configuración.

Inicio

Antes de que Sway pueda iniciarse, este necesita acceder a tus dispositivos de hardware como el teclado, el ratón y la tarjeta gráfica. El conjunto de estos dispositivos de hardware se llama seat, como se menciona en .

En Arch Linux, Sway puede obtener acceso a seat utilizando

  • y , o
  • seatd, que se instalará junto a Sway como una dependencia de wlroots

Si ya está instalado en su sistema, Sway debería obtener automáticamente el acceso a seat.

Alternativamente, si no está instalado en su sistema y quiere usar en su lugar, deberá agregarse al grupo de usuarios #Group management (Español) y active , vuelve a iniciar la sesión y elige uno de los siguientes métodos para iniciar Sway.

Manualmente

Para iniciar Sway, ejecute en la consola.

Automáticamente al ingresar a una TTY

De forma similar al servidor gráfico X, Sway puede iniciar automáticamente al agregar el siguiente código en su archivo de inicio de la shell (véase Command-line shell (Español)#Intérprete de línea de órdenes de inicio de sesión):

Para más detalles, consulte Xinit (Español)#Inicio automático de X al inicio de sesión

Desde un gestor de pantallas

La sesión de sway se encuentra en /usr/share/wayland-sessions/sway.desktop. Esta es reconocida automáticamente por gestores de pantalla modernos como GDM y SDDM.

Se puede iniciar sway como servicio de usuario de systemd a través del gestor de pantallas.

También puede usar un gestor de sesiones de consola, consulte Display manager (Español)#Consola.

Configuración

Si usted ya usa i3, es posible copiar el archivo de configuración existente a y que este funcione de forma inmediata en sway. De otra forma, copie el archivo de configuración muestra ubicado en /etc/sway/config a . Consulte para conocer más de la configuración.

Mapa de teclado

Por defecto, sway inicia con la distribución de teclado US QWERTY. Para configurar por dispositivo de entrada:

Para más detalles véase y .

El mapa de teclado también puede ser configurado usando variables de entorno (, , etc.) al iniciar . Las opciones de configuración se priorizan ante las variables de ambiente.

Tasa y retardo tipográfico

Para modificar la tasa y retardo tipográfico, agregue las siguientes lineas a la sección de configuración:

Barra de estado

Sway incluye una barra de estado, swaybar, que se ejecuta en un ambiente de Wayland (Español) puro. swaybar puede ejecutar un script o algún otro programa para mostrar información en la barra de estado. Consulte sway-bar(5) y para más detalles.

Tip: waybar es una barra de estado alternativa a la de defecto (swaybar).

Instalar i3status es una opción para tener una barra de estado práctica por defecto en Wayland. Agregue el siguiente segmento de código al final de su archivo de configuración de sway:

Para habilitar los colores en la salida de i3status necesitará modificar el siguiente segmento en la configuración de i3status:

Fondo de pantalla

swaybg es un programa dedicado a mostrar fondos de pantalla en sway. Se necesita para ejecutar el comando output.

La siguiente linea configura una imagen como fondo en todas las pantallas (output aplicará el comando a todas las pantallas ):

Necesitará reemplazar la ruta y nombre del archivo por el correspondiente a su fondo de pantalla.

Así puede usar colores sin transparencias como fondo:

output * bg #000000 color

Adicionalmente puede utilizar como un frontend para swaybg.

Dispositivos de entrada

Es posible modificar individualmente la configuracion de los dispositivos de entrada. Por ejemplo, para activar "toque para hacer clic" y desplazamiento natural en todos los touchpads:

Para configurar un touchpad específico, use para obtener el identificador del dispositivo deseado y reemplácelo por type:touchpad.

Puede encontrar más documentación en y configuración adicional como perfiles de aceleración o cómo desactivar la entrada de dispositivos.

HiDPI

Configure el factor de escala de pantallas con el comando en su archivo de configuración. El factor de escala puede ser fraccional, aunque este suele ser un factor de 2 para pantallas HiDPI.

Puede encontrar el nombre de la pantalla con ejecutando el comando:

$ swaymsg -t get_outputs

Atajos de teclado personalizados

Las teclas especiales en su teclado pueden ser utilizadas para ejecutar órdenes, por ejemplo, para controlar el volumen, brillo del monitor o reproductores de música:

Véase PulseAudio#Keyboard volume control, Advanced Linux Sound Architecture#Keyboard volume control, Backlight#Backlight utilities y MPRIS para más detalles y programas adicionales.

Para permitir que un atajo de teclado se pueda ejecutar mientras que la pantalla está bloqueada, agregue el parámetro a bindsym.

bindsym --locked XF86AudioPlay exec playerctl play-pause
Sugerencia: wevAUR es una herramienta que proveé funciones similares a xorg-xev en Wayland.

Indicadores gráficos de la barra de estado

A menudo es deseable que el porcentaje actual de algún valor, como el brillo o el volumen, sea indicado por una barra gráfica cuando se ajusta. Una opción para proporcionar esto en Sway es (o ), que proporciona un subconjunto de funciones de la popular herramienta pero como una utilidad nativa de Wayland que implementa el protocolo layer-shell. Consulte el sitio web del proyecto para ver ejemplos de uso.

Vista general de los espacios de trabajo

Si usa un gran número de espacios de trabajo con varias ventanas y le es difícil recordar la ubicación de estos, entonces sovAUR puede ser de ayuda. Es una ventana superpuesta (overlay) que muestra los esquemas de los espacios de trabajo, para hacer su navegación más sencilla. Muestra los nombres de los programas y ventanas, además soporta configuraciones de múltiples pantallas. Consulte la página del proyecto para más información.

Idle

Sway tiene un demonio de inactividad (idle) llamado que administra la inactividad de las sesiones. Existen muchas formas de iniciar y configurar el demonio. La más sencilla es usar el archivo de configuración de sway. acepta múltiples argumentos para configurar eventos como (es decir, periodo de inactividad), (al reanudar de suspensión), , etc. Consulte para más conocer detalles de los eventos. Es posible asignar una acción a un evento. Para asignar múltiples acciones a un evento sólo repita el accionador (trigger).

La siguientes lineas indican a bloquear la pantalla después de 30 minutos de inactividad y apagar la pantalla cinco segundos después del bloqueo:

Para apagar una pantalla bloqueada con más anticipación, como después de 10 segundos, filtre con grep el proceso del bloqueo de pantalla de la lista de procesos y ejecute de la siguiente forma:

timeout 10 'if pgrep -x swaylock; then swaymsg "output * dpms off"; fi'

Para suspender y pausar medios de reproducción, anteceda las siguientes instrucciones al comando swayidle:

before-sleep 'playerctl pause'
before-sleep 'swaylock'

Ventanas flotantes

Para habilitar ventanas flotantes o asignaciones de modos, abra la aplicación y use los atributos app_ip, , y para habilitarla. El siguiente comando listará las propiedades de todas las ventanas abiertas.

$ swaymsg -t get_tree

Para obtener de todas las ventanas abiertas escriba:

$ swaymsg -t get_tree | grep "app_id"

Y para el de la ventana enfocada:

$ swaymsg -t get_tree | jq -r '..|try select(.focused == true)'

Si el es nulo para algunas ventanas, quizá prefiera usar los atributos y/o para habilitar las asignaciones de modos o ventanas flotantes. En la salida del comando busque dichos atributos y configure reglas específicas para sus ventanas.

Este proceso es similar a usar para conocer los atributos o en X11.

Al usar múltiples pantallas algunas ventanas flotantes pueden incrementar su tamaño más allá de una pantalla. Este comando centra y redimensiona la ventana flotantes al 80% del tamaño de la pantalla actual:

$ swaymsg move position center; swaymsg resize set 80ppt 80ppt

Portapapeles

Por defecto, el portapapeles es vaciado cuando una ventana se cierra. Este comportamiento puede ser sorpresivo.

Un "gestor de portapapeles" debe de ser instalado para que el contenido copiado se comparta entre las ventanas.

Un ejemplo de un gestor de portapapeles diseñado para waylando es clipman, el cual puede ser instalado con el paquete or .

Para iniciar clipman simultáneamente a Sway, agregue la siguiente línea a su archivo de configuración:

Xresources

Copie ~/.Xresources a para usarlos en Sway.

XWayland

Consulte Wayland (Español)#XWayland para más detalles y un resumen de los paquetes disponibles.

XWayland se encuentra habilitado por defecto.

Si desea deshabilitarlo y ejecutar una sesión de Wayland "pura", modifique su archivos de configuración con los siguientes valores:

Usar otro renderizador de wlroots

Es posible usar otro renderizador de wlroots al asignar la variable de ambiente . La lista de renderizadores disponibles está en la documentación de wlroots.

Consejos y trucos

Habilita BloqMayus/BloqNum al inicio

Sway desactiva las teclas y al iniciar. Para que sean activadas al inicio, modifique las configuraciones de entrada xkb_capslock y/o a para sus teclados. Por ejemplo, para aplicarlo en todos los teclados, incluya las siguientes lineas en su configuración:

En cualquier caso, y pueden ser alternadas al presionar las teclas correspondientes en el teclado.

Distribución de teclado actual

La distribución de teclado actual puede ser obtenida de la siguiente forma, donde debe de ser reemplazado por el identificador del teclado actual:

$ swaymsg -t get_inputs | jq -r '.[] | select(.identifier == "kbd_identifier") | .xkb_active_layout_name'

Tecla de composición

Para configurar (tecla de imprimir pantalla) como tecla de composición:

$ swaymsg 'input * xkb_options compose:prsc'

Las combinaciones disponibles para asignar a la tecla de composición se muestran en Xorg/Keyboard configuration#Configuring compose key. Estas incluso pueden ser configuradas en el archivo XCompose. Es necesario reiniciar las aplicaciones para que lo cambios se vean reflejados.

Puede buscar nombres de teclas en , o usar algún depurador como : (en /usr/lib/xkbcommon/).

Alternar iluminación

Para apagar (y encender) su pantalla con una tecla (por ejemplo, ), agregue el siguiente scrip a su archivo de configuración de Sway:

O use la opción toggle directamente, puede que deba especificar una pantalla específica si tiene múltiples pantallas:

$ swaymsg "output nombre_pantalla dpms toggle"

Capturar y compartir pantalla

Véase Screen capture#Wayland.

Ajuste de temperatura de color

Véase Backlight#Wayland.

Controlar swaynag con el teclado

Swaynag es el programa de avisos incluido por defecto en sway, este sólo permite interacciones con el ratón. Un programa como puede ser usado para permitir la interacción a través del teclado.

Swaynagmode funciona ejecutando swaynag primero, luego escucha por señales que activan aciones, como seleccionar el siguiente botón, ignorar el prompt o aceptar el botón seleccionado. Estas señales son enviadas lanzando otra instancia del script swaynagmode con argumentos de control, como o .

Swaynagmode activa por defecto el modo sway al iniciar seguido de al finalizar. Esto permite definir atajos de teclado fácilmente en su archivo de configuración:

~/.config/sway/config
set $nag exec swaynagmode
mode "nag" {
  bindsym {
    Ctrl+d    mode "default"

    Ctrl+c    $nag --exit
    q         $nag --exit
    Escape    $nag --exit

    Return    $nag --confirm

    Tab       $nag --select prev
    Shift+Tab $nag --select next

    Left      $nag --select next
    Right     $nag --select prev

    Up        $nag --select next
    Down      $nag --select prev
  }
}

Tome en cuenta que desde la versión 1.2 de sway, los nombres de los modos diferencian entre mayúsculas y minúsculas (case-sensitive)

Puede configurar sway para que use swaynagmode con el comando de configuración .

Cambiar el tema y tamaño del cursor

Para modificar el tamaño y tema del cursor:

Donde my_cursor_theme puede asignarse o reemplazado por un valor específico como , o , y valores como .

Puede inspeccionar los valores con y .

Puede que necesite reiniciar las aplicaciones para ver reflejado el cambio.

Manage Sway-specific daemons with systemd

Systemd provides a graphical-session.target which is a user unit which is active whenever any graphical session is running, whether Xorg or Wayland. User services which should run in all graphical environments can be bound to that target. It also allows for a window-manager-specific target to be bound to graphical-session.target to start and stop services which should run only under that window manager. See

Users may want to start some services/daemons (such as swayidle or ) only when the current window manager is Sway, and they may also want these services to stop when Sway stops. Additionally, users who are running may want to have the services be in separate cgroups so that a single memory-hungry service does not take down the whole Sway session (see the Fedora bug report).

Some or all of this functionality is provided by Arch Sway packages. For example, the sway package in community provides the file and both sway and sway-gitAUR provide a 50-systemd-user.conf drop-in file for the directory. This file imports required environment variables into the systemd user session and dbus if the Sway file contains .

If you intend to provide functionality using the roll-your-own method described below or by using a specialist package such as or sway-services-gitAUR you should consider removing files that provide the same functionality.

This functionality can be provided on a roll-your-own basis by creating a and let those daemons/services wanted by . This systemd target should be a user target (see systemd/User). For example:

Then, add the following line to Sway's configuration file (for example, append the line to , or add a new file to ):

With the above line in the configuration file, whenever Sway starts, it also activates .

Finally, link the desired services to . For example, adding a (or ) service:

When this user unit is enabled, it is only activated when Sway is running and deactivated when Sway stops.

The creation of the file and the importing of the environment can also be accomplished by installing . In addition to separating services into cgroups, sway-systemd also places each GUI application in its own cgroup. This enables imposition of per-cgroup resource constraints on individual application. See the sway-systemd README.

Change screen resolution after start

You can use the graphical program or the terminal program to change the resolution, rotate and arrange displays.

Create headless outputs

Create outputs not related to a physical video interface, HEADLESS-1, HEADLESS-2, etc.:

$ swaymsg create_output

Print a description of the new output:

$ swaymsg -pt get_outputs | grep -A 10 HEADLESS

Configure the new output with the command, for example:

~/.config/sway/config
output HEADLESS-1 {
pos 1920,0
mode 1280x720@75Hz
}

Troubleshooting

Application launchers

i3-dmenu-desktop, , and rofi all function relatively well in Sway, but all run under XWayland and suffer from the same issue where they can become unresponsive if the cursor is moved to a native Wayland window. The reason for this issue is that Wayland clients/windows do not have access to input devices unless they have focus of the screen. The XWayland server is itself a client to the Wayland compositor, so one of its XWayland clients must have focus for it to access user input. However, once one of its clients has focus, it can gather input and make it available to all XWayland clients through the X11 protocol. Hence, moving the cursor to an XWayland window and pressing Escape should fix the issue, and sometimes running does too.

is a native Wayland dmenu replacement which can optionally be combined with  to provide a Wayland-native combination for launching desktop files (as i3-dmenu-desktop does):
j4-dmenu-desktop --dmenu='bemenu -i --nb "#3f3f3f" --nf "#dcdccc" --fn "pango:DejaVu Sans Mono 12"' --term='termite'

You may need to set environment variable to "wayland" if you choose not to disable XWayland.

You can also build your own with a floating terminal and fzf as discussed in a GitHub issue.

Also binary provided by package can serve as launcher, offering both XWayland and native Wayland support.

rofi-lbonn-wayland-gitAUR is a fork of rofi that works in Wayland and also has an flag if you need to launch it in an X11 session.

is a command launcher, that provides some of the same features as rofi but running under Wayland. wofi lacks some features from rofi like an SSH mode and a window-switching mode. It is based on wlroots library and use GTK3 for rendering. It works pretty well with sway.

Virtualization

Sway works with both VirtualBox and VMware ESXi.

For Sway to work in QEMU, QEMU must be started with . See also QEMU#qxl.

Unable to start Sway from tty

For ESXi, you need to enable 3D support under the Hardware Configuration > Video card settings. See also VMware#Enable 3D graphics on Intel, Optimus and AMD.

No visible cursor

When using certain graphics drivers (e.g. the VMSVGA graphics controller or the proprietary NVIDIA driver), the cursor is invisible. This can be fixed by using software cursors as discussed in :

$ export WLR_NO_HARDWARE_CURSORS=1

Sway socket not detected

Using a argument, such as swaymsg -t get_outputs, will sometimes return the message:

sway socket not detected.
ERROR: Unable to connect to

when run inside a terminal multiplexer (such as GNU Screen or tmux). This means could not connect to the socket provided in your .

To view what the current value of is, type:

To work around this problem, you may try attaching to a socket based on the running sway process:

$ export SWAYSOCK=/run/user/$(id -u)/sway-ipc.$(id -u).$(pgrep -x sway).sock

To avoid this error, run the command outside of a multiplexer.

Failed to connect to a Wayland server

Tmux creates local environment variables for each session (to see them type: ). Therefore, if you re-attach to a previous tmux session with tmux-resurrect or tmux-continuum, or your tmux server runs before sway starts, the environment variables are outdated.

You can use to instruct tmux to update them whenever you attach to the session by adding the following to your :

set-option -g update-environment "DISPLAY WAYLAND_DISPLAY SWAYSOCK SSH_AUTH_SOCK"

Unable to retrieve socket path

Requesting messages from on a tty may return the following message:

Unable to retrieve socket path
environment variable is set after launching Sway, therefore a workaround to this error is to request  in a terminal inside Sway.

Keybindings and keyboard layouts

By default, if you are using more than one keyboard layout, e.g. input * xkb_layout "us,ru", bindings may become broken when you switch on some secondary layout.

Thanks to https://github.com/swaywm/sway/pull/3058, all you need is to add key to sensitive lines like this:

Alternatively you can create a variable set $mybind bindsym --to-code and then replace all instances of with like so:

Java applications

Some Java-based applications will display blank screen when opened, for example any JetBrains editor such as IntelliJ, CLion, or PyCharm. To mitigate this, the application can be started with the environment variable set to 1.

If you start the application from a launcher like rofi or , you might want to modify the application desktop entry as shown in Desktop entries#Modify environment variables.

Some issues with Java applications have been fixed in OpenJDK 11 and Sway 1.5. However, certain applications require additional configuration to use newer versions of OpenJDK, in the case of Android Studio you must set .

Scroll on border

If using the mouse scroll wheel on an application's border crashes sway, you could use for the (e.g. Firefox).

Program cannot open display

If a program crashes on start with the error message "cannot open display", it is likely that the program you are using is an X11 program. You can use the XWayland compatibility layer to run X11 programs under Wayland, see #XWayland for details.

Unable to open wayland socket

If sway won't launch and outputs the error message "Unable to open wayland socket", that may mean the `$XDG_RUNTIME_DIR` environment variable is set but the specified directory is missing.

Mouse not working in WINE applications

When running programs, WINE expects a primary monitor to be set, which can cause issues (such as clicks not registering) as Wayland has no concept of a primary monitor. Instead, you can specify a primary monitor for XWayland to use via xrandr by adding this line to your Sway configuration:

~/.config/sway/config
...
exec_always xrandr --output XWAYLAND0 --primary
...

Note that XWAYLAND0 (or any XWAYLAND display name) may not represent your monitor, and may be susceptible to change in different sessions. Instead, you can specify the first XWAYLAND display using this line instead:

exec_always xrandr --output $(xrandr | grep -m 1 XWAYLAND | awk '{print $1;}') --primary

You may need to adjust these lines to suit your needs. You can find out which displays are mapped to what names by using the command with no arguments.

gollark: I think sinthorion is trying to sabotage the problems.
gollark: THAT'S IT! Slice the toast into extremely small pieces and toast them individually, then reassemble it!
gollark: You'll need to accelerate the rest of the planet.
gollark: Well, if you accelerate the bread it experiences less time, we want the opposite.
gollark: Can you toast something properly in 10 seconds?

See also

This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.