Executando verificação de segurança...
5

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):

https://youtu.be/7Xl4pTm66-M


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!

Carregando publicação patrocinada...
1

Meus 2 cents,

Obrigado por compartilhar !

Lembro quando comecei a usar o OBS para gravar videos que este foi um ponto que me incomodou muito, gastei um bom tempo procurando/experimentando alternativas.

Uso um teclado numerico USB/bluetooth para este tipo de acao - eh muito util, e o kmonad eh uma excelente opcao (e barato)

Outras opcoes para decks (via app android):

Saude e Sucesso !