Fórum Ubuntu Linux - PT
Suporte Técnico => Programação e Scripts => Tópico iniciado por: Akuhn em 02 de Janeiro de 2007, 20:16
-
Fiz um script para ajudar quem está com dificuldades para usar seus controles de PSX na porta paralela.
Ele já é funcional, mas precisa de alguns ajustes ainda, por favor postem suas dúvidas/sugestões e quem puder contribua para melhorá-lo.
Para rodar o script copie o conteúdo abaixo e cole dentro de um arquivo, por exemplo joypl.sh.
Depois é preciso dar permissão de execução para esse arquivo:
chmod +x joypl.sh
Para executar ele é preciso usar o sudo ou ser root, pois ele carrega e descarrega módulos do kernel:
sudo ./joypl.sh
#!/bin/bash
# #########################################################
# Script para configuração de Joystick na porta paralela #
# Desenvolvido por Aldefax Gilvan Kuhn #
# Módulo utilizado gamecon - Kernel 2.6 Ubuntu 06.06 #
# Fiz este script para uso pessoal e estou compartilhando #
# a idéia, ele é livre para quem quiser copiar, modificar #
# ou fazer qualquer alteração, sugestões são bem-vindas. #
# Correções, sugestões e contribuições aldefax@gmail.com #
###########################################################
# Funções
Checa_Status() {
if [ $? -ne 0 ]
then
zenity --error --text="Seu joystick não foi configurado!"
exit 1
fi
}
# Verificar se o usuário possui permissões sudo ou root para gravar em /etc/modules
if ! [ -w /etc/modules ]
then
zenity --error --text="Não tenho permissão para gravar as alterações, desculpe!"
zenity --error --text="Tente assim: sudo $0"
exit 1
fi
# Verificar se o pacote zenity e joystick estão instalados
dpkg -l zenity >/dev/null 2>/dev/null
Checa_Status
dpkg -l joystick >/dev/null 2>/dev/null
Checa_Status
# Se não estiverem instalados fazer a instalação deles
# Em qual porta de impressora o joystick está conectado?
PORTA=`zenity --title="Selecionando a porta" --width=400 --height=400 --list \
--text="Selecione a porta em que seu controle está conectado:" \
--radiolist --separator=separator --column "" --column "Cod." --column "Porta Paralela" --hide-column="2" \
TRUE 0 "lp0 (Default para a maioria dos casos)" \
FALSE 1 "lp1" \
FALSE 2 "lp2" \
FALSE 3 "lp3"`
Checa_Status
# Quantos joysticks você tem conectados a essa porta?
QTDADE=`zenity --title="Quantos controles você tem contectados?" --width=400 --height=400 --list --text="Selecione quantos controles estão conectados na mesma porta:" \
--radiolist --column "" --column "Cod." --column "Quantidade" --hide-column="2" \
TRUE 1 "Um" \
`
# Desabilitei porque a sequencia nem sempre confere.
# FALSE 2 "Dois" \
# FALSE 3 "Três" \
# FALSE 4 "Quantro" \
# FALSE 5 "Cinco"
Checa_Status
# Qual o modelo do seu joystick?
MODELO=`zenity --title="Selecionando o controle" --width=400 --height=400 --list --text="Selecione o modelo do seu controle:" \
--radiolist --column "" --column "Cod." --column "Joystick/Gamepad" --hide-column="2" \
TRUE 0 "Nenhum (Restaura configuração da porta paralela)" \
FALSE 1 "Super Nintendo" \
FALSE 2 "Nintendo" \
FALSE 4 "Multisystem 1-botão joystick" \
FALSE 5 "Multisystem 2-botão joystick" \
FALSE 6 "Nintendo 64" \
FALSE 7 "Sony PSX gamepad controller" \
FALSE 8 "Sony PSX DDR (Dance Dance Revolution) controller" \
FALSE 9 "SNES mouse"`
Checa_Status
# Remove joystick e instala porta de impressora
if [ $MODELO -eq 0 ]
then
(
echo "10" ; sleep 1
echo "# Removendo módulo joydev" ; sleep 1
modprobe -r joydev >/dev/null 2>/dev/null
echo "25" ; sleep 1
echo "# Removendo módulo gamecon" ; sleep 1
modprobe -r gamecon >/dev/null 2>/dev/null
echo "50" ; sleep 1
echo "# Adicionando módulo lp" ; sleep 1
modprobe lp >/dev/null 2>/dev/null
echo "75" ; sleep 1
echo "# Concluíndo" ; sleep 1
echo "100" ; sleep 1
) |
zenity --progress \
--title="Removendo joystick" \
--text="Selecionando Módulos..." \
--percentage=0
if [ "$?" = -1 ] ; then
zenity --error \
--text="Ação cancelada."
fi
zenity --error --text="Nenhum joystick não foi configurado!"
grep -i -v gamecon /etc/modules |grep -i -v lp >/tmp/modules
echo "lp" >>/tmp/modules
cp /etc/modules /etc/modules-`date +%s`
cat /tmp/modules >/etc/modules
exit 1
fi
case $QTDADE in
1) CONF=$PORTA,$MODELO,0,0,0,0;;
2) CONF=$PORTA,$MODELO,$MODELO,0,0,0;;
3) CONF=$PORTA,$MODELO,$MODELO,$MODELO,0,0;;
4) CONF=$PORTA,$MODELO,$MODELO,$MODELO,$MODELO,0;;
5) CONF=$PORTA,$MODELO,$MODELO,$MODELO,$MODELO,$MODELO;;
esac
zenity --question --text="Deseja ativar o(s) joystick(s) agora?"
Checa_Status
# Remove porta de impressora e instala joystick
(
echo "15" ; sleep 1
echo "# Removendo módulo joydev" ; sleep 1
modprobe -r joydev >/dev/null 2>/dev/null
echo "30" ; sleep 1
echo "# Removendo módulo gamecon" ; sleep 1
modprobe -r gamecon >/dev/null 2>/dev/null
echo "50" ; sleep 1
echo "# Removendo módulo lp" ; sleep 1
modprobe -r lp >/dev/null 2>/dev/null
echo "75" ; sleep 1
echo "# Adicionando módulo gamecon" ; sleep 1
modprobe gamecon map=$CONF >/dev/null 2>/dev/null
echo "100" ; sleep 1
) |
zenity --progress \
--title="Instalando joystick" \
--text="Selecionando Módulos..." \
--percentage=0
if [ "$?" = -1 ] ; then
zenity --error \
--text="Ação cancelada."
fi
# Testando joystick (não consegui colocar saída em um information dialog box)
sleep 1
jstest /dev/input/js0
# Para funcionar o joystick é necessário calibrá-lo
jscalibrator
Checa_Status
# Remove porta de impressora e instala joystick
(
echo "15" ; sleep 1
# echo "# Removendo módulo joydev" ; sleep 1
modprobe -r joydev >/dev/null 2>/dev/null
echo "30" ; sleep 1
# echo "# Removendo módulo gamecon" ; sleep 1
modprobe -r gamecon >/dev/null 2>/dev/null
echo "50" ; sleep 1
# echo "# Removendo módulo lp" ; sleep 1
modprobe -r lp >/dev/null 2>/dev/null
echo "75" ; sleep 1
# echo "# Atualizando módulo gamecon" ; sleep 1
# modprobe gamecon map=$CONF >/dev/null 2>/dev/null
echo "100" ; sleep 1
) |
zenity --progress \
--title="Atualizando configuração" \
--text="Atualizando Módulos..." \
--percentage=0
if [ "$?" = -1 ] ; then
zenity --error \
--text="Ação cancelada."
fi
zenity --question --text="Deseja tornar essas configurações permanentes?"
Checa_Status
grep -i -v gamecon /etc/modules |grep -i -v lp >/tmp/modules
echo "gamecon map=$CONF" >>/tmp/modules
cp /etc/modules /etc/modules-`date +%s`
cat /tmp/modules >/etc/modules
zenity --info --text="Configuração concluída."
-
muito bom :D
-
muito bom *.*
soh consegui instalar o driver do tapete ddr por causa do teu script
vlw X)
-
eu tento o "./joypl.sh" e dá nisso:
root@lucas:/home/lucas# ./joypl.sh
./joypl.sh: line 44: zenity: comando não encontrado
./joypl.sh: line 16: zenity: comando não encontrado
???
-
o zenity é um programa do GNOME.
tenta trocar zenity por kdialog ou xdialog
-
Exatamente, o Zenity é um interpretador de diálogos para gnome, infelizmente ele não usa o dialog padrão então não é possível mudar para xdialog, kdialog ou gdialog sem fazer grandes alterações no script.
Se estiver usando gnome é só instalar o zenity que vai funcionar numa boa.
sudo aptitude install zenity
Estou melhorando o script e pretendo migrar ele para o dialog padrão, fiz em Shell+Zenity por conhecer melhor.
[ ]'s.
-
Akuhn seu script de detecção é muito legal, parabéns!
Sobre a detecção, eu tenho dois gamepads analógicos ligados na porta da impressora (os dois cabos convergindo na mesma porta paralela) e o seu script só detecta 1, isso é normal? ???
-
quando chega no jstest, como faz pra finalizar?
-
Akuhn seu script de detecção é muito legal, parabéns!
Sobre a detecção, eu tenho dois gamepads analógicos ligados na porta da impressora (os dois cabos convergindo na mesma porta paralela) e o seu script só detecta 1, isso é normal? ???
É normal sim, por enquanto ainda não consegui elaborar uma rotina para fazer funcionar de forma automática quando tem mais de um joystick, mas já estou vendo para arrumar um tempo e melhorar um pouco o script.
Estou estudando a linguagem python e pyGTK, acho que assim consigo fazer algo mais funcional do que em Shell script e zenity.
Qualquer dúvida pergunte, se quiser posso te passar a forma manual de configurar os joysticks, eu também tenho 2 joy de play ligados a mesma porta paralela e ambos funcionam perfeitamente.
[ ]'s.
-
quando chega no jstest, como faz pra finalizar?
É só fechar que ele volta para a configuração do script.
Dúvidas pergunte, [ ]'s.
-
Por favor me passe a forma manual, com ou sem muito trabalho quero os dois funcionando... Agradeço seu tempo... :D
-
Por favor me passe a forma manual, com ou sem muito trabalho quero os dois funcionando... Agradeço seu tempo... :D
OK, para funcionar de forma manual é assim,
Essa sequência prepara o sistema para receber o módulo:
sudo su
modprobe -r joydev
modprobe -r lp
modprobe -r gamecon
Aqui você instala e configura ele:
modprobe gamecon map=PORTA,JOY1,JOY2,JOY3,JOY4,JOY5
Geralmente esse funciona:
modprobe gamecon map=0,7,0,0,7,0
Se não der tente trocar de lugar o segundo joystick, na ordem, pois isso depende de como os fios estão ligados internamente quando o controle foi adaptado, por isso a dificuldade para fazer o script funcionar com mais de 1 joystick.
Estou testando para que o script teste todas as condições de porta até achar os joystick, mas ainda estou com alguns probleminhas.
[ ]'s.
-
Cara, o teu Script ficou absurdamente show!!
A única forma que consegui achar para configurar um tapete "PSX DDR" podendo apertar dois botões simultaneamente foi com o seu script! :D
(pois em outras configurações as setas do tapede são reconhecidas como eixo, não aceitando os botões simultaneos).
Agora os tapetes que são plugados na porta USB, que são reconhecidos automaticamente pelo Ubuntu eu não consegui configurar de forma a apertar os botões simultaneamente (reconhecendo as setas como botões, e não como eicho).
Você saberia como??
Desde já agradeço e parabéns pelo seu script!
-
Não consegui nenhum joystick usb ainda pra fazer testes, mas assim que conseguir eu adiciono no script também.
É possível que seja algum problema ou conflito de módulo, pelo pouco que li sobre joysticks usb eles utilizam outros módulos, diferentes dos que são utilizados pelos de porta paralela, talvez haja algum parâmetro específico que deve ser adicionado no módulo para funcionar com os tapetes usb.
[ ]'s.
-
Sempre que eu uso este Script, ao final abre o JScalibrator e emite a seguinte mensagem.
Could not access the specified path(s), verify that the patch(s) are specified correctly and that you have sufficient permission to access them. Also make sure that the joystick in question is actually connected, on (as needed), not in use by another program, and that the joystick driver or module is loaded (type 'modprobe <driver_name>').
Pelo o que eu entendi fala que eu não tenho acesso aos patchs e pede para eu verificar se o jostick está conectado, se está em uso por outro programa e se o driver está ativo.
Mas eu sei que o controle está devidamente conectado, não está em uso por outro programa, eu estou no modo root (sudo -i). O que está errado?
Depois de clicar em OK neste erro, aparece a mensagem: Deseja tornar essas configurações permanentes?
Clico em OK e aparece a mensagem de que a configuração está concluída.
Abro um emulador de SNES e não está funcionando.
Uso O Ubuntu Feisty 7.04. E o joystick é um de Playstation 1 original.
Analisando melhor vi que este erro também aparece no terminal:
jstest: No such file or directory
O que vem a ser isto?
Bom, fui à /dev/input e criei a pasta js0. Com isso o primeiro erro foi trocado para
Joystick (Unknown) has 2 axes ((null), ?)
./joypl.sh: line 147: 9725 Falha de segmentação (core dumped) jstest /dev/input/js0
Failed to set joystick /dev/input/js0 correction values: Inappropriate ioctl for device
Alguém poderia me dar uma força?
-
Sempre que eu uso este Script, ao final abre o JScalibrator e emite a seguinte mensagem.
Could not access the specified path(s), verify that the patch(s) are specified correctly and that you have sufficient permission to access them. Also make sure that the joystick in question is actually connected, on (as needed), not in use by another program, and that the joystick driver or module is loaded (type 'modprobe <driver_name>').
Pelo o que eu entendi fala que eu não tenho acesso aos patchs e pede para eu verificar se o jostick está conectado, se está em uso por outro programa e se o driver está ativo.
Mas eu sei que o controle está devidamente conectado, não está em uso por outro programa, eu estou no modo root (sudo -i). O que está errado?
Depois de clicar em OK neste erro, aparece a mensagem: Deseja tornar essas configurações permanentes?
Clico em OK e aparece a mensagem de que a configuração está concluída.
Abro um emulador de SNES e não está funcionando.
Uso O Ubuntu Feisty 7.04. E o joystick é um de Playstation 1 original.
Analisando melhor vi que este erro também aparece no terminal:
jstest: No such file or directory
O que vem a ser isto?
Bom, fui à /dev/input e criei a pasta js0. Com isso o primeiro erro foi trocado para
Joystick (Unknown) has 2 axes ((null), ?)
./joypl.sh: line 147: 9725 Falha de segmentação (core dumped) jstest /dev/input/js0
Failed to set joystick /dev/input/js0 correction values: Inappropriate ioctl for device
Alguém poderia me dar uma força?
No seu caso acho que falta instalar alguns pacotes:
sudo apt-get install jstest jscalibrator zenity
-
Fiz umas melhorias no script, ele agora suporta 2 joysticks de playstation na mesma porta.
Em breve vou testar um controle de N64 adaptado na porta paralela, só falta terminar o circuito e achar mais 1 CI 4006. Também pretendo fazer testes com controles de consoles adaptados para porta USB.
#####################
#!/bin/bash
# #########################################################
# Script para configuração de Joystick na porta paralela #
# Desenvolvido por Aldefax Gilvan Kuhn #
# Módulo utilizado gamecon - Kernel 2.6 Ubuntu 06.06 #
# Fiz este script para uso pessoal e estou compartilhando #
# a idéia, ele é livre para quem quiser copiar, modificar #
# ou fazer qualquer alteração, sugestões são bem-vindas. #
# Correções, sugestões e contribuições aldefax@gmail.com #
# Data da última modificação 21/12/2007-00:48 #
###########################################################
# Funções
Checa_Status() {
if [ $? -ne 0 ]
then
zenity --error --text="Seu joystick não foi configurado!"
exit 1
fi
}
# 1) Verificar se o usuário possui permissões sudo ou root para gravar em /etc/modules
if ! [ -w /etc/modules ]
then
zenity --error --text="Não tenho permissão para gravar as alterações, desculpe!"
zenity --error --text="Tente assim: sudo $0"
exit 1
fi
# 2) Verificar se o pacote zenity e joystick estão instalados
dpkg -l zenity >/dev/null 2>/dev/null
Checa_Status
dpkg -l joystick >/dev/null 2>/dev/null
Checa_Status
# 3) Se não estiverem instalados fazer a instalação deles
# 4) Em qual porta de impressora o joystick está conectado?
PORTA=`zenity --title="Selecionando a porta" --width=400 --height=400 --list \
--text="Selecione a porta em que seu controle está conectado:" \
--radiolist --separator=separator --column "" --column "Cod." --column "Porta Paralela" --hide-column="2" \
TRUE 0 "lp0 (Default para a maioria dos casos)" \
FALSE 1 "lp1" \
FALSE 2 "lp2" \
FALSE 3 "lp3"`
Checa_Status
# 5) Quantos joysticks você tem conectados a essa porta?
QTDADE=`zenity --title="Quantos controles você tem contectados?" --width=400 --height=400 --list --text="Selecione quantos controles estão conectados na mesma porta:" \
--radiolist --column "" --column "Cod." --column "Quantidade" --hide-column="2" \
TRUE 1 "Um" \
FALSE 2 "Dois"`
Checa_Status
# 6) Qual o modelo do seu joystick?
MODELO=`zenity --title="Selecionando o controle" --width=400 --height=400 --list --text="Selecione o modelo do seu controle:" \
--radiolist --column "" --column "Cod." --column "Joystick/Gamepad" --hide-column="2" \
TRUE 0 "Nenhum (Restaura configuração da porta paralela)" \
FALSE 1 "Super Nintendo" \
FALSE 2 "Nintendo" \
FALSE 4 "Multisystem 1-botão joystick" \
FALSE 5 "Multisystem 2-botão joystick" \
FALSE 6 "Nintendo 64" \
FALSE 7 "Sony PSX gamepad controller" \
FALSE 8 "Sony PSX DDR (Dance Dance Revolution) controller" \
FALSE 9 "SNES mouse"`
Checa_Status
# 7) Remove joystick e instala porta de impressora
if [ $MODELO -eq 0 ]
then
(
echo "10" ; sleep 1
echo "# Removendo módulo joydev" ; sleep 1
modprobe -r joydev >/dev/null 2>/dev/null
echo "25" ; sleep 1
echo "# Removendo módulo gamecon" ; sleep 1
modprobe -r gamecon >/dev/null 2>/dev/null
echo "50" ; sleep 1
echo "# Adicionando módulo lp" ; sleep 1
modprobe lp >/dev/null 2>/dev/null
echo "75" ; sleep 1
echo "# Concluíndo" ; sleep 1
echo "100" ; sleep 1
) |
zenity --progress \
--title="Removendo joystick" \
--text="Selecionando Módulos..." \
--percentage=0
if [ "$?" = -1 ] ; then
zenity --error \
--text="Ação cancelada."
fi
zenity --error --text="Nenhum joystick não foi configurado!"
grep -i -v gamecon /etc/modules |grep -i -v lp >/tmp/modules
echo "lp" >>/tmp/modules
cp /etc/modules /etc/modules-`date +%s`
cat /tmp/modules >/etc/modules
exit 1
fi
case $QTDADE in
1) CONF=$PORTA,$MODELO,0,0,0,0;;
2) CONF=$PORTA,$MODELO,0,0,$MODELO,0;;
3) CONF=$PORTA,$MODELO,$MODELO,$MODELO,0,0;;
4) CONF=$PORTA,$MODELO,$MODELO,$MODELO,$MODELO,0;;
5) CONF=$PORTA,$MODELO,$MODELO,$MODELO,$MODELO,$MODELO;;
esac
zenity --question --text="Deseja ativar o(s) joystick(s) agora?"
Checa_Status
# 8) Remove porta de impressora e instala joystick
(
echo "15" ; sleep 1
echo "# Removendo módulo joydev" ; sleep 1
modprobe -r joydev >/dev/null 2>/dev/null
echo "30" ; sleep 1
echo "# Removendo módulo gamecon" ; sleep 1
modprobe -r gamecon >/dev/null 2>/dev/null
echo "50" ; sleep 1
echo "# Removendo módulo lp" ; sleep 1
modprobe -r lp >/dev/null 2>/dev/null
echo "75" ; sleep 1
echo "# Adicionando módulo gamecon" ; sleep 1
modprobe gamecon map=$CONF >/dev/null 2>/dev/null
echo "100" ; sleep 1
) |
zenity --progress \
--title="Instalando joystick" \
--text="Selecionando Módulos..." \
--percentage=0
if [ "$?" = -1 ] ; then
zenity --error \
--text="Ação cancelada."
fi
# 9) Testando joystick (não consegui colocar saída em um information dialog box)
sleep 1
jstest /dev/input/js0
# 10) Para funcionar o joystick é necessário calibrá-lo
# para calibrar o(s) joystick(s) clique em calibrate, mova para todos os lados.
# Teste todos os botões, se tiver mais de 1 joystick selecione em Joystick Device
# depois no menu Joystick clique em reopen(CTRL + E)
jscalibrator
Checa_Status
# 11) Remove porta de impressora e instala joystick
(
echo "15" ; sleep 1
# echo "# Removendo módulo joydev" ; sleep 1
modprobe -r joydev >/dev/null 2>/dev/null
echo "30" ; sleep 1
# echo "# Removendo módulo gamecon" ; sleep 1
modprobe -r gamecon >/dev/null 2>/dev/null
echo "50" ; sleep 1
# echo "# Removendo módulo lp" ; sleep 1
modprobe -r lp >/dev/null 2>/dev/null
echo "75" ; sleep 1
# echo "# Atualizando módulo gamecon" ; sleep 1
modprobe gamecon map=$CONF >/dev/null 2>/dev/null
echo "100" ; sleep 1
) |
zenity --progress \
--title="Atualizando configuração" \
--text="Atualizando Módulos..." \
--percentage=0
if [ "$?" = -1 ] ; then
zenity --error \
--text="Ação cancelada."
fi
zenity --question --text="Deseja tornar essas configurações permanentes?"
Checa_Status
grep -i -v gamecon /etc/modules |grep -i -v lp >/tmp/modules
echo "gamecon map=$CONF" >>/tmp/modules
cp /etc/modules /etc/modules-`date +%s`
cat /tmp/modules >/etc/modules
zenity --info --text="Configuração concluída."
-
Cara... MUUUUUUUUUUITO BOM!!!
Seu script salvou minha vida eheheh! Meu controle usb acabou de morrer ai desenterrei 2 pads de psx q tinha, ambos conectando-se na mesma porta, com seu script tudo foi configurado direitinho, parabens!!! ;D
-
As configuraçoes nao ficam mais salvas no Ubuntu Hardy =/ Tenho q executar o script sempre que reinicio o computador, alguma ajuda?
-
As configuraçoes nao ficam mais salvas no Ubuntu Hardy =/ Tenho q executar o script sempre que reinicio o computador, alguma ajuda?
Não tenho o Hardy Heron (8.04) instalado ainda, mas assim que der um tempinho eu vou verificar, quero ver se consigo alguns modelos de joysticks usb para testar, para compatibilizar o script com esses modelos também.
Também estou pensando em fazer um pacote .deb para a instalação ficar mais fácil, daí já coloco as dependências e tudo mais, talvez também mude o script de zenity para gdialog ou gtk, mas ainda estou avaliando isso, pois por enquanto estou bastante atarrefado com a TCC do curso de Redes, a partir do mês de julho vou ter bastante tempo e prometo dar o meu melhor.
[ ]'s.
-
Amigo Akuhn,
seu script é simplismente genial!
mas devido à minha inexperiência com o Linux Metamorphose (sou usuário recém chegado do mundo rWindows)
acabei fazendo uma "pequena" besteira...
a fim de deixar "mais prático" o seu já SuperPrático script, cometi o grave erro de incluir os comandos de permissão de execução do script, no próprio script! desta forma, o próprio script requisitaria permissão pra funcionar...
mas, como nem toda intenção traz bons resultados, eu acabei que por pressa minha, achando que não tinha dado certo, deletando o script (ainda tentando entender porque fiz isso...)
resultado: o script está executando repetidamente sem fim...
preciso de ajuda :(