- Published on
dwm em uma casca de noz
- Authors
- Name
- Pedro Martins Pereira
- @AbstracaoL
Introdução
O absoluto básico
O dwm é um gerenciador de janelas dinâmico escrito em C para o display server Xorg, sendo portanto compatível com a maior parte dos sistemas Unix, como a maioria das distros Linux e BSD. Caso você não seja familiar com gerenciadores de janelas refira-se a este artigo. Seu nome é um acrónimo para Dynamic Window Manager.
Suckless software that sucks less
O dwm foi escrito pelos desenvolvedores do grupo suckless. Sua filosofia de design consiste em escrever código com ênfase em simplicidade, clareza e frugalidade. Além disso eles se concentram em usuários avançados, argumentando que o software usual, proprietário ou código aberto enfatiza em demasia usuários leigos. Como discutido no artigo, isso é particularmente verdadeiro para interfaces como ambientes gráficos.
Instalação
Em primeiro lugar, precisaremos dos seguintes pacotes:
xorg-server
xorg-xinit
xorg-xsetroot
wget
Além disso temos os pacotes recomendados:
xorg-xrandr
nitrogen
picom
Copiamos o nosso arquivo xinit para o nosso diretório home:
cp /etc/X11/xinit/xinitrc .xinitrc
Editamos o nosso xinitrc deixando seu conteúdo como:
for f in /etc/X11/xinit/xinitrc.d/*; do
[ -x "$f" ] && . "$f"
done
unset f
fi
#defina o layout do teclado
setxkbmap br-abnt2 &
#resolução e dois monitores
xrandr --auto --output HDMI-1-0 --mode 1920x1080 --right-of eDP1
#compositor
picom -f &
#papel de parede
nitrogen --restore &
#executar dwm
exec dwm
O objetivo disso é definir o layout do teclado, renderizar a quantidade e resolução correta de telas, ativar o compositor e renderizar o papel de parede sem a necessidade de criar um shell script de auto-start, mas o único passo obrigatório para o funcionamento do gerenciador é o "exec dwm".
Para baixar o dwm, utilizamos o comando:
wget https://dl.suckless.org/dwm/dwm-6.2.tar.gz
Listamos o conteúdo da pasta onde baixamos o argivo com o comando ls e podemos descomprimí-lo com o comando:
tar -xzvf dwm-6.2.tar.gz
Ao listarmos os arquivos uma vez mais, veremos o diretório descompactado dwm-6.2. Navegamos para dentro do diretório com:
cd dwm-6.2
Para instalar, utilizamos o comando:
sudo make clean install
Podemos utilizar qualquer terminal, entretanto o terminal recomendado para ser utilizado com o dwm é o ST ou Simple Terminal (terminal simples) do suckless. Vou cobrir aqui também sua instalação:
cd ..
wget https://dl.suckless.org/st/st-0.8.3.tar.gz
descomrpimindo:
tar -xzvf st-0.8.3.tar.gz
em seguida:
cd st-0.8.3
Instalamos com:
sudo make clean install
Através do comando
startx
Ou então do display manager da sua escolha, já podemos acessar o dwm.
Vamos instalar agora o dmenu, que é um software, também suckless, para executar programas com facilidade, sem a necessidade de ícones:
wget https>//dl.suckless.org/tools/dmenu-4.9.tar.gz
descomrpimindo e navegando para a pasta
tar -xzvf dmenu-4.9.tar.gz
cd dmenu-4.9
instalando:
sudo make clean install
Primeiros passos
Os primeiros atalhos
Uma vez dentro do dwm, podemos utilizar o atalho padrão alt+shift+return para abrir terminais. Além disso, podemos matar janelas utilizando alt+shift+c. Alt+p abre o dmenu. Você pode consultar as demais configurações padrão no link.
Editando o código fonte e recompilando
Os atalhos padrão do dwm não são os mais confortáveis, especialmente o uso do alt como a tecla modificadora ao invés da tecla fn (windows). Felizmente, o dwm é um gerenciador de janelas que espera que você o modifique. Assim sendo, você tem acesso ao seu código fonte, o qual é pequeno e fácil de editar. Basta navegar até a pasta onde o dwm foi instalado e utilizar o seu editor de texto de preferência, por exemplo:
vim config.h
para trocar a tecla modificadora de alt para fn, por exemplo, basta alterar Mod1Mask em config.h para Mod4Mask:
/* key definitions */
#define MODKEY Mod4Mask
Para aplicar as alterações podemos acessar o local de instalação e mudar as permissões de usuário para nos darmos acesso à pasta com:
sudo chown usuario:usuario endereco
E em seguida executar
make clean install
Em seguida logamos para fora e para dentro do dwm para as mudanças tomarem efeito.
O maior recurso do software suckless: patches
Como a filosofia suckless tem foco em qualidade e minimalidade e tem como público alvo o usuário expert, e não o iniciante, muitos dos recursos que a maior parte das pessoas desejaria no ambiente de trabalho não estão imediatamente disponíveis no dwm. Entretanto, isso é proposital. Esse gerenciador de janelas é extremamente modular e cabe ao usuário acrescentar os recursos que acreditar necessários. Entretanto, não se preocupe, você não precisa ser um mago do C para fazer isso, o dwm é pautado em um sistema de patches!
O que é um patch
Ao instalar o dwm utilizando o método descrito neste artigo temos acesso ao código fonte do software e essa é a idea. Podemos alterar manualmente aquilo que quisermos. Entretanto, há uma série de mudanças ou adição de recursos que são de interesse da comunidade. Dessa forma, foram criados os patches, que nada mais são do que arquivos diff. Pra os não iniciados, diff é uma ferramenta de comparação entre dados que exibe a diferença entre dois arquivos. Ou seja, os patches são disponibilizados no site do time suckless e contém as alterações a serem feitas em arquivos do código fonte.
Aplicando Patches
Em primeiro lugar precisamos obter um patch. O lugar mais fácil, como já delineado é na sessão de patches do site suckless. Em seguida baixamos o arquivo diff para a nossa máquina. Isso pode ser feito utilizando a ferramenta de sua preferência, minha forma favorita de fazê-lo é com o wget. Exemplificando com o patch fullgaps, por exemplo, o qual adiciona espaço entre as janelas faríamos:
wget https://dwm.suckless.org/patches/fullgaps/dwm-fullgaps-6.2.diff
Naturalmente, um passo não obrigatório mas recomendado é fazer um backup do conteúdo dos arquivos a serem modificados. Em seguida, para aplicar o patch, basta movê-lo para dentro da pasta onde o código fonte do dwm está em executar o comando:
patch < dwm-fullgaps-6.2.diff
É claro que para isso precisamos ter o comando patch instalado. Verifique o processo de instalação para cada distribuição, no Arch Linux, por exemplo o comando seria:
sudo pacman -S patch
O patch pode ter sucesso ou falhar. Caso tenha sucesso, basta recompilarmos o dwm através de:
sudo make clean install
Caso falhe, o arquivo diff nada mais é do que uma lista das modificações a serem aplicadas a determinados arquivos. Basta então vermos o relatório do erro que que ficará salvo em um arquivo da forma arquivoQueDeveriaSerAlterado.extensãoDoArquivo.rej e fazermos as alterações manualmente. Em seguida recompilamos como no caso anterior.
Copie minha configuração
Gostou da ideia mas não quer investir o tempo necessário para ter um sistema funcional com dwm, copie minhas configurações.
Ainda que eu recomende fortemente que você tente instalar e configurar o dwm você mesmo, porque o ponto do software é te dar a modularidade e flexibilidade de ter um desktop feito sob medida para as suas necessidades, eu tenho um repositório onde guardo a minha própria build do dwm para utilizar nos meus diversos computadores.
Essa build inclui: Nitrogen para renderizar o papel de parede, picom como compositor, xrandr para dois monitores, network-manager-applet como frontend do network manager, alacritty ou terminator como emulador de terminal, xfce4-notifyd para notificações, polkit para gerar caixas de inserção de senha para controle de privilégios, xfce4-power-manager para exibir a bateria, blueberry para gerenciamento do bluetooth, numlockx para manter o numlock ativado no display manager,volumeicon para facilitar o acesso ao volume, slstatus para exibir informações de calendário, cpu e ram, unclutter para esconder o cursor do mouse automáticamente, xfce4-taskmanager como gerenciador de tarefas, arcolinux-logout-git como tela de logout e wmname setado para LG3D para resolver problemas de reparenting em Java tais quais mostrados aqui.
Com excessão do logout, que exige um repositório especial habilitado através do pacote arcolinux-spices, o que só é possível no Arch, todos os recursos estão disponíveis para todas as distros GNU/Linux.
Faça o download aqui.
Além disso em breve lançarei um shellscript que instalará esse ambiente automaticamente em distribuições baseadas em Arch.
Referências
- https://wiki.archlinux.org/title/Xorg
- https://www.digitalocean.com/community/conceptual_articles/s-o-l-i-d-the-first-five-principles-of-object-oriented-design
- https://www.reddit.com/r/bspwm/comments/267srd/problem_with_intellij_bspwm/