Sway (Portuguê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
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.
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 azote 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 bindsym XF86Search exec $menu
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 wob (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
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.
$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-desktop 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 | grep -F "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 Desktop entries#Modify environment variables.
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).