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).