Sway (Português)

From ArchWiki
Jump to navigation Jump to search
Status de tradução: Esse artigo é uma tradução de Sway. Data da última tradução: 2020-03-22. 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 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, alem 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"
 input * xkb_variant "colemak,,typewriter"
 input * xkb_options "grp:win_space_toggle"
 input "MANUFACTURER1 Keyboard" 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 inicializando o sway.

Barra de status

Instalando o programa i3status é uma maneira simples de conseguir uma linha de status prática e padrão. 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 /home/onny/pictures/fredwang_norway.jpg 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.

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 seu volume, o brilho do seu monitor ou seu media player:

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

Para controlar o brilho voce pode usar brightnessctl ou light. Para uma lista de utilitários que controlam o brilho e correção de cor veja Luz de fundo.

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-server-xwayland.

Se você quer desabilitar XWayland totalmente e executar uma sessão Wayland "pura", desinstale o pacote xorg-server-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

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

Capturar tela

Você pode fazer uso do grim or swayshotAUR para capturas de tela e wf-recorder-gitAUR para vídeo. Opcionalmente, slurp pode ser usado para selecionar parte da tela a ser capturada.

Tire uma captura de tela da tela toda:

$ grim captura-de-tela.png

Tire uma captura de tela da janela focada:

$ grim -g "$(swaymsg -t get_tree | jq -r '.. | select(.focused?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"')" captura-de-tela.png

Tire uma captura de tela de parte da tela:

$ grim -g "$(slurp)" captura-de-tela.png

Grave um vídeo de toda a tela:

$ wf-recorder -o gravação.mp4

Grave um vídeo de parte da tela:

$ wf-recorder -g "$(slurp)"

Exemplo de uso do grim, slurp e wl-clipboard, captura de tela diretamente tirada com tecla Print para a área de transferência.

~/.config/sway/config
bindsym --release Print exec grim -g \"$(slurp)" - | wl-copy
Dica: slurpshot é um script interativo para captura de tela que usa bemenu.

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.

wofi-hgAUR é um lançador de aplicativos, que provê as mesmas funcionalidades do rofi e roda sob o Wayland. É 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 and Optimus.

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.

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