[Tutorial] sxhkd - Atalhos de teclado independentes de DE ou WM

Leitura:

O sxhkd oferece um modo simples de obter atalhos de teclado no X.org, de autoria do mesmo criador do bspwm.

O processo do sxhkd deve ser iniciado (idealmente junto com o DE ou WM), então aguardará eventos de teclado para então executar alguma ação estabelecida se houver algum atalho descrito no arquivo de configuração. Seu arquivo de configuração fica em ~/.config/sxhkd/sxhkdrc.

Cada linha no arquivo de configuração é entendida da seguinte forma:

  • Se a linha inicia com #, é ignorada (marcação de comentário)
  • Se a linha inicia com um ou mais espaços em branco, é entendida como um comando
  • Senão for comentário ou comando, será entendida como descricação de atalho, o nome das teclas são separados por espaço e/ou +.

Antes de iniciar a especificação, busque os nomes das teclas no X.org. Isso pode ser feito através do xev (v. https://wiki.archlinux.org/index.php/Keyboard_input#Identifying_keycodes_in_Xorg):

$ xev | awk -F'[ )]+' '/^KeyPress/ { a[NR+2] } NR in a { printf "%-3s %s\n", $5, $8 }'
110 Home
112 Prior
117 Next
115 End
59  comma
60  period
61  semicolon
49  apostrophe
62  Shift_R
49  quotedbl
34  dead_acute
35  bracketleft
48  dead_tilde
51  bracketright
135 Menu
133 Super_L

Vale também ler o manual do sxhkd.

De posse dos nomes das teclas, a escrita é bastante simples. Segue modelo:

# Abrir terminal
super + Return
    termite

# Abrir explorador de arquivos
super + f
    nemo --geometry=1000x600

# Abrir cliente youtube de terminal
super + y
    termite -e mpsyt

O sxhkd chama o shell para executar os comandos, o que possibilita usar variáveis de ambiente (definidas no profile), além do uso de funcionalidades do shell como o direcionamento de saídas de comandos:

# Abrir navegador de terminal
super + w
    $TERMINAL_CLIENT -e links

# Abir histórico do Clipman
super + F1
    xfce4-popup-clipman 2> /dev/null

Criando um arquivo em ~/.local/bin/ chamado hkreload, e adicionando o caminho ao $PATH no arquivo .profile (export PATH="$PATH:$HOME/.local/bin") é possível criar um atalho para reiniciar o processo, para que alterações na configuração tenham efeito:

# Recarregar sxhkd
super + Escape
    hkdreload

Aqui se abrem diversas possibilidades, pois é possível chamar qualquer shell script com permissão de execução com atalho de teclado, o que abre para scripts com o dmenu.
Criando um arquivo dmenutmuxsession e outro dmenurc em ~/.local/bin/ é possível obter um seletor de sessões do tmux (v. Comunidade Fedora - Tmux):

# Seletor de sessão do Tmux
super + alt + Return
    dmenutmuxsession

Usando algumas sintaxes mais complexas, é possível configurar múltiplos atalhos por entrada:

# Controle de servidor de música
super + {dead_acute,bracketleft,dead_tilde,bracketright}
    mpc {volume -2,volume +2,toggle,stop}
super + alt + {dead_tilde,bracketright}
    mpc {prev,next}

super + {shift,control} + dead_tilde
    mpc seek -0{0:1,1:0}0
super + {shift,control} + bracketright
    mpc seek +0{0:1,1:0}0
super + {shift,control,alt} + dead_acute
    mpc seek -{05,10,30}:00
super + {shift,control,alt} + bracketleft
    mpc seek +{05,10,30}:00

Marcando a lembrança que é independente de DE e de WM, então funcionará no Gnome, no Plasma, no i3, no Openbox ou onde quiser (menos no TTY), bastando iniciar o processo do sxhkd junto com o ambiente gráfico.