DEV Community

Neni
Neni

Posted on • Updated on

Usando DWM - Dynamic Window Manager

DWM é um tiling window manager, um de gerenciador de janelas, responsável por dispor as aplicações na tela. Ele possui a filosofia suckless, tornando seu código fonte o menor possível, normalmente aumentando o desempenho do programa.

Por que DWM?

  • Pouco consumo de RAM, ótimo para notebooks mais fracos
  • Você no comando, liberdade total de teclas de atalho
  • Poucos recursos opcionais, a enfase no DWM é no MVP de um window manager
  • Disposição de janelas com o conceito de área master, onde torna prevísivel a visualização de novos aplicativos

Dmenu

DWM vem com dmenu, que é um lançador de aplicativos (Super+d).

Funcionamento

DWM trabalha com os conceitos de clientes, área master, tags e modos.

  • Clientes são as janelas das aplicações abertas, como firefox por exemplo.
  • Área master é o local onde novos clientes são enviados (podem ser trocados com Super+Enter), por padrão à esquerda. A cada novo cliente, o antigo é deslocado para a direita, e os que já estão a direita vão para baixo.
+---------------+    +-------+-------+    +-------+-------+    +-------+-------+
|               |    |       |       |    |       |   2   |    |       |   3   |
|               |    |       |       |    |       |       |    |       +-------+
|       1       | -> |   2   |   1   | -> |   3   +-------+ -> |   4   |   2   |
|               |    |       |       |    |       |   1   |    |       +-------+
|               |    |       |       |    |       |       |    |       |   1   |
+---------------+    +-------+-------+    +-------+-------+    +-------+-------+

Enter fullscreen mode Exit fullscreen mode
  • Tags são muito semelhantes a workspaces comuns, onde você como usuário delimita quais aplicações estão abertas. Porém é possível marcar clientes para aparecerem em mais de uma tag simultaneamente - caso queira que o player de musica lhe acompanhe por exemplo.
  • Modos são as disposições das janelas, sendo por padrão 3 - Tiling (padrão), float (janelas flutuantes) e mono (uma janela aparece por vez, podendo acessar outras através de Super+j ou Super+k)

Meu uso comum

  • Abro terminal (Super+Shift+Enter) em full screen ou ao lado de uma aplicação
  • Pesquiso algum programa com dmenu como o firefox por exemplo
  • Pulo de uma janela para outra com Super+j ou Super+k
  • Movo alguma janela para a área master com Super+Enter
  • Troco de tag com Super+NumeroDaTag
  • Fecho janela com Super+Shift+q
  • Desligo o sistema com Super+Shift+s

Instalação

Para instalar basta baixar o código fonte e compilar com o comando sudo make clean install e colocar em seu ~/.xinitrc o trecho exec dwm
obs: Dependendo do seu display manager, responsável por iniciar o desktop, talvez seja necessário configurá-lo. Para o lightdm, basta criar um novo arquivo dwm.desktop como abaixo e colocá-lo em /usr/share/xsession.

[Desktop Entry]
Name=DWM
Comment=DWM
Exec=/home/neni/.xinitrc
Type=Application
Enter fullscreen mode Exit fullscreen mode

Ao fazer isso, antes de logar pode ser escolhido o perfil DWM.

Configuração

Escrevendo no config.h

As configurações mais simples como cores, atalhos, numero e simbolos de tags, bordas de janelas e font padrão é no arquivo config.h. A cada modificação é necessário recompilar o código e reiniciar a sessão.

Patches

DWM vem com o mínimo necessário, porém existem diversas outras features implementadas por outros programadores que podem ser implementadas. Elas são através de patches, que são "colagens" de código.
Como funciona:

  • Pegar arquivo .diff do patch e analisar a diferença do código fonte do implementado
  • Modificar arquivo correspondente apontado na área lida do diff
  • Recompilar o código
  • Reiniciar sessão

Personalizando status bar

É possível modificar a barra de status através do comando:

xsetroot -name "tudo que for colocado aqui | vai atualizar a barra de status"
xsetroot -name "$(echo 'tabém é possivel usar comandos bash')"
Enter fullscreen mode Exit fullscreen mode

Um exemplo de script que atualiza sozinho a barra (para o relógio) é:

online(){
    curl -w %{http_code} --silent -o /dev/null google.com | awk '{if($0=="000") {print "OFFLINE"} else { print "ONLINE"}}'
}

datetime(){
    echo " $(date +%H:%M)"
}

while true; do
    xsetroot -name "$(online) | $(datetime)"
    sleep 5s
done
Enter fullscreen mode Exit fullscreen mode

Para inicializar o script automaticamente ao entrar numa sessão, basta colocar no arquivo ~/.xinitrc.

# mata processo do script se existente
pkill -f ~/dev/scripts/dwm/status.sh

# modifica status
~/dev/scripts/dwm/status.sh&

# inicia dwm
exec dwm
Enter fullscreen mode Exit fullscreen mode

Atualizações desse post

Pretendo atualizar este post com meu tempo de experiência do DWM. Na primeira versão (08/06/2019) possuo por volta de 1 mês de uso com o gerenciador.

2021-09-24

Estou gostando de utilizar a distro instantOS, ele possui um tiling window manager forkado do DWM.

2021-10-21

Não apoio a descrição cringe do DWM:

Because dwm is customized through editing its source code, it's pointless to make binary packages of it. This keeps its userbase small and elitist. No novices asking stupid questions.

O que me fez experimentar o Awesome no Ubuntu, cujo atende todas minhas necessidades de um twm.

Observações

Oldest comments (1)

Collapse
 
voyeg3r profile image
Sérgio Araújo • Edited

Eu consegui um snippet para configurar os atalhos de volume com pulseaudio:
bitbucket.org/sergio/workspace/sni...

Tenho um post em Inglês aqui no dev.to (é recente), quem sabe alguma idéia nova?
dev.to/voyeg3r/i-cannot-leave-tili...