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. O bspwm tem suporte a vérios monitores e é configurado e controlado por meio de mensagens. Há suporte parcial a EWMH.
Instalação
Instale bspwm, ou bspwm-gitAUR versão de desenvolvimento.
Iniciando
Execute bspwm
usando xinit.
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/
.
Copie bspwmrc
de lá para ~/.config/bspwm/
e sxhkdrc
para ~/.config/sxhkd/
.
Esses dois arquivos são onde você vai definir as configurações e associações de teclas do wm, respectivamente.
Veja os manuais bspwm(1) e sxhkd(1) para a documentação detalhada.
Nota para múltiplos monitores
O exemplo do bspwmrc configura dez áreas de trabalho para um só monitor:
bspc monitor -d I II III IV V VI VII VIII IX X
Você vai precisar alterar essa linha ou adicionar um para cada monitor, similar a isso:
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
Você pode usar xrandr -q
ou bspc query -M
para saber os nomes dos monitores.
O número total de áreas 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, o que requer o pacote xorg-xprop.
Painéis
Usando lemonbar
Um exemplo de painel para lemonbar-gitAUR é fornecido na página de exemplos no GitHub. Você também pode encontrar mais exemplos na página wiki lemonbar. O painel será executado adicionando panel &
na sua bspwmrc. Verifique os optdepends no pacote bspwm por dependências que pode, ser necessárias.
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ó verificar se já está invocado e redirecionado para $PANEL_FIFO
:
while true; do echo "S" "$(panel_volume) $(panel_clock)" > "$PANEL_FIFO" sleep 1s done &
Usando yabar
O uso do painel de exemplo usando lemonbar requer que você defina seu ambiente (.profile) e verifique se os scripts do painel estão no seu caminho. O painel mais fácil de configurar é o yabarAUR[link quebrado: package not found], que possui apenas um arquivo de configuração.
Usando polybar
Polybar pode ser usada adicionando polybar exemplo &
ao seu arquivo de configuração bspwmrc, sendo example
o nome da barra.
Scratchpad
Usando pid
Você pode emular um terminal suspenso (como o recurso de rascunho do i3 se você 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 &
Essa opção sticky
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
Usando nome da classe
Neste exemplo, vamos usar termite com um nome de classe personalizado como nosso terminal suspenso. Não precisa ser termite.
Primeiro, crie um arquivo no seu caminho com o seguinte conteúdo e torne-o executável. Neste exemplo, vamos chamá-lo de scratchpad.sh
#!/usr/bin/bash if [ -z $1 ]; then echo "Usage: $0 <name of hidden scratchpad window>" exit 1 fi pids=$(xdotool search --class ${1}) for pid in $pids; do echo "Toggle $pid" bspc node $pid --flag hidden -f done
Então, adicione isso à sua configuração do bspwm.
... bspc rule -a dropdown sticky=on state=floating hidden=on termite --class dropdown -e "zsh -i" & ...
Para alternar a janela, é necessária uma regra personalizada no sxhkd. Dê como parâmetro o nome da classe personalizada.
style="background: inherit; color: inherit; vertical-align: middle; text-align: center; "| super + u scratchpad.sh dropdown
Outro
Para um scratchpad que possa usar qualquer tipo de janela sem regras predefinidas, consulte [1]
Para um script de scratchpad mais sofisticado que tenha suporte a muitos terminais prontos para usar e tenha opções 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.
Coloque este script em algum lugar em seu $PATH
e chame-o no arquivo .xinitrc
ou similar (com um & no final):
#!/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
(fonte)
Teclado
Bspwm não lida com qualquer entrada de teclado e, em vez disso, fornece o programa bspc como sua interface.
Para atalhos de teclado, você terá que configurar um serviço de hotkey como sxhkd (sxhkd-gitAUR para a versão de desenvolvimento).
Solução de problemas
Tela em branco e atalhos de teclado não funcionam
- Certifique-se de estar iniciando o sxhkd (em segundo plano, pois bloquear o console).
- Certifique-se de que
~/.config/bspwm/bspwmrc
está executável.
Temas de cursor funcionam no desktop
Veja Temas de cursor#Mude o cursor padrão com forma de X
Caixa de janela maior que o aplicativo
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; }
(fonte: Tópico sobre Bspwm no fórum)
Problemas com aplicativos 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)#Janela cinza, 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.
Problemas de desempenho usando fish
sxhkd usa o shell definido na variável de ambiente SHELL para executar comandos. fish pode ter um longo tempo de inicialização devido a arquivos de configuração grandes ou configurados incorretamente; portanto, todos os comandos sxhkd podem levar muito mais tempo para serem executados do que com outros shells. Para corrigir isso sem alterar seu SHELL padrão, você pode dizer ao sxhkd para usar explicitamente o bash ou outro shell mais rápido para executar comandos (por exemplo, sh):
$ set -U SXHKD_SHELL sh
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.
Menu de contexto do Firefox seleciona automaticamente a primeira opção no clique de botão direito
Adicione a seguinte linha ao arquivo userChrome.css
do perfil do Firefox:
#contentAreaContextMenu{ margin: 5px 0 0 5px }
O arquivo deve estar localizado em ~/.mozilla/firefox/alguma-coisa.default/chrome/
(ele precisará ser criado se você ainda não tiver um). Além disso, no Firefox, você terá que acessar a página about:config
e ativar a opção toolkit.legacyUserProfileCustomizations.stylesheets
; caso contrário, o Firefox ignorará o arquivo userChrome.css.
Veja também
- Lista de discussão: bspwm at librelist.com.
-
#bspwm
- Canal IRC no irc.libera.chat - https://bbs.archlinux.org/viewtopic.php?id=149444 - Tópico no fórum do Arch
- https://github.com/baskerville/bspwm - no Projeto GitHub
- https://github.com/windelicato/dotfiles/wiki/bspwm-for-dummies - earsplit's "bspwm for dummies"