Dicas para usar Qtile com mais acessibilidade
Eu acredito que a personalização de um ambiente de acordo com as necessidades de cada um é algo muito poderoso para facilitar a realização de tarefas e elevar a qualidade de vida das pessoas. Por isso, vez ou outra procuro algumas coisas diferentes para encaixar no meu dia a dia.
Qtile é um gerenciador de janelas leve e bastante customizável que pode ser configurado escrevendo módulos Python localizados em ~/.config/qtile/. Esse WM me atraiu por ser escrito em Python, confesso, e as possibilidades de personalização foram a cereja no bolo para que eu decidisse instalá-lo no meu sistema e descobrir se funcionaria para mim.
As instruções básicas de instalação estão na Arch Wiki e no site do projeto, então não vou tratar disso aqui. Quero compartilhar algumas pequenas customizações que fiz até o momento, talvez isso seja útil para mais alguém.
O básico
Vários layouts estão disponíveis por padrão, mas optei por utilizar o layout Max devido a sua simplicidade. Os outros modelos também são muito interessantes e é possível escolher mais de um fazendo a alternância entre eles com um atalho de teclas. Como eu não preciso de tudo isso, o mais simples me atende perfeitamente.
O Qtile possui uma barra que pode receber widgets, e podemos criar os nossos próprios para fazer o que quisermos. Infelizmente nada disso é acessível ao leitor de telas, então vou deixar essa parte de lado por agora.
Na configuração padrão, ao pressionar Super+R abre-se um lançador que nos permite digitar um comando e em seguida pressionar ENTER para fazer a execução. Ele também não é acessível ao leitor de telas, mas para aqueles de nós que conseguem digitar no teclado sem um retorno auditivo, pode-se utilizá-lo para coisas simples como reiniciar o Orca.
Fiz a substituição desse diálogo de execução pelo Gmrun, um lançador de aplicativos leve e acessível que me permite criar alguns atalhos rápidos, e isso está funcionando muito bem para mim.
Sons de notificação
Pensando em maneiras de melhorar a minha percepção no ambiente, escrevi um pequeno módulo que se conecta ao libcanberra e fornece uma função que reproduz um efeito sonoro, de acordo com o tema escolhido.
import gi
gi.require_version('GSound', '1.0')
from gi.repository import GSound
_context = GSound.Context()
_context.init()
_context.set_attributes(
{
GSound.ATTR_CANBERRA_XDG_THEME_NAME: 'Qtile',
GSound.ATTR_APPLICATION_NAME: 'Qtile Window Manager',
GSound.ATTR_APPLICATION_ID: 'org.qtile',
}
)
def play_sound(event_id: str, event_description: str) -> None:
"""Play a notification sound."""
_context.play_simple(
{
GSound.ATTR_EVENT_ID: event_id,
GSound.ATTR_EVENT_DESCRIPTION: event_description,
}
)No trecho acima, o tema sonoro usado se chama Qtile. Esse é um tema que eu criei para armazenar os meus arquivos de som preferidos, mas pode-se usar qualquer um que esteja instalado no sistema, como o Yaru.
Com isso, é possível disparar os sons onde desejar, como no início ou no fim da sessão, ao alternar entre grupos, abrir e fechar janelas, etc. No exemplo abaixo, ocorre a reprodução do áudio sempre que acesso um grupo que não tem janelas.
@hook.subscribe.setgroup
def switch_group():
if not qtile.current_group.windows:
play_sound(
event_id='desktop-switch',
event_description='Switched to an empty group',
)Graças a esse esquema, posso ter uma percepção bem rápida de que o grupo recém acessado está vazio. O negócio aqui é usar a criatividade para experimentar e descobrir o que funciona melhor para cada um.
Podemos obter as informações necessárias para criar o nosso próprio tema sonoro lendo sobre isso aqui e aqui. Também tem material a respeito das propriedades canberra aqui.
Orca mudo ao reiniciar
Coloquei o leitor de telas para ser carregado no arquivo .xinitrc e isso pareceu funcionar bem logo de cara, mas me enganei. Quando encerrei o Orca e tentei iniciá-lo novamente, ele ficou mudo, e isso também aconteceu todas as vezes em que tentei reiniciá-lo.
Rodei um kill para matar o processo do leitor e ele parou de falar, como esperado. Ao abrir outro console com CTRL+ALT+F3, me autenticar como root e listar os processos, ele apareceu ainda em execução. Até agora não sei o motivo, mas não consegui matar esse processo de maneira alguma e fui obrigado a encerrar o Qtile para poder voltar com o Orca falando novamente.
Consegui fazer isso funcionar direito mudando a maneira como o leitor de telas é chamado na inicialização do WM, usando o hook startup_once.
@hook.subscribe.startup_once
def autostart():
subprocess.Popen('orca &', shell=True)Tentei usar outras variações para a execução de subprocessos Python como passar uma lista e descartar o argumento shell, mas sempre caí no problema do processo imortal descrito acima. Também coloquei o Firefox para iniciar automaticamente, no entanto, não recebi esse comportamento estranho, ele funcionou normalmente.
No fim de tudo, passei a fazer esse carregamento da maneira descrita na Arch Wiki. É só criar um shell script contendo os programas que devem ser inicializados automaticamente, e chamá-lo a partir do Qtile, o Orca se comporta bem com isso.
Conclusão
Existem muitas outras coisas para se configurar ou até mesmo para se criar nesse WM, os atalhos de tecla estão deixando tudo mais fácil e percebi que não tenho mais usado o GNOME Shell, embora ele ainda esteja instalado e algumas aplicações como Gedit e GNOME Terminal continuem sendo usadas por mim, mas dentro do Qtile.
A alternância entre janelas abertas nunca foi tão rápida quanto está sendo agora, e me acostumei a usar e abusar dos espaços de trabalho disponíveis.
Se você estiver disposto a tentar, vá em frente. Esse não é o tipo de coisa que funciona com todo mundo, mas penso que vale a pena passar pela experiência e quem sabe, descobrir que as coisas podem ser mais fáceis e divertidas.
Bora hackear?