Sway (Português)

From ArchWiki
Status de tradução: Esse artigo é uma tradução de Sway. Data da última tradução: 2020-09-13. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

sway é um compositor para Wayland feito para ser totalmente compatível com o i3. De acordo com o site oficial:

Sway é um compositor dinâmico para Wayland e possui configuração compatível com o gerenciador de janelas i3 para X11. Funciona com sua existente configuração do i3 e suporta a maioria de suas funcionalidades, além de extras.

Instalação

sway pode ser instalado com o pacote sway. A versão de desenvolvimento pode ser instalada usando wlroots-gitAUR e sway-gitAUR. É aconselhável sempre atualizar o wlroots quando você atualiza o sway, devido a forte dependência.

Você pode instalar também swaylock e swayidle para bloqueio de tela e gerenciador de inatividade.

O lançador de aplicativos padrão é o dmenu e o terminal padrão é o alacritty. Antes de executar sway é recomendado instalar ambos ou definir um novo lançador e terminal na configuração.

Iniciando

Manualmente

Para iniciar o Sway, simplesmente execute sway no console do Linux.

Por um gerenciador de login

Nota: Sway não suporta gerenciadores de login oficialmente.[1]

A sessão do sway está localizada em /usr/share/wayland-sessions/sway.desktop, ela é automaticamente reconhecida por qualquer gerenciador de login moderno como GDM e SDDM.

É também possível rodar sway como um serviço de usuário do systemd através do gerenciador de login.

Você também pode usar gerenciador de login somente texto, veja Gerenciadores de exibição#Console.

Configuração

Se você já usa o i3, então copie sua configuração para ~/.config/sway/config e deve funcionar sem problemas. Caso contrário, copie o arquivo de exemplo da configuração para ~/.config/sway/config. Ele está localizado em /etc/sway/config, a menos que a flag DFALLBACK_CONFIG_DIR tenha sido configurada. Veja sway(5) para informações sobre a configuração.

Teclado

Por padrão, sway inicia com o teclado US QWERTY. Para configuração por input:

~/.config/sway/config
input * {
    xkb_layout "us,de,ru"
    xkb_variant "colemak,,typewriter"
    xkb_options "grp:win_space_toggle"
} 

input <identificador> xkb_model "pc101"

Mais detalhes estão disponíveis em xkeyboard-config(7) e sway-input(5).

O teclado pode também ser configurado usando variáveis de ambiente (XKB_DEFAULT_LAYOUT, XKB_DEFAULT_VARIANT, etc.) quando iniciar o sway, suas opções de configuração tem precedência sobre váriaveis de ambiente.

Atraso e taxa de digitação

Para mudar o atraso e taxa de digitação você pode adicionar as seguintes linhas para sua seção input:

~/.config/sway/config
input <identifier> repeat_delay 300
input <identifier> repeat_rate 30	

Barra de status

sway vem com uma barra de status padrão na forma de swaybar que é executada em um ambiente Wayland puro. swaybar pode chamar um script ou outro programa para mostrar informações na barra de status. Veja sway-bar(5) e swaybar-protocol(7) para detalhes.

Instalar o programa i3status é uma maneira simples de conseguir uma barra de status prática e padrão sob o Wayland. Tudo que se tem a fazer é adicionar o seguinte trecho no final da sua configuração do sway:

~/.config/sway/config
bar {
    status_command i3status
}

Se você quer que o i3status tenha saída colorida, você pode ajustar da seguinte maneira a configuração dele:

~/.config/i3status/config
general {
    colors = true
    interval = 5
}

Em ambos os exemplos, os arquivos de configuração instalados a nível de sistema foram copiados para o diretório do usuário e então modificados.

Dica: waybar é uma alternativa a barra de status incluída no sway (swaybar).

Papel de parede

Desde a versão 1.1.1 o gerenciamento de papel de parede do projeto SwayWM foi movido para swaybg, que é necessário para executar o comando output.

Esta linha, que pode ser adicionada ao final da sua configuração do sway, define o papel de parede em todas as telas (output seleciona todos com nome "*"):

~/.config/sway/config
output "*" bg /caminho/para/arquivo fill

Você tem que mudar o nome do arquivo e caminho de acordo com seu papel de parede.

