Como eu uso um segundo teclado para 'macros' no Arch + Hyprland
Olá, pessoal.
Recentemente, eu comecei a fazer lives na Twitch e senti a necessidade de ter atalhos fáceis para mudar as cenas no OBS.
E para isso, eu acabei usando um segundo teclado onde eu posso configurar qualquer tecla para executar ações específicas no meu Linux. Eu achei que o setup ficou bastante interessante, por isso estou compartilhando aqui também.
Eu fiz um vídeo sobre isso, aqui está o link, e, em seguida, o tutorial em forma de texto (que também pode ser acessado neste gist):
Tutorial
Este tutorial ensina como mapear algumas teclas do seu segundo teclado para as teclas F13 até F24, e usá-las para executar comandos no OBS Studio.
1. Instalando o kmonad
Como eu uso arch linux, a instalação é bem fácil com o yay: yay -S kmonad. Se você usa outra distro, procure no README do kmonad como fazer a instalação: https://github.com/kmonad/kmonad
2. Criando arquivo do kmonad
Crie um arquivo do kmonad:
nvim ~/.config/kmonad/macropad.kbd
(defcfg
;; 1. Input: Use the path you found in Step 1
input (device-file "/dev/input/by-id/usb-Microsoft_Microsoft®_2.4GHz_Transceiver_v8.0-event-kbd")
;; 2. Output: Create a virtual keyboard named "OBS_Macropad"
output (uinput-sink "OBS_Macropad")
;; 3. Fallthrough: Set to false so unmapped keys do NOTHING
fallthrough false
)
(defsrc
;; Define the physical keys you want to use (e.g., the number row)
1 2 3 4
q w e r
a s d f
)
(deflayer obs_layer
;; Map them to virtual function keys or complex combos
f13 f14 f15 f16
f17 f18 f19 f20
f21 f22 f23 f24
)
Na linha 3, altere para o ID do seu teclado. Para obter os IDs:
ls /dev/input/by-id/
Geralmente deve terminar com o termo kbd. Se não encontrar, desconecte o teclado e rode novamente o comando, o ID que estiver faltando provavelmente deve ser o seu teclado.
O caminho na linha 3 deve ser absoluto.
No bloco defsrc, defina quais teclas você quer mapear.
3. Rode o kmonad
Salve o arquivo e execute o kmonad, passando seu arquivo como argumento:
sudo kmonad ~/.config/kmonad/macropad.kbd
4. Teste
Para saber se o mapeamento funcionou, vamos usar o wev. O wev mostra os eventos no wayland. Rode wev no terminal e foque na janela que abrir. Digite qualquer tecla para ver os eventos.
Quando apertas as teclas configuradas no kmonad (no meu caso, 1234qwerasdf), o wev vai mostrar algo como:
[ 16: wl_keyboard] key: serial: 18459; time: 12915927; key: 191; state: 1 (pressed)
sym: XF86Tools (269025153), utf8: ''
[ 16: wl_keyboard] key: serial: 18460; time: 12916111; key: 191; state: 0 (released)
sym: XF86Tools (269025153), utf8: ''
[ 16: wl_keyboard] key: serial: 18461; time: 12917143; key: 192; state: 1 (pressed)
sym: XF86Launch5 (269025093), utf8: ''
[ 16: wl_keyboard] key: serial: 18462; time: 12917303; key: 192; state: 0 (released)
sym: XF86Launch5 (269025093), utf8: ''
[ 16: wl_keyboard] key: serial: 18463; time: 12917631; key: 193; state: 1 (pressed)
sym: XF86Launch6 (269025094), utf8: ''
[ 16: wl_keyboard] key: serial: 18464; time: 12917799; key: 193; state: 0 (released)
sym: XF86Launch6 (269025094), utf8: ''
[ 16: wl_keyboard] key: serial: 18465; time: 12918087; key: 194; state: 1 (pressed)
sym: XF86Launch7 (269025095), utf8: ''
[ 16: wl_keyboard] key: serial: 18466; time: 12918223; key: 194; state: 0 (released)
sym: XF86Launch7 (269025095), utf8: ''
Note que o símbolo (sym) que o wev mostra não é exatamente F13, F14, etc., e sim XF86Tools, XF86Launch5, e assim por diante. Isso porque no linux, o F13 é atribuido a este símbolo. Porém para facilitar, vamos usar os keycodes, do 191 até o 202 (que o wev também mostra, no key.
5. Instalando o obs-cmd
Em vez de criar atalhos com F13 a F24 dentro do OBS, vamos controlá-lo via websocket com o obs-cmd, assim a janela do OBS não precisa estar focada para o atalho funcionar.
Como eu uso o arch linux, eu posso instalar com o yay -S obs-cmd. Caso use outra distro, verifique a documentação.
6. Testando o obs-cmd
Antes de criar os atalhos, vamos testar o obs-cmd no terminal. Para isso copie a senha do websocket do OBS:
Tools > WebSocket Server Settings > Server Password
E substitua no comando abaixo:
obs-cmd --websocket obsws://localhost:4455/<sua-senha> scene switch "<nome da sua cena>"
Substitua também o pelo nome de uma de suas cenas no OBS (ou veja o help do obs-cmd para testar outros comandos).
7. Crie binds no hyprland
No meu caso, uso o ML4W, então minhas binds ficam em ~/.config/hypr/conf/keybindings/default.conf. Procure onde fica o arquivo de configuração do seu hyprland.
As minhas binds estão assim:
bind = , code:191, exec, obs-cmd --websocket obsws://localhost:4455/2fpcbuTxHWkq5s4A scene switch "screen (1)" # F13
bind = , code:192, exec, obs-cmd --websocket obsws://localhost:4455/2fpcbuTxHWkq5s4A scene switch "meeting (2)" # F14
bind = , code:193, exec, obs-cmd --websocket obsws://localhost:4455/2fpcbuTxHWkq5s4A scene switch "behind (3)" # F15
bind = , code:194, exec, obs-cmd --websocket obsws://localhost:4455/2fpcbuTxHWkq5s4A scene switch "cam (4)" # F16
# bind = , code:195, exec, obs-cmd --websocket obsws://localhost:4455/2fpcbuTxHWkq5s4A scene switch "meeting (w)" # F17
bind = , code:196, exec, obs-cmd --websocket obsws://localhost:4455/2fpcbuTxHWkq5s4A scene switch "meeting (w)" # F18
# bind = , code:197, exec, obs-cmd --websocket obsws://localhost:4455/2fpcbuTxHWkq5s4A scene switch "meeting (w)" # F19
# bind = , code:198, exec, obs-cmd --websocket obsws://localhost:4455/2fpcbuTxHWkq5s4A scene switch "meeting (w)" # F20
# bind = , code:199, exec, obs-cmd --websocket obsws://localhost:4455/2fpcbuTxHWkq5s4A scene switch "meeting (w)" # F21
# bind = , code:200, exec, obs-cmd --websocket obsws://localhost:4455/2fpcbuTxHWkq5s4A scene switch "meeting (w)" # F22
# bind = , code:201, exec, obs-cmd --websocket obsws://localhost:4455/2fpcbuTxHWkq5s4A scene switch "meeting (w)" # F23
# bind = , code:202, exec, obs-cmd --websocket obsws://localhost:4455/2fpcbuTxHWkq5s4A scene switch "meeting (w)" # F24
Customize de acordo com suas cenas ou comandos que quer executar no OBS.
8. Crie um serviço do systemd para iniciar o kmonad automaticamente
Para não precisar rodar o kmonad manualmente toda vez que quiser usar suas macros, crie um serviço do systemd. Antes, gosto de mover o arquivo do kmonado para o /etc/kmonad:
mkdir -p ~/.config/kmonad
nvim ~/.config/kmonad/macropad.kbd
Crie o arquivo sudo nvim /etc/systemd/system/kmonad-macropad.service com o conteúdo:
[Unit]
Description=KMonad for OBS Macropad
# Wait for the input subsystem to be ready
After=network.target
[Service]
Type=simple
# REPLACE '/usr/bin/kmonad' if yours is different!
ExecStart=/usr/bin/kmonad /etc/kmonad/macropad.kbd
# Restart automatically if it crashes or if keyboard is replugged
Restart=always
RestartSec=3
# High priority to ensure no input lag
Nice=-20
[Install]
WantedBy=multi-user.target
Altere o caminho do executável do kmonad e do seu arquivo na linha ExecStart=/usr/bin/kmonad /etc/kmonad/macropad.kbd conforme o necessário.
Agora, recarrege, habilite e inicie o serviço:
systemctl daemon-reload
systemctl enable kmonad-macropad.service
systemctl start kmonad-macropad.service
systemctl status kmonad-macropad.service
Pronto
Aproveite seu macropad!