bspwm (Português)
bspwm é um gerenciador de janelas leve, lado a lado, e minimalista escrito em C que organiza janelas em árvore binária completa. Seu tamanho instalado é menor que 600KB. O bspwm tem suporte para EWMH e múltiplos monitores. Ele responde apenas a eventos e mensagens X que recebe em um soquete dedicado de um programa incluído em seu pacote, o bspc.
Instalação
Instale bspwm, ou bspwm-gitAUR versão de desenvolvimento.
Bspwm não manipula nenhuma entrada de teclado e, em vez disso, fornece o programa bspc
como interface.
Para atalhos de teclado, você terá que configurar um daemon de hotkey sxhkd (sxhkd-gitAUR versão de desenvolvimento).
Iniciando
Para começar o bspwm ao iniciar sessão, adicione ao arquivo ~/.xinitrc
ou ~/.xprofile
(dependendo de como escolheu iniciar o X Xorg (Português)#Running Xorg):
sxhkd & exec bspwm
Configuração
Importante: Certifique-se de que sua variável de ambiente $ XDG_CONFIG_HOME esteja configurada ou seu bspwmrc não será encontrado. Isso pode ser feito digitando XDG_CONFIG_HOME="$HOME/.config"
e export XDG_CONFIG_HOME
para ~/.profile
.
Exemplos de configuração podem ser encontrados em /usr/share/doc/bspwm/examples/
e GitHub.
Crie os diretórios ~ / .config / bspwm /
e ~ / .config / sxhkd /
e copie / usr / share / doc / bspwm / examples / bspwmrc
para ~ / .config / bspwm /
e / usr / share / doc / bspwm / examples / sxhkdrc
para ~ / .config / sxhkd /
. Nestes dois arquivos, as configurações e combinações de teclas serão definidas, respectivamente. Finalmente, torne o arquivo bspwmrc executável, com chmod + x ~ / .config / bspwm / bspwmrc
.
As opções de configuração para cada arquivo são listadas e descritas em bspwm(1) e sxhkd(1).
Para múltiplos monitores
Exemplo de configuração do bspwmrc para dez áreas de trabalho para um só monitor:
bspc monitor -d I II III IV V VI VII VIII IX X
Para mais de um monitor, um exemplo com 3 seria semelhante a esse:
bspc monitor DVI-I-1 -d I II III IV bspc monitor DVI-I-2 -d V VI VII bspc monitor DP-1 -d VIII IX X
Use xrandr -q
ou bspc query -M
para saber os nomes dos monitores que deseja.
O número total de área de trabalho foi mantido em dez no exemplo acima. Isso é para que cada área de trabalho ainda possa ser endereçada com super + {1-9,0
} no sxhkdrc.
Regras
Há duas maneiras de definir regras de comportamento para as janelas (a partir de cd97a32).
A primeira é usando o comando de regra interno, conforme mostrado no exemplo bspwmrc:
bspc rule -a Gimp desktop=^8 follow=on state=floating bspc rule -a Chromium desktop=^2 bspc rule -a mplayer2 state=floating bspc rule -a Kupfer.py focus=on bspc rule -a Screenkey manage=off
A segunda opção é usar um comando de regra externa. Isso é mais complexo, mas pode permitir que você crie regras de janelas mais específicas. Veja estes exemplos para um comando de regra de amostra.
Se uma determinada janela não estiver se comportando de acordo com suas regras, verifique o nome da classe do programa. Isso pode ser feito executando xprop | grep WM_CLASS
para ter certeza de que você está usando a string apropriada(pra isso precisa ter xorg-xprop instalado).
Painéis
Usando lemonbar
Um exemplo para lemonbar-gitAUR é fornecido na página do GitHub. Você também pode encontar mais exemplos na nossa wiki lemonbar. O painel será executado adicionando panel &
na sua bspwmrc. Verifique as dependências para as opções desejadas.
Para exibir informações do sistema na sua barra de status, você pode usar várias chamadas do sistema. Este exemplo mostra como editar seu panel
para exibir o estado de volume no mesmo:
panel_volume() { volStatus=$(amixer get Master | tail -n 1 | cut -d '[' -f 4 | sed 's/].*//g') volLevel=$(amixer get Master | tail -n 1 | cut -d '[' -f 2 | sed 's/%.*//g') # is alsa muted or not muted? if [ "$volStatus" == "on" ] then echo "%{Fyellowgreen} $volLevel %{F-}" else # If it is muted, make the font red echo "%{Findianred} $volLevel %{F-}" fi }
Em seguida, é só verirficar se já está invocado e redirecionado para $PANEL_FIFO
:
while true; do echo "S" "$(panel_volume) $(panel_clock)" > "$PANEL_FIFO" sleep 1s done &
Usando polybar
Polybar é uma ferramenta rápida e fácil de usar para criar barra de status; e também é altamente personalizável. Polybar possui um módulo para bspwm que permite gerenciar as áreas de trabalho e exibe informações da mesma semelhante ao i3status no i3.
Polybar pode ser instalado pelo bspwm e bspwm-gitAUR. Então crie o diretório ~/.config/polybar
e copie para o mesmo o arquivo /usr/share/doc/polybar/config
.
Agora é só adicionar no seu bspwmrc:
polybar example &
Note que "example" é o nome da sua barra no arquivo de configuração.
Scratchpad
Voce pode emular um terminal suspenso (como o recurso de rascunho do i3 se voce colocar um terminal nele) usando as flags da janela do bspwm. Anexe o seguinte ao final do arquivo de configuração do bspwm (adapte-o ao seu próprio emulador de terminal):
bspc rule -a scratchpad sticky=on state=floating hidden=on st -c scratchpad -e ~/bin/scratch &
Esse sticky flag garante que a janela esteja sempre presente na área de trabalho atual.
E ~/bin/scratch
é:
#!/usr/bin/sh bspc query -N -n .floating > /tmp/scratchid $SHELL
A tecla de atalho para alternar o scratchpad deve estar vinculada a:
id=$(cat /tmp/scratchid);\ bspc node $id --flag hidden;bspc node -f $id
Para um scratchpad que possa usar qualquer tipo de janela sem regras predefinidas, consulte [1]
Para um script de rascunho mais sofisticado que suporte muitos terminais prontos para usar e tenha flags para fazer coisas como iniciar opcionalmente uma sessão tmuxinator / tmux, transformar qualquer janela em um scratchpad imediatamente e redimensionar automaticamente um scratchpad para ajustar-se ao monitor atual, instale tdrop-gitAUR.
Configurações diferentes de monitores para diferentes máquinas
Visto que bspwmrc
seja um shell script, este permite que se faça coisas semelhantes a essa:
#! /bin/sh if [[ $(hostname) == 'myhost' ]]; then bspc monitor eDP1 -d I II III IV V VI VII VIII IX X elif [[ $(hostname) == 'otherhost' ]]; then bspc monitor VGA-0 -d I II III IV V bspc monitor VGA-1 -d VI VII VIII IX X elif [[ $(hostname) == 'yetanotherhost' ]]; then bspc monitor DVI-I-3 -d VI VII VIII IX X bspc monitor DVI-I-2 -d I II III IV V fi
Configurar um desktop onde todas as janelas estão flutuando
Aqui está como configurar a área de trabalho 3 para ter apenas janelas flutuantes. Pode ser útil para o Gimp ou outros aplicativos com várias janelas.
#!/bin/bash # change the desktop number here FLOATING_DESKTOP_ID=$(bspc query -D -d '^3') bspc subscribe node_manage | while read -a msg ; do desk_id=${msg[2]} wid=${msg[3]} [ "$FLOATING_DESKTOP_ID" = "$desk_id" ] && bspc node "$wid" -t floating done
Coloque este script em algum lugar em seu $ PATH e chame-o no arquivo .xinitrc ou similar (com um & no final):(source)
Solução de problemas
Tela em branco e atalhos de teclado não funcionam
- Certifique-se de estar inicinando o sxhkd em segundo plano no arquivo
~/.xinitrc
ou outro. - Confira se o arquivo
~/.config/bspwm/bspwmrc
está executável.
Caixa de janela maior que a aplicação real
Isso pode acontecer se você estiver usando aplicativos GTK3 e, geralmente, para janelas de diálogo. A correção é criar ou adicionar o seguinte a um arquivo de tema gtk3 (~/.config/gtk-3.0/gtk.css
):
.window-frame, .window-frame:backdrop { box-shadow: 0 0 0 black; border-style: none; margin: 0; border-radius: 0; } .titlebar { border-radius: 0; }
(source: Bspwm forum thread)
Problemas com aplicações java
Se você tiver problemas com o aplicações Java, tal como a janela não está redimensionando ou os menus fecham imediatamente após o clique, consulte Java (Português)#Aplicações sem redimensionamento com o WM, menus fechando imediatamente.
Problemas com atalhos de teclado usando fish
Se Você usa fish, descobrirá que não é possível alternar as áreas de trabalho. Isso ocorre porque o uso do caractere ^ pelo bspc é incompatível com o fish. Você pode consertar isso explicitamente dizendo ao sxhkd para usar o bash para executar comandos:
$ set -U SXHKD_SHELL /usr/bin/bash
Alternativamente, o caractere ^ pode ser escapado com uma barra invertida no seu arquivo sxhkdrc.
Mensagens de erro "Não foi possível pegar a chave 43 com modfield 68" no início
Se já tentou usar a mesma chave por duas vezes ou também o sxhkd. Verifique o bspwmrc, ~/.profile
ou ~/.bash_profile
e certifique-se que o sxhkd não está sendo iniciado mais de uma vez.
Veja também
- Mailing List: bspwm at librelist.com.
-
#bspwm
- IRC channel at irc.freenode.net - https://bbs.archlinux.org/viewtopic.php?id=149444 - Arch BBS thread
- https://github.com/baskerville/bspwm - GitHub project
- https://github.com/windelicato/dotfiles/wiki/bspwm-for-dummies - earsplit's "bspwm for dummies"