Fluxbox
Introdução
O Fluxbox é um gerenciador de janelas livre escrito em C++ para X Window System baseado no código do BlackBox 0.61. Por ser bastante leve e simples, pode ser uma ótima escolha por questão de desempenho em máquinas com poucos recursos. Além disso pode tornar-se bastante funcional e estético após ser personalizado. Essa personalização pode ser feita diretamente por edição dos seus arquivos de configuração.
Observação: Há uma década escrevi sobre customização do Fluxbox. Para fins de comparação, eis o artigo da época.
Instalação
No Debian e Ubuntu:
# apt-get install fluxbox
No Fedora:
# dnf install fluxbox
Inicialização pela primeira vez
Para iniciá-lo, basta escolher a sessão do fluxbox através do seu gerenciador de login (particularmente prefiro o slim) ou iniciá-lo através do terminal com o comando:
$ startfluxbox
Configuração
Após ser iniciado pela primeira vez, o fluxbox criará na seu home o diretório ~/.fluxbox
que contém os seus arquivos de configuração.
Menu
Geralmente os menus de inicialização são acessados por um botão no painel. Mas no caso do Fluxbox, o menu é acessado ao clicar com o botão direito sobre a área de trabalho:
O arquivo de configuração do menu é: ~/.fluxbox/menu
Por padrão já possui entradas por incluir o arquivo /etc/X11/fluxbox/fluxbox-menu
. Entretanto, farei a adição de uma entrada para algumas aplicações que julguei mais importantes (terminal, gerenciador de arquivos e navegador):
Arquivo original:
$ cat ~/.fluxbox/menu
[begin] (fluxbox)
[include] (/etc/X11/fluxbox/fluxbox-menu)
[end]
Arquivo modificado:
$ vim ~/.fluxbox/menu
[begin] (fluxbox)
[exec] (Terminal) {terminator}
[exec] (Gerenciador de arquivos) {spacefm}
[exec] (Navegador) {firefox}
[separator]
[include] (/etc/X11/fluxbox/fluxbox-menu)
[end]
Caso queira colocar submenus, a sintaxe é a seguinte:
[submenu] (Nome do submenu)
[exec] (Nome do comando) {comando}
[end]
Exemplo:
$ vim ~/.fluxbox/menu
[begin] (fluxbox)
[exec] (Terminal) {terminator}
[exec] (Gerenciador de arquivos) {spacefm}
[exec] (Navegador) {firefox}
[submenu] (Outros)
[exec] (Thunderbird) {thunderbird}
[exec] (Bacula Administration Tool) {/usr/sbin/bat -c /etc/bacula/bat.conf}
[end]
[separator]
[include] (/etc/X11/fluxbox/fluxbox-menu)
[end]
Estilo
O estilo do fluxbox pode ser alterado em: Menu > Styles
Já existem alguns estilos disponíveis mas você pode adicionar outros descompactando arquivos de estilo em ~/.fluxbox/styles
. Você pode encontrar muitos estilos pela internet. Recomendo os seguintes sites:
Devian Art: https://www.deviantart.com
Box Look: https://www.box-look.org
OpenDesktop: https://www.opendesktop.org
Exemplos:
Tema Morte, baixado em https://www.opendesktop.org/p/1016986
$ unzip ~/Downloads/59575-Morte_by_endel.zip -d ~/.fluxbox/styles/
Tema Numix, baixado em https://github.com/spaceille/Numix-for-Fluxbox
$ git clone https://github.com/spaceille/Numix-for-Fluxbox
Cloning into 'Numix-for-Fluxbox'...
remote: Enumerating objects: 50, done.
remote: Total 50 (delta 0), reused 0 (delta 0), pack-reused 50
Receiving objects: 100% (50/50), 1.44 MiB | 2.47 MiB/s, done.
Resolving deltas: 100% (32/32), done.
$ mv Numix-for-Fluxbox/ ~/.fluxbox/styles/
Wallpaper
O Fluxbox possui um utililitário chamado fbsetbg
que é um wrapper (encapsulador) que tenta encontrar um aplicativo de configuração de plano de fundo adequado e, em seguida, tenta definir o papel de parede usando esse aplicativo. Você não precisa configurar o fbsetbg
. Ele apenas usa o primeiro aplicativo que encontrar.
Para verificar qual aplicativo é utilizado:
$ fbsetbg -i
feh is a nice wallpapersetter. You won't have any problems.
Para aplicar um papel de parede:
$ fbsetbg wallpaper.jpg
Opcional: Caso queira uma lista de papéis de parede no seu menu, edite-o adicionando isso:
[submenu] (Wallpapers) {}
[wallpapermenu] (/caminho/para/suas/imagens)
[end]
Para que o último wallpaper seja aplicado no login, modifique o arquivo ~/.fluxbox/overlay
.
Arquivo original:
$ cat ~/.fluxbox/overlay
! The following line will prevent styles from setting the background.
! background: none
Arquivo modificado:
$ vim ~/.fluxbox/overlay
! The following line will prevent styles from setting the background.
background: none
session.screen0.rootCommand: fbsetbg -l
Inicialização automática de aplicações
A inicialização automática de aplicações é tratada pelo arquivo ~/.fluxbox/startup
.
Para mim, foi satisfatório colocar os seguintes softwares: Network-Manager, VolumeIcon e FDpowermon. Instalados por:
# apt install network-manager-gnome volumeicon fdpowermon
Ao adicionar as entradas, não esqueça do “&” ao final. Exemplo:
$ vim ~/.fluxbox/startup
...
# Applications you want to run with fluxbox.
# MAKE SURE THAT APPS THAT KEEP RUNNING HAVE AN ''&'' AT THE END.
#
# unclutter -idle 2 &
# wmnd &
# wmsmixer -w &
# idesk &
nm-applet &
volumeicon &
fdpowermon &
...
Aparência das aplicações GTK
Se a ideia de ter escolhido o Fluxbox foi por questões de desempenho em máquinas pouco potentes, talvez seja interessante escolher aplicações realmente leves para que estes poucos recursos sejam poupados. Seguindo essa linha de pensamento, por exemplo, podemos substituir um gerenciador de arquivos como o Dolphin ou Nautilus (que carregariam muitas dependências respectivamente do Plasma e Gnome), pelo Midnight Commander. Outra opção consiste em escolher aplicações não necessariamente em modo texto, mas também não necessariamente dependentes de ambientes gráficos, como por exemplo, os gerenciadores de arquivos SpaceFM ou PCManFM. Por serem em GTK, geralmente assumem uma aparência por omissão e o Fluxbox não oferece um gerenciador de configurações (até porque este não é o objetivo de um gerenciador de janelas). Isto nos faz recorrer a pequenos utilitários como o gtk-chtheme
, gtk-theme-switch2
ou o lxappearance
, este último por sua vez bem mais completo pois permite a mudança do tema tanto para GTK 2.0 quanto para GTK 3.0, além de permitir também a mudança do tema de ícones e fontes:
# apt install lxappearance
Vale ressaltar que o lxappearance é o gerenciador de configurações de aparência do ambiente gráfico LXDE. Para lançá-lo:
$ lxappearance
Proteção de tela
Não preciso estender o assunto: o xscreensaver é clássico. Aquele modo de exibição XMatrix é muito bacana!
# apt install xscreensaver xscreensaver-data-extra xscreensaver-gl xscreensaver-gl-extra
Para configurá-lo:
$ xscreensaver-demo

Agora basta adicioná-lo na inicialização:
$ vim ~/.fluxbox/startup
...
# Applications you want to run with fluxbox.
# MAKE SURE THAT APPS THAT KEEP RUNNING HAVE AN ''&'' AT THE END.
#
# unclutter -idle 2 &
# wmnd &
# wmsmixer -w &
# idesk &
nm-applet &
volumeicon &
fdpowermon &
xscreensaver -no-splash &
...
Efeitos (Opcional)
Particularmente, não gosto tanto. Mas caso queira janelas com alguns efeitos como sombreamento e fading, podemos adicionar o compton (um gerenciador de composição baseado no xcompmgr-dana que por sua vez foi um fork do xcompmgr) na inicialização:
# apt install compton
$ vim ~/.fluxbox/startup
...
# Applications you want to run with fluxbox.
# MAKE SURE THAT APPS THAT KEEP RUNNING HAVE AN ''&'' AT THE END.
#
# unclutter -idle 2 &
# wmnd &
# wmsmixer -w &
# idesk &
nm-applet &
volumeicon &
fdpowermon &
xscreensaver -no-splash &
compton -cf &
...
Teclas de atalho
É praticamente um consenso que tarefas rotineiras orientadas por teclado são bem mais rápidas do que quando feitas por mouse. O Fluxbox já vem com uma configuração decente por padrão:
$ cat ~/.fluxbox/keys
# click on the desktop to get menus
OnDesktop Mouse1 :HideMenus
OnDesktop Mouse2 :WorkspaceMenu
OnDesktop Mouse3 :RootMenu
# scroll on the desktop to change workspaces
OnDesktop Mouse4 :PrevWorkspace
OnDesktop Mouse5 :NextWorkspace
# scroll on the toolbar to change current window
OnToolbar Mouse4 :PrevWindow {static groups} (iconhidden=no)
OnToolbar Mouse5 :NextWindow {static groups} (iconhidden=no)
# alt + left/right click to move/resize a window
OnWindow Mod1 Mouse1 :MacroCmd {Raise} {Focus} {StartMoving}
OnWindowBorder Move1 :StartMoving
OnWindow Mod1 Mouse3 :MacroCmd {Raise} {Focus} {StartResizing NearestCorner}
OnLeftGrip Move1 :StartResizing bottomleft
OnRightGrip Move1 :StartResizing bottomright
# alt + middle click to lower the window
OnWindow Mod1 Mouse2 :Lower
# control-click a window's titlebar and drag to attach windows
OnTitlebar Control Mouse1 :StartTabbing
# double click on the titlebar to shade
OnTitlebar Double Mouse1 :Shade
# left click on the titlebar to move the window
OnTitlebar Mouse1 :MacroCmd {Raise} {Focus} {ActivateTab}
OnTitlebar Move1 :StartMoving
# middle click on the titlebar to lower
OnTitlebar Mouse2 :Lower
# right click on the titlebar for a menu of options
OnTitlebar Mouse3 :WindowMenu
# alt-tab
Mod1 Tab :NextWindow {groups} (workspace=[current])
Mod1 Shift Tab :PrevWindow {groups} (workspace=[current])
# cycle through tabs in the current window
Mod4 Tab :NextTab
Mod4 Shift Tab :PrevTab
# go to a specific tab in the current window
Mod4 1 :Tab 1
Mod4 2 :Tab 2
Mod4 3 :Tab 3
Mod4 4 :Tab 4
Mod4 5 :Tab 5
Mod4 6 :Tab 6
Mod4 7 :Tab 7
Mod4 8 :Tab 8
Mod4 9 :Tab 9
# open a terminal
Mod1 F1 :Exec x-terminal-emulator
# open a dialog to run programs
Mod1 F2 :Exec fbrun
# volume settings, using common keycodes
# if these don't work, use xev to find out your real keycodes
176 :Exec amixer sset Master,0 1+
174 :Exec amixer sset Master,0 1-
160 :Exec amixer sset Master,0 toggle
# current window commands
Mod1 F4 :Close
Mod1 F5 :Kill
Mod1 F9 :Minimize
Mod1 F10 :Maximize
Mod1 F11 :Fullscreen
# open the window menu
Mod1 space :WindowMenu
# exit fluxbox
Control Mod1 Delete :Exit
# change to previous/next workspace
Control Mod1 Left :PrevWorkspace
Control Mod1 Right :NextWorkspace
# send the current window to previous/next workspace
Mod4 Left :SendToPrevWorkspace
Mod4 Right :SendToNextWorkspace
# send the current window and follow it to previous/next workspace
Control Mod4 Left :TakeToPrevWorkspace
Control Mod4 Right :TakeToNextWorkspace
# change to a specific workspace
Control F1 :Workspace 1
Control F2 :Workspace 2
Control F3 :Workspace 3
Control F4 :Workspace 4
Control F5 :Workspace 5
Control F6 :Workspace 6
Control F7 :Workspace 7
Control F8 :Workspace 8
Control F9 :Workspace 9
Control F10 :Workspace 10
Control F11 :Workspace 11
Control F12 :Workspace 12
# send the current window to a specific workspace
Mod4 F1 :SendToWorkspace 1
Mod4 F2 :SendToWorkspace 2
Mod4 F3 :SendToWorkspace 3
Mod4 F4 :SendToWorkspace 4
Mod4 F5 :SendToWorkspace 5
Mod4 F6 :SendToWorkspace 6
Mod4 F7 :SendToWorkspace 7
Mod4 F8 :SendToWorkspace 8
Mod4 F9 :SendToWorkspace 9
Mod4 F10 :SendToWorkspace 10
Mod4 F11 :SendToWorkspace 11
Mod4 F12 :SendToWorkspace 12
# send the current window and change to a specific workspace
Control Mod4 F1 :TakeToWorkspace 1
Control Mod4 F2 :TakeToWorkspace 2
Control Mod4 F3 :TakeToWorkspace 3
Control Mod4 F4 :TakeToWorkspace 4
Control Mod4 F5 :TakeToWorkspace 5
Control Mod4 F6 :TakeToWorkspace 6
Control Mod4 F7 :TakeToWorkspace 7
Control Mod4 F8 :TakeToWorkspace 8
Control Mod4 F9 :TakeToWorkspace 9
Control Mod4 F10 :TakeToWorkspace 10
Control Mod4 F11 :TakeToWorkspace 11
Control Mod4 F12 :TakeToWorkspace 12
Note que o arquivo consiste em linhas do formato básico:
tecla [modificadores] :'comando' [argumentos ...]
Podemos pegar uma lista de possíveis modificadores através do comando $ xmodmap -pm
. Os mais comuns são:
Shift Control Mod1 Mod4
Onde Mod1 é a tecla Alt e Mod4 é usualmente uma tecla com um logotipo de uma empresa familiar.
Também é possível utilizar o keycode capturado através do utilitário xev
. Exemplo: ao apertar Fn + Scroll para usar a tecla Print, o xev apresentou o keycode 107.
Sabendo disso, as modificações que fiz foram as seguintes:
- Alteração do comportamento do duplo clique na barra de títulos (shade para maximize):
Original:
...
# double click on the titlebar to shade
OnTitlebar Double Mouse1 :Shade
...
Alteração:
...
# double click on the titlebar to maximize
OnTitlebar Double Mouse1 :Maximize
...
- Correção das keycodes das teclas de multimídia (no caso específico do meu notebook):
Original:
...
176 :Exec amixer sset Master,0 1+
174 :Exec amixer sset Master,0 1-
160 :Exec amixer sset Master,0 toggle
...
Alteração:
...
123 :Exec amixer sset Master,0 1+
122 :Exec amixer sset Master,0 1-
121 :Exec amixer sset Master,0 toggle
...
- Alteração das teclas para enviar a janela atual para o próximo/anterior espaço de trabalho (agora com Shift):
Original:
...
# send the current window to previous/next workspace
Mod4 Left :SendToPrevWorkspace
Mod4 Right :SendToNextWorkspace
...
Alteração:
...
# send the current window to previous/next workspace
Shift Mod4 Left :SendToPrevWorkspace
Shift Mod4 Right :SendToNextWorkspace
...
- No fim do arquivo adicionei:
...
# File Manager
Mod4 e :Exec spacefm
# Terminal
Mod4 t :Exec terminator
# Run
Mod4 r :Exec fbrun
# Screenshot
107 :Exec scrot
Mod1 107 :Exec scrot --select
Mod4 107 :Exec scrot --focused
# Show/Hide Desktop
Mod4 d :ToggleCmd {ShowDesktop}
# Tile window to left or right
Mod4 Left :MacroCmd {ResizeTo 50% 100%} {MoveTo 0 0 Left}
Mod4 Right :MacroCmd {ResizeTo 50% 100%} {MoveTo 0 0 Right}
# Maximize and minimize
Mod4 Up :Maximize
Mod4 Down :Minimize
# Menu
Mod4 space :RootMenu
# Xscreensaver lock
Mod4 l :Exec xscreensaver-command -lock
Resultado
Estou bastante satisfeito com o resultado:

Considerações finais
Mesmo após uma década, o Fluxbox ainda é uma excelente escolha por diversos motivos já citados. Porém, infelizmente, no Debian o pacote oferece a versão 1.3.5 e última versão estável é 1.3.7 lançada em 8 de fevereiro de 2015. Encontrei uma thread no fórum sobre o assunto e aparentemente está abandonado. Lembro bem que era um gerenciador de janelas relativamente famoso ao ponto de terem feito um flavor do Ubuntu, o Fluxbuntu, como também edições do Linux Mint. Entretanto, boa parte das distribuições que surgiram foram descontinuadas pouco tempo depois. Como surgiram projetos como o LXDE (e depois o LXQT), o OpenBox tornou-se mais popular e aparentemente o Fluxbox caiu em desuso, principalmente depois do aumento da popularidade de outros gerenciadores como o i3wm, dwm, xmonad, etc. Com tudo isso, o Fluxbox parece ainda despertar interesse pois recentemente surgiram notícias de versões do MX-Linux com Fluxbox, distribuição bastante popular segundo o site Distrowatch (top 1 no momento em que escrevo).
Referências:
Configuração do Fluxbox: https://acrelinux.org/fluxbox-2011/
Documentação: http://fluxbox.org/help/
Thread sobre empacotamento abandonado no Debian: https://forums.debian.net/viewtopic.php?t=143392
Tiling nativo: https://abchk1234.wordpress.com/2015/02/01/native-window-snapping-window-tiling-with-fluxbox-openbox-and-xfwm4-xfce/
Notícia sobre MX-Fluxbox: https://mxlinux.org/blog/mx-21-fluxbox-beta-1-iso-images-for-testing/