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
#

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."