Você pode usar o azoteAUR como um frontend GTK3 para swaybg.

Cores sólidas podem ser definidas como a seguir:

output * bg #000000 solid_color

Dispositivos de entrada

É possível realizar a configuração de específicos dispositivos de entrada. Por exemplo para habilitar toque-para-clicar e deslize natural para um touchpad, adicione um bloco de input:

~/.config/sway/config
input "2:14:ETPS/2_Elantech_Touchpad" {
    tap enabled
    natural_scroll enabled
}

O identificador do dispositivo pode ser consultado com:

$ swaymsg -t get_inputs

A saída do comando, algumas vezes tem um "\" para escapar símbolos como "/" (por exemplo, "2:14:ETPS\/2_Elantech_Touchpad") e isto precisa ser removido.

Mais documentação e opções como perfis de aceleração podem ser encontradas em sway-input(5).

HiDPI

Configure o fator de escala das suas telas com o comando output em seu arquivo de configuração. O fator de escala pode ser fracionário, mas é normalmente 2 para telas HiDPI.

output <nome> scale <fator>

Você pode encontrar o nome da sua tela com o seguinte comando:

$ swaymsg -t get_outputs

Atalhos customizados

Teclas especiais no seu teclado podem ser usadas para executar comandos, por exemplo para controlar o volume, o brilho do monitor ou tocadores de mídias:

~/.config/sway/config
bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5%
bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5%
bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle
bindsym XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle
bindsym XF86MonBrightnessDown exec brightnessctl set 5%-
bindsym XF86MonBrightnessUp exec brightnessctl set +5%
bindsym XF86AudioPlay exec playerctl play-pause
bindsym XF86AudioNext exec playerctl next
bindsym XF86AudioPrev exec playerctl previous	

Veja PulseAudio#Keyboard volume control, Advanced Linux Sound Architecture#Keyboard volume control, Backlight#Backlight utilities e MPRIS para detalhes e utilitários alternativos.

Para permitir que um atalho seja executado enquanto a tela está bloqueada, adicione o parâmetro --locked para o bindsym.

bindsym --locked XF86AudioPlay exec playerctl play-pause

Barras Indicadoras gráficas

É geralmente desejável ter um nível atual de alguma configuração com valor-porcentagem, como brilho e volume, sendo indicada por uma barra gráfica. Uma boa opção que traz essa facilidade no Sway é o wobAUR (alternativamente wob-gitAUR), que oferece um subconjunto da funcionalidade da popular ferramenta do X xobAUR mas como um utilitário nativo do Wayland implementando o protocolo layer-shell. Veja o site do projeto para exemplos de uso.

Janelas flutuantes

Para janelas flutuantes ou atribuição de caracteristicas, os seguintes atributos podem estar disponíveis: app_id, class, instance e title. O seguinte comando irá listar as propriedades de todas as janelas abertas.

$ swaymsg -t get_tree

Para conseguir o app_id de todas as janelas abertas, use:

$ swaymsg -t get_tree | grep "app_id"

Para conseguir o app_id da janela atualmente focada, use:

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

Se o app_id for nulo para algumas janelas, você pode usar os atributos class e/ou o instance. Com isso você pode criar regras para seus programas gráficos. Você pode pesquisar a saída e criar regras polidas para suas janelas.

~/.config/sway/config
for_window [app_id="galculator"] floating enable
assign [class="firefox"] -> 3
assign [class="^Urxvt$" instance="^htop$"] -> 9

É similar ao uso do xorg-xprop para descobrir o class ou wm_name no X11.

Xresources

Copie ~/.Xresources para ~/.Xdefaults para usá-lo no Sway.

XWayland

Se um programa falhar na execução com a mensagem de erro "cannot open display," provavelmente o programa que você está usando depende do X11. Para usar a camada de compatibilidade XWayland para executar programas que dependem do X11, é necessário instalar o pacote xorg-xwayland.

Se você quer desabilitar XWayland totalmente e executar uma sessão Wayland "pura", desinstale o pacote xorg-xwayland e defina a seguinte opção na configuração:

~/.config/sway/config
xwayland disable
Nota: Alguns programas precisam de variáveis de ambiente especiais ou opções de configuração para rodar nativamente em Wayland, e outros programas (incluindo a maioria das aplicações proprietárias) não suportam Wayland. Atualmente é recomendado manter o XWayland ativado para que aplicações antigas possam ser usadas.

Dicas e truques

Iniciar automaticamente após login

Para rodar sway no tty1 ao logar com teclado padrão US, edite:

~/.bash_profile
if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
  XKB_DEFAULT_LAYOUT=us exec sway
fi

Para rodar sway no tty1 ao logar com teclado padrão BR, edite:

~/.bash_profile
if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
  XKB_DEFAULT_LAYOUT=br exec sway
fi

Habilitar CapsLock/NumLock

Para habilitar o capslock e/ou numlock adicione as seguintes linhas no seu arquivo de configuração do sway:

~/.config/sway/config
input * xkb_capslock enable
input * xkb_numlock enable

Layout atual do teclado

O layout do teclado atual pode ser descoberto com o comando a seguir, onde identificador_kbd precisa ser trocado com o identificador do seu teclado:

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

Alternar luz de fundo

Para desligar (e ligar) suas telas com uma tecla (por exemplo, Pause), crie um atalho na sua config do Sway para o seguinte script:

#!/bin/sh
read lcd < /tmp/lcd
    if [ "$lcd" -eq "0" ]; then
        swaymsg "output * dpms on"
        echo 1 > /tmp/lcd
    else
        swaymsg "output * dpms off"
        echo 0 > /tmp/lcd
    fi

Captura e compartilhamento de tela

Veja Screen capture#Wayland.

Controle swaynag com o teclado

Swaynag, o programa de aviso/prompt padrão que vem no sway, somente suporta interação do usuário com o mouse. Um programa auxiliar como swaynagmodeAUR pode ser usado para habilitar interação via atalhos do teclado.

Swaynagmode funciona lançando swaynag, e então escutando sinais que podem acionar ações como selecionar o próximo botão, fechar o prompt, ou aceitar o botão selecionado. Estes sinais são enviados ao lançar outra instância do script swaynagmode com controle de argumento, como swaynagmode --select right ou swaynagmode --confirm.

Swaynagmode por padrão aciona o modo do sway nag ao inicializar, seguido por default na saída. Isto facilita a definição de atalhos na sua configuração do sway:

~/.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
  }
}

Note que, a partir da versão do sway 1.2, diferencia-se maiúsculo/minúsculo em nomes de modos.

Você pode configurar o sway para usar swaynagmode com o comando de configuração swaynag_command swaynagmode.

Mudar o tema e tamanho do cursor

Para definir temas de cursor e tamanho:

~/.config/sway/config
seat seat0 xcursor_theme tema_do_cursor tamanho_do_cursor

Onde tema_do_cursor pode ser definido ou trocado por um valor específico como default, Adwaita ou Simple-and-Soft, e tamanho_do_cursor um valor como 48.

Você pode inspecionar os seus valores com echo $XCURSOR_SIZE e echo $XCURSOR_THEME.

Você precisa reiniciar o programa para ver as mudanças.

Nota: Wayland usa cursores do programa cliente. É possível que programas não usem os valores do $XCURSOR_SIZE e $XCURSOR_THEME.

Solução de problemas

Lançadores de aplicativos

i3-dmenu-desktop, dmenu, e rofi todos funcionam relativamente bem no Sway, no entanto, rodam sob XWayland e sofrem do mesmo problema, onde eles podem não responder se o cursor é movido para uma janela nativa do Wayland. O motivo para isso acontecer é que clientes/janelas do Wayland não tem acesso a dispositivos de entrada a menos que eles possuam foco na tela. O servidor XWayland é um cliente para o compositor Wayland, então um de seus clientes deve ter foco para ter acesso a entrada do usuario. No entanto, uma vez que um de seus clientes tem foco, pode captar as entradas e fazê-la disponível para todos os clientes XWayland através do protocolo X11. Mover o cursor para uma janela XWayland e pressionar a tecla Escape deve resolver, algumas vezes rodar pkill resolve também.

bemenu é o substituto nativo do dmenu para Wayland que pode opcionalmente ser combinado com j4-dmenu-desktopAUR para prover um lançador de arquivos desktop nativo do Wayland (como i3-dmenu-desktop faz):

j4-dmenu-desktop --dmenu='bemenu -i --nb "#3f3f3f" --nf "#dcdccc" --fn "pango:DejaVu Sans Mono 12"' --term='termite'

Você pode precisar configurar a variavel de ambiente BEMENU_BACKEND para "wayland" se você escolhe desabilitar o XWayland.

Você pode combinar seu terminal flutuante com fzf como discutido em uma issue do GitHub.

O binário krunner provido pelo pacote plasma-workspace também serve como um lançador, oferece suporte a XWayland e Wayland nativo.

rofi-lbonn-wayland-gitAUR é um fork do rofi que funciona no Wayland e também tem uma opção -x11 caso você precise executá-lo na sessão X11.

wofi-hgAUR é um lançador de aplicativos, que provê as mesmas funcionalidades do rofi e roda no Wayland. wofi não tem algumas funcionalidades do rofi como modo SSH e um modo de troca de janelas. É baseado na biblioteca wlroots e usa GTK3 para renderização. Funciona bem com o sway.

Virtualização

Sway funciona no VirtualBox e VMware ESXi.

Não consegue iniciar o Sway pelo tty

Para ESXi, você precisa habilitar o suporte a 3D em Hardware Configuration > Video card settings. Veja também VMware#Enable 3D graphics on Intel, Optimus and AMD.

Cursor invisível

Quando usar o controlador de gráficos VMSVGA, o cursor vai ficar invisível. Para corrigir isto declare a seguinte váriavel de ambiente (como discutido em [2]):

$ export WLR_NO_HARDWARE_CURSORS=1

Sway socket não detectado

Usando um argumento do swaymsg, como swaymsg -t get_outputs, irá algumas vezes retornar a mensagem:

sway socket not detected.
ERROR: Unable to connect to

Quando roda dentro de um terminal multiplex (como gnu screen ou tmux). Isto significa que swaymsg não pôde se conectar ao socket provido pelo SWAYSOCK.

Para ver qual o atual valor do SWAYSOCK, digite:

$ env | fgrep SWAYSOCK
SWAYSOCK=/run/user/1000/sway-ipc.1000.4981.sock

Para resolver este problema, você pode tentar definir o socket baseado no atual processo do sway:

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

Para evitar este erro, rode o comando fora de um multiplex.

Não foi possível pegar o caminho do socket

Solicitar mensagens do swaymsg -t no tty pode retornar a seguinte mensagem:

Unable to retrieve socket path

A variável de ambiente SWAYSOCK é configurada depois do lançamento do Sway, então uma resolução para este erro é solicitar swaymsg -t [message] dentro de um terminal no Sway.

Atalhos e formato do teclado

Por padrão, se voce esta usando mais do que um formato de teclado, exemplo input * xkb_layout "us,ru", atalhos podem se tornar quebrados quando você troca para um teclado secundário.

Graças ao https://github.com/swaywm/sway/pull/3058, tudo que você precisa fazer é adicionar --to-code a linhas do bindsym como esta:

bindsym --to-code {
  $mod+$left focus left
  $mod+$down focus down
  $mod+$up focus up
  $mod+$right focus right
}

Programas java

Alguns programas baseados no Java irão mostrar uma tela branca quando abertos, por exemplo qualquer editor Intellij. Para solucionar isto, o programa pode ser iniciado com a variável de ambiente _JAVA_AWT_WM_NONREPARENTING configurada para 1.

Se você rodar o programa por um lançador como rofi ou dmenu, você pode querer modificar a entrada desktop do aplicativo como descrito em Entradas de desktop#Modificar variáveis de ambiente.

Alguns problemas com aplicações Java foram concertadas no OpenJDK 11 e Sway 1.5. No entanto, certas aplicações precisam de configuração adicional para usar as versões mais novas do OpenJDK, no caso das IDEs JetBrains você deve definir STUDIO_JDK=/usr/lib/jvm/java-11-openjdk-amd64/. [3]

Rolar na borda

Se usar a roda de rolagem do mouse na borda de um aplicativo, você poderá usar border none para o app_id (por exemplo, Firefox).

Veja também