Como você pode executar um script disparado por uma entrada de joystick?

3

Estou usando um Raspberry Pi rodando o Raspbian para alimentar meu arcade cabinet. Eu quero desligar o Pi usando o comando sudo poweroff sem usar o teclado. Eu estou pensando que a melhor maneira seria criar um script simples que de alguma forma seria acionado por uma combinação de entradas do botão do controlador. Parece fácil ligar um teclado a um script, mas não é tão fácil usar uma entrada de joystick.

Alguém tem alguma ideia?

EDIT # 1

Os botões do joystick e do controlador funcionam bem e aparecem usando a ferramenta jstest do pacote jstest-gtk e todos funcionam bem no Mame4all. Eu não tentei xev , mas vou investigar isso.

    
por Jody 04.01.2014 / 13:04

2 respostas

2

xev

Eu não acredito que você possa usar xev para detectar joysticks. Estou usando o Fedora 19 e existe um pacote chamado joystick que instala este pacote, linuxconsoletools . Este projeto é o que você está procurando.

projeto do linuxconsole

Ele contém várias ferramentas para ligar os joysticks de modo que seus sinais sejam recebidos pelo kernel do Linux.

excerto do site do linuxconsole

This project maintains the Linux Console tools, which include utilities to test and configure joysticks, connect legacy devices to the kernel's input subsystem (providing support for serial mice, touchscreens etc.), and test the input event layer.

O pacote inclui executáveis como estes

$ rpm -ql linuxconsoletools.x86_64
/usr/bin/ffcfstress
/usr/bin/ffmvforce
/usr/bin/ffset
/usr/bin/fftest
/usr/bin/inputattach
/usr/bin/jscal
/usr/bin/jscal-restore
/usr/bin/jscal-store
/usr/bin/jstest
/usr/libexec/joystick/extract
/usr/libexec/joystick/filter
/usr/libexec/joystick/ident

Ubuntu

Eu não tenho uma instalação Debian disponível, mas o Ubuntu também tem o mesmo pacote, joystick . A execução do comando apt-file list joystick mostra os mesmos arquivos que o RPM que mencionei acima.

O que mais?

Eu também sugiro dar uma olhada no tópico Wiki do ArchLinux, intitulado: Joystick . É provavelmente o recurso mais exaustivo do tópico, relacionado ao Linux.

Mapeando o joystick para o teclado

O exemplo acima fará com que seu joystick funcione no Linux, mas não oferece nenhum método para mapear o joystick para um script, pelo menos não de maneira fácil. Para fazer algo assim, você precisará solicitar a ajuda de outro aplicativo. Há um que eu conheço chamado jkeys .

Você precisará instalar algumas dependências primeiro para instalá-lo, python-xlib & %código%. Estes devem estar no repositório da maioria das distros.

No entanto, para instalar o python-pygame você terá que baixá-lo do repositório do subversion do projeto. NOTA: Está escrito em Python.

$ svn checkout http://jkeys.googlecode.com/svn/trunk/ jkeys-read-only

Depois de baixá-lo, você pode executá-lo da seguinte forma:

$ ./jkeys 
usage: jkeys joystick.conf application [params]

Para mapear uma chave, você precisará criar seu próprio arquivo jkeys :

<config>
    <joystick id="0">
        <axis number="0" low="Left" high="Right" />
        <axis number="1" low="Down" high="Up" />
        <button number="0" key="Space" />
        <button number="1" key="Return" />
        <button number="2" key="a" />
        <button number="3" key="b" />
        <button number="4" key="c" />
        <button number="5" key="d" />
        <button number="6" key="z" />
        <button number="7" key="x" />
        <button number="9" key="Escape" />
        <button number="10" key="p" />
    </joystick>
</config>

Agora, quando você estiver pronto para executar seu jogo, faça o seguinte:

$ ./jkeys joystick.py <somegame>

Os botões do joystick substituídos enviarão qualquer tecla que você pressionar em vez dos botões do joystick para o aplicativo.

QJoy

Outra alternativa é usar o aplicativo QJoyPad . Eu não pude testar isso, pois não tenho joystick. A GUI deve ficar assim.

ApartirdestaGUI,vocêpodemapearqualquerpressionamentodebotãoparapressionarasteclascombastantefacilidade.

Quetalexecutarumscript?

Bem,comosmétodosacima,vocêpoderiafazerusodeoutroaplicativochamado XBindKeys para mapear qualquer pressionamento de teclado para executar um comando real ou script.

OBSERVAÇÃO: Meu exemplo abaixo cria um atalho de teclado para que o Nautilus seja iniciado com determinados diretórios abertos.

Exemplo

Você precisará primeiro certificar-se de que os pacotes joystick.conf estejam instalados.

Em seguida, você precisará executar o seguinte comando, apenas uma vez, para criar um arquivo de configuração xbindkeys do modelo.

$ xbindkeys --defaults > /home/saml/.xbindkeysrc

Com o arquivo criado, você pode abri-lo em um editor de texto e adicionar uma regra como esta:

"nautilus --browser /home/saml/projects/path/to/some/dir"
  Mod4+shift + q

Com a alteração acima feita, precisamos matar xbindkeys se ela já estiver em execução e, em seguida, reiniciá-la.

$ killall xbindkeys
$ xbindkeys

Agora com isto em execução sempre que eu digitar Mod + Deslocamento + Q O Nautilus abrirá com a pasta correspondente aberta.

Referências

por 04.01.2014 / 14:46
0

Eu segui uma rota um pouco diferente e desenvolvi um daemon de segundo plano leve para executar um script assim que os botões especiais fossem pressionados:

link

    
por 31.07.2016 / 05:41