bspwm (Português)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Status de tradução: Esse artigo é uma tradução de bspwm. Data da última tradução: 2020-01-25. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglê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, 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
 
Nota: inetutils é necessário para usar o comando hostname.

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