Seria possível tratar dois teclados como dispositivos separados?

linux
#1

Eis aqui uma ideia pessoal, mas como nunca vi isso em lugar nenhum, talvez na nossa comunidade a gente possa pesquisar isso juntos.

Estou com a intenção de criar um “Streamdeck feito em casa”. É a ideia por traz do conceito é relativamente aplicável, usando as teclas da atalho do OBS Studio em conjunto com um software de Macros como o Actiona, a ideia seria, basicamente, usar o teclado numérico do computador para os macros, ou até mesmo um outro teclado inteiro, podendo fazer macros de todos os tipos.

Existem várias formas de fazer isso funcionar, porém, fiquei me perguntando: Existiria a possibilidade de dois teclados serem conectados e serem reconhecidos individualmente?

Explico uma funcionalidade:

Digamos que eu tenha dois teclados, um deles seria só para macros. Quando eu pressionar a letra “F” em um deles, ela é usada normalmente, mas quando eu pressionar “F” no outro teclado, a aplicação vai para “fullscreen”, por exemplo.

Você tem ideia de como identificar os dispositivos individualmente assim? Já viram algo parecido?

Se der certo, a ideia é fazer um vídeo no canal, mostrando os processos, e claro, a galera que ajudar aqui receberá seus devidos créditos

Abraços!

3 Likes
#2

Já vi algo similar onde se pega a plaquinha do teclado e faz as combinações usando solda fazendo um teclado cujas teclas são combinações de teclas, via software eu nunca vi

#3

Então, no Linux você pode ler os dispositivos que usam xinput assim:

xinput -list

Se tiver dois teclados, você pode identificar eles separadamente, como para configurar dois layouts de teclado diferentes, um pra cada usando o setxkbmap, mas ainda assim não me parece ser o suficiente.

#4

Eu teria que ter outro teclado pra testar mas deve ser possível

1 Like
#5

Será que rola ao invés de usar um teclado usar talvez um Joystick?

1 Like
#6

Olha… essa é uma ideia que não tinha me ocorrido… interessante hein.
Mas acho que o formato de um teclado ajudaria no conceito do streamdeck, além de ter mais teclas:


Porém, talvez uma daquelas placas que usam em fliperama talvez desse bom, é uma ideia interessante.

1 Like
#7

Pode ser feito talvez algo assim com Arduino. acho que pode rola tb! YouTube

1 Like
#8

@Dio eu acho que algo assim poderia funcionar:

Primeiro um script pra pegar as teclas digitadas (kbd-shortcutd):

#!/bin/bash

SCRIPT_DIR="$(dirname "$(readlink -f "${0}")")"

function print_help() {
  echo -n Você precisa especificar o id do teclado desejao, 
  echo você pode obter uma lista com os ids dos teclados executando:
  echo
  echo xinput list
  exit 1
}

test $1 && KBD_ID=$1 || print_help

xinput test 9 | while read in ; do
  "$SCRIPT_DIR/kbd-shortcut" $(echo $in | awk '{print $3}') &
done

Depois um script que processa as as teclas (kbd-shortcut):

#!/bin/bash

###############################################################
#                                                             #
#  Nesse script você coloca o código da tecla e o comando a   #
#  ser executado                                              #
#                                                             #
###############################################################
#                                                             #
#  Como fazer:                                                #
#                                                             #
###############################################################
#                                                             #
#  Digite xinput test <id do teclado> e pressione a tecla     #
#  desejada e você terá uma saída parecida com essa:          #
#                                                             #
#  key press   24                                             #
#  key release 24                                             #
#                                                             #
#  O código da tecla é o número, agore é só adicionar         #
#  (ou subistituir os c omandos abaixo) umtexto na seguinte   #
#  forma:                                                     #
#                                                             #
#  [[ $in = "<código da tecla>" ]] &&  comando                #
#                                                             #
#  Por exemplo, toda vez que eu apertar a tecla Q eu quero    #
#  que o leafpad seja aberto:                                 #
#                                                             #
#  [[ $in = "24" ]] && leafpad                                #
#                                                             #
###############################################################

# Exemplos de códigos de tecla do teclado numérico (ABNT2):

[[ $in = "90" ]] &&  comando para o numero 0 (teclado numerico)
[[ $in = "88" ]] &&  comando para o numero 2 (teclado numerico)
[[ $in = "88" ]] &&  comando para o numero 2 (teclado numerico)
[[ $in = "89" ]] &&  comando para o numero 3 (teclado numerico)
[[ $in = "83" ]] &&  comando para o numero 4 (teclado numerico)
[[ $in = "84" ]] &&  comando para o numero 5 (teclado numerico)
[[ $in = "85" ]] &&  comando para o numero 6 (teclado numerico)
[[ $in = "79" ]] &&  comando para o numero 7 (teclado numerico)
[[ $in = "80" ]] &&  comando para o numero 8 (teclado numerico)
[[ $in = "81" ]] &&  comando para o numero 9 (teclado numerico)


Colocando os dois na mesma pasta e executando:

./kbd-shortcut <id>

Teoricamente funcionaria já nque no meu teclado funcionou, mas eu precisaria de um segundo teclado pra testar e fazer algo mais organizado e com interface gráfica mas eu tô sem grana :broken_heart:

#9

Desculpa a gambiarra mas a idéia é só ver se funciona

O Iberê ensinou fazer algo assim com arduino mas ainda sim precisaria de algo pra ler os ids das “teclas”

2 Likes
#10

Então, acho que nesse caso o problema seria realmente fazer com que o outro teclado não fosse reconhecido como um teclado normal.

1 Like
#11

Sim, usando o par de scripts que eu fiz isso teoricamente seria resolvido mas infelizmente não posso testar, se puder testar e dar o feedback (se funciona ou não) eu posso desenvolver uma interface amigável pra eles, porque sem saber se funciona não compensa investir tempo

#12

Fugindo um pouco da pergunta, creio eu que a forma mais interessante de se fazer isso seria usar um teclado com macros e usar as teclas numérias como um stream deck da elgato, e para da um charme mudar as keycaps do teclado, ficaria algo bem bonito e muito útil.

1 Like
#13

A idéia é essa a gente tá tentando descobrir um mecanismo pra fazer isso (reconhecer um teclado de macros)

#14

Essas placa de fliperama geralmente tem uma controladora que agrupa os botões e faz a conexão com o pc pelo usb. Ficaria faltando apenas um software ou um script para pegar esses botões e mapear os atalhos que você precisa ou que conseguisse fazer o OBS enxergar isso e a partir daí mapear a coisa. Dei uma olhada no github e achei isso vê se a ideia acompanha o que você pretende fazer ou se da para começar a partir daí. DIY Arduino Buttonbox — version 1 (eng) — OpenSimHardware

#15

O Streamlabs OBS tem uma app para Android que simula um Stream Deck https://play.google.com/store/apps/details?id=com.streamlabs , mas infelizmente eles só dão suporte do Streamlabs para o Windows. Dei uma olhada no projeto (open source) deles lá no Github e acredito que não seja muito difícil trazer suporte pro Linux, você que tem influência @Dio talvez possa entrar em contato com os caras. Ou então talvez alguém possa contribuir com o projeto deles portanto suporte para o linux. no forum deles já tem uma galerinha querendo a portabilidade https://ideas.streamlabs.com/ideas/SL-I-3890

1 Like
#16

Eu uso 2 teclados o tempo todo aqui no meu trabalho.
Sou completamente leigo no linux, mas posso testar aqui…
Uma pergunta, caso dê certo, como faço para desfazer o processo depois? rs
Só apagar o bash? E onde ele será criado?

Edit:
Copiei os dois scripts e colei no editor de textos (Óbivio que um separado do outro… rs)
Criei dois arquivos arquivos: kbd-shortcutd e kbd-shortcutd1
Dei permissão para executarem como programa
Digitei no terminal kbd-shortcutd e nada aconteceu…

Onde foi que eu errei?
Qual o nome que eu tenho que dar para o segundo script?

ms@MS-Aspire:~/Downloads$ ls
A48F6F39712D8C5F7AE0B4218E2F8487_labels.pdf
kbd-shortcutd
kbd-shortcutd1
comands-tux.png
drive_c
imp_adm.sh
ms@MS-Aspire:~/Downloads$ kbd-shortcutd
kbd-shortcutd: comando não encontrado

1 Like
#17

Vc precisa colocar um ./ antes do nome

Sim, só apagar os arquivos

kbd-shortcutd e kbd-shortcut

Como instalar o básico:

Crie os arquivos com o conteúdo (kbd-shortcutd e kbd-shortcut)

Depois de permissão de execução:

chmod +x kbd-shortcutd kbd-shortcut

Personalize o kbd-shortcut porque por padrão ele não faz nada

./kbd-shortcutd

Pra pegar o id do teclado você pode rodar:

xinput | grep "keyboard"

Qualquer coisa posta a saída desse último que eu falo os ids do teclado

#18

Agora foi!

ms@MS-Aspire:~/Downloads$ chmod +x kbd-shortcutd kbd-shortcut
ms@MS-Aspire:~/Downloads$ ./kbd-shortcutd
Você precisa especificar o id do teclado desejao,você pode obter uma lista com os ids dos teclados executando:

xinput list

Eu uso o notebook em um suporte, uso o teclado usb (Este NÃO pode dar ruim! rs), então eu preciso que desconfigure o teclado do notebook, NÃO o usb…

ms@MS-Aspire:~/Downloads$ xinput | grep “keyboard”
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ WebCam: WebCam id=10 [slave keyboard (3)]
↳ SIGMACHIP USB Keyboard id=11 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=14 [slave keyboard (3)]
↳ Acer WMI hotkeys id=16 [slave keyboard (3)]
↳ SIGMACHIP USB Keyboard id=17 [slave keyboard (3)]

PS: Tem um errinho de português no comando “desejao”… rs

#19

O id é 17 ou 14

Puts, eu fiz tão as pressas que não vi kmmm

#20

Ok, meus 2 scripts estão assim:
kbd-shortcutd

#!/bin/bash

SCRIPT_DIR="$(dirname “$(readlink -f “${0}”)”)"

function print_help() {
echo -n Você precisa especificar o id do teclado desejado.
echo Você pode obter uma lista com os ids dos teclados executando:
echo
echo xinput list
exit 1
}

test $1 && KBD_ID=$1 || print_help

xinput test 14 | while read in ; do
“$SCRIPT_DIR/kbd-shortcut” $(echo $in | awk ‘{print $3}’) &
done

Alterei de 9 para 14

kbd-shortcut

#!/bin/bash

[[ $in = “46” ]] && xed
[[ $in = “45” ]] && winecfg
[[ $in = “44” ]] && nemo

No xinput test 14, ele me diz que fn+l, k, j são respectivamente as teclas 46, 45, 44
Porém no comando:

ms@MS-Aspire:~/Downloads$ ./kbd-shortcutd 14
l3k2j1

Ele apenas digita o que eu teclo, ele não abre o que foi configurado…

Tem alguma coisa errada?