segunda-feira, 13 de agosto de 2007

Openbox: Estendendo seu uso

Como prometi no último artigo publicado neste blog, este será dedicado a umas pequenas explorações nos arquivos de configuração do Openbox 3.4.4, o qual uso no presente momento. Praticamente todos os gerenciadores de janelas modernos têm suporte para as chamadas keys, ou seja, atalhos configuráveis (ou não) de teclado, para executar diversas aplicações. Principalmente nos WM minimalistas como o Openbox, Fluxbox (e acredito que no Blackbox também - nunca o usei mas acho razoável pensar que sim), este é um diferencial já que não se tem um painel para diversas aplicações, mas sim um menu editável e as ditas "keys". Com a experiência de muitos anos usando-as com o Fluxbox, implementei um acerto no Open que me permite chamar um terminal, pressionando apenas um botão, ou desligar completamente o computador, simplesmente apertando o botão "power", existente em qualquer teclado moderno. Para essa configuração, precisaremos de conhecimentos básicos de edição do rc.xml, que é o arquivo principal de configuração do Openbox e do xmodmap, um pequeno programa provavelmente provido pela própria instalação do X.

O arquivo rc.xml, cujo modelo encontra-se em /etc/xdg/openbox/ em uma instalação padrão do Openbox no Arch Linux, como já dito, pode configurar tipos de fontes do menu, do displayer de desktops, o número e nomes destes, bem como diversas outras configurações, por isso recomendo a sua leitura atenta. Desde já advirto aqueles que não estão acostumados que será uma leitura árdua no início, mas depois de um certo tempo analisando os padrões, tudo fica muito claro, mesmo porque há certas seções, iniciadas com "!", não operativas, isto é, comentadas, que servem justamente para dar dicas para o editor do arquivo. Se abertas em um editor gráfico como o gedit, ficarão destacadas com outras cores, provavelmente a azul. As seções do rc.xml têm nomes, as quais também estão comentados pelo procedimento mencionado. Para este estudo, importa-nos a seção chamada "Keybindings for running applications", ou em português claro, numa tradução livre, "atalhos de teclado para executar aplicações". Alcançando-se esta seção do rc.xml, verifica-se que uma entrada normal do teclado apresenta-se da forma abaixo:

<keybind key="W-e">
<action name="Execute">
<startupnotify>
<enabled>false</enabled>
<name>gmrun</name>
</startupnotify>
<execute>gmrun</execute>
</action>

A primeira linha define a "key" que devemos configurar, sendo que "W" é aquela tecla windows do teclado e "e" é a letra "e" do teclado. Poderia ser "s" de shift, "A", de alt, "Print", F1 a F12 e quaisquer de suas combinações. Por aí o leitor já começa a perceber a versatilidade das "keys". Cada combinação acertada pelo usuário pode chamar qualquer programa que o usuário pode executar numa máquina Linux. Assim, o rc.xml é o arquivo de "keys" do Openbox, como o "keys" é o do Fluxbox. Na "key" do exemplo, quando eu pressiono a tecla windows em conjunto com a letra "e", abre-se um pequeno programa que eu tenho instalado no meu desktop, o gmrun, que serve para rodar aplicativos. É interessante, salva as últimas entradas e é bastante leve. Segue um Screenshot para ilustrar:


Ocorre que os teclados abnt-2 como o que eu uso em meu desktop apenas tem teclas com 12 funções (F1 a F12) e eu ainda tenho teclas especiais como "sleep", "wake up" e "power", absolutamente inúteis na configuração padrão do Openbox. Eu pretendia estender a usabilidade do Openbox como antes, com o Fluxbox, então fiz o seguinte:

Primeiramente, precisava conhecer quais os "keycodes", isto é, os códigos de tecla, valores das teclas que o sistema atribuía a cada uma delas. Meu objetivo, obviamente, era, depois de conhecidos, atribuir-lhe funções, para depois usá-las em meu rc.xml. Para tanto, usei um programa há muito conhecido por mim, chamado "xev", também provido pela instalação do X e, assim como o "xwininfo", uma aplicação pra lá de matadora, mas que infelizmente não é bem conhecida da maioria dos usuários novos. Abri um terminal e simplesmente digitei xev e teclei enter. Automaticamente abriu-se uma espécie de pager que "descreve", no terminal aberto, tudo o que você pressiona, seja no mouse, seja no teclado, tornando-se que se torna a saída do comando xev. Na verdade, hoje tenho uma "key" que abre o xev automaticamente, como você podem verificar no meu menu do Openbox. Com o xev, descobri que a tecla "sleep" tinha o keycode 223, a "wake up", tinha o 227, e a "power", o 222. De posse dessas informações criei um arquivo chamado .xmodmap com o seguinte conteúdo:

keycode 222 = F15
keycode 223 = F13

keycode 227 = F14


Eu tinha começado a atribuir valores, funções para as keycodes que tinha encontrado. Contudo, é preciso que o sistema reconheça o arquivo .xmodmap a cada sessão nova
do X e como faria isso? Qual o arquivo responsável por executar programas automaticamente antes ou após a inicialização do Openbox "puro" (fora de ambientes de desktops)?? Acertou!! Trata-se do autostart.sh, existente como modelo também em /etc/xdg/openbox ou no seu home, em ~/.config/openbox/. Ali, eu inseri uma entrada determinando que o sistema rodasse a aplicação xmodmap, responsável por atribuir valores ao teclado, apontando para o arquivo que criei, o .xmodmap. Minha última linha do arquivo ~/.config/openbox/autostart.sh ficou mais ou menos assim:

(xmodmap ~/.xmodmap && nitrogen --restore && sleep 4 && xset m 30/10 4) &

Pronto, agora, com o xev, eu já podia ver que o sistema atribuía as funções F15, F13 e F14 que eu determinara, como eu desejava. Agora faltava o último passo, fazer com que o Openbox executasse aplicações ou comandos quando eu as pressionasse. Editei então o rc.xml de modo a fazer com que, quando F13 fosse pressionada, o sistema executasse o "xterm" e quando fosse pressionada F15 (o botão power), o sistema fosse completamente desligado com um "shutdown -h now", de forma bastante rápida e conveniente. Com isso, estendi a funcionalidade do Openbox e aumentei sua usabilidade, como era a minha intenção desde o início. O usuário pode verificar que as combinações e usos dessa funcionalidade são praticamente infinitos e tornam o uso do Openbox ainda mais interessante. Minhas entradas no rc.xml ficaram assim:

<keybind key="F15">
<action name="Execute">
<startupnotify>
<enabled>false</enabled>
<name>Shutdown</name>
</startupnotify>
<execute>sudo shutdown -h now</execute>
</action>
</keybind>
<keybind key="F13">
<action name="Execute">
<startupnotify>
<enabled>false</enabled>
<name>Terminal</name>
</startupnotify>
<execute>"xterm"</execute>
</action>
</keybind>

Espero que este pequeno artigo contribua para aguçar a curiosidade dos leitores que estejam começando a usar o Openbox e possam ajudá-los a tornar seu desktop mais perfeitamente adaptado às suas necessidades. Por fim, para dar um toque final, inseri a seguinte linha no arquivo .Xdefaults, definindo assim meu tema de cursor:


Xcursor.theme: PolarCursorTheme

O Xdefaults serve como um aglomerador de configurações de diversos aplicativos que rodam no X e suas entradas podem ser estudadas lendo-se o manual de cada aplicação, v.g. man xterm, num terminal, geralmente na seção "Resources". Portanto, caros leitores, mãos à obra e boa brincadeira!! Até a próxima!! ;)


Registro aqui um agradecimento especial ao HugLeo do #ubuntu-br, que meu deu uma força com essa postagem, já que desde a primeira não conseguia postar código xml. Agora, como podem ver, já consigo!! :)