MPX: Multipuntero para la próxima Ubuntu
La próxima versión de Ubuntu, el Lince Lúcido, o 10.04, traerá xorg 7.5 con MPX activado por defecto. No se puede sacar mucho provecho de él aun, pero ya lo tenemos para probarlo. Como está todavía verde, los punteros y teclados extra no se activan solos y hay que configurarlos. Pero no hay problema; vamos a ver como se hace en la alfa 2, cuando está a punto de salir la alfa 3. Lo he probado primero en el portátil, para poder usar la tableta y un ratón externo simultáneamente. Y sí, ahí estaban los dos punteros cogiendo ventanas por separado.
Es bastante fácil una vez has encontrado cómo. Primero que nada, abrimos una terminal, que vamos a usar bastante porque no hay herramientas gráficas aun para ello. Sacamos un listado de los dispositivos de entrada que tenemos:xinput list
Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ "Logitech USB Mouse" id=9 [slave pointer (2)]
⎜ ↳ "Macintosh mouse button emulation" id=11 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ "Power Button" id=6 [slave keyboard (3)]
↳ "Power Button" id=7 [slave keyboard (3)]
↳ "Sleep Button" id=8 [slave keyboard (3)]
↳ "AT Translated Set 2 keyboard" id=10 [slave keyboard (3)]
Tenemos un puntero y un teclado maestros virtuales. Enchufamos otro ratón. Como los reales están asociados a éstos, vamos a crear otro virtual:
xinput create-master New
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ "Logitech USB Mouse" id=9 [slave pointer (2)]
⎜ ↳ "Macintosh mouse button emulation" id=11 [slave pointer (2)]
⎜ ↳ "Logitech USB-PS/2 Optical Mouse" id=12 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ "Power Button" id=6 [slave keyboard (3)]
↳ "Power Button" id=7 [slave keyboard (3)]
↳ "Sleep Button" id=8 [slave keyboard (3)]
↳ "AT Translated Set 2 keyboard" id=10 [slave keyboard (3)]
⎡ New pointer id=13 [master pointer (14)]
⎜ ↳ New XTEST pointer id=15 [slave pointer (13)]
⎣ New keyboard id=14 [master keyboard (13)]
↳ New XTEST keyboard id=16 [slave keyboard (14)]
Los nuevos maestros virtuales no tienen ningún dispositivo real asociado. Los dos ratones que hay enchufados están asociados al puntero con id=2. Pues vamos a asociar el que hemos enchufado (id=12) al nuevo maestro (id=13):
xinput reattach 12 13Si desconectamos el ratón, el nuevo maestro seguirá ahí y algunas ventanas no nos responderán como esperaríamos (el foco se queda en otra ventana), así que deberíamos eliminarlo:
xinput remove-master 13Y todo vuelve a la normalidad.
Creo que voy a necesitar un teclado USB para experimentar con esto...

3 comentarios:
Bonito ! Funciona con Fedora 13.
Abraço
Ola,
gostaria de compartir un script que permite jugar con essas funcionalidades.
La linea mas importante que permite botar una mouse, automatizando la operacion manual que explicaste en el post es esta :
MOUSE=$(diff /tmp/1-no-mouse.txt /tmp/2-uma-mouse.txt |grep -E -o id=[0-9]+ | tr -d [a-z,=])
Extrae los numeros del master o del nuevo puntero.
Para utilisar un nuevo puntero, executar el script y seguir sus preguntas, o executar con la opcion --help
#! /bin/bash
CONFIGFILE=~/.multiponteiros
if [ ! -f $CONFIGFILE ] ; then
touch $CONFIGFILE
fi
if [ $@ > 0 ] ; then
if [ $1 = "-r" ] || [ $1 = "--remove" ] ; then
if [ -s $CONFIGFILE ] ; then #size > 0
xinput remove-master $(tail -n 1 $CONFIGFILE)
#suprimir ultima linha
sed --in-place '$d' $CONFIGFILE
echo Ponteiro desabilitado.
else
echo Voce nao tem mouse para remover.
fi
else
if [ $1 = "-h" ] || [ $1 = "--help" ] ; then
echo Programa para botar uma nova mouse com um novo ponteiro.
echo usage : install-mouses.sh [-r --remove]
echo Chamar o programa uma vez para botar uma nova mouse,
echo usar a opção -r para remover a ultima mouse inserida.
fi
fi
exit
fi
install_dependencies() {
for DISTRIB in apt-get yum
do
[[ "$(type -p ${DISTRIB} 2>/dev/null)" ]] && echo ${DISTRIB}
done
}
find_dependencies(){
if [ ! -f /usr/bin/xinput ] ; then
echo Voce tem que instalar o programa xinput
exit
fi
}
find_dependencies
echo Vamos criar um novo ponteiro.
echo Favor botar na configuração initial \(remover a mouse que você quer inserir\)
echo e pressionne enter.
read x
xinput list > /tmp/1-no-mouse.txt
echo Pode inserir a mouse
read x
xinput list > /tmp/2-uma-mouse.txt
# Aquela linha saque o numero da nova mouse
MOUSE=$(diff /tmp/1-no-mouse.txt /tmp/2-uma-mouse.txt |grep -E -o id=[0-9]+ | tr -d [a-z,=])
xinput create-master mymaster
xinput list > /tmp/3-master1.txt
# localisar a id do novo master
MASTER1=$(diff /tmp/2-uma-mouse.txt /tmp/3-master1.txt | \
grep "mymaster.*pointer.*master.*pointer"| \
grep -E -o id=[0-9]+ | tr -d [a-z,=])
xinput reattach $MOUSE $MASTER1
# salvar a configuração num arquivo
echo $MASTER1 >> $CONFIGFILE
echo Operação finalizada. Pode aproveitar.
echo Chame o script de novo para botar uma nova mouse.
echo Chame o script com a opção -r ou --remover para remover a ultima mouse inserida.
Y este codigo usa una interface minimal con zenity, en bash.
Se puede cliquear para botar un nuevo puntero, removerlo, ler la ayuda e para testar una aplicacion con varios punteros (porque todavia no existen muchas), el script descarga un programa del sitio
git://gitorious.org/vinput/vinput.git
tenta de compilarlo y lo usa : permite dibujar con varios punteros :)
#! /bin/bash
PASTA=~/.multipointeros/
CONFIGFILE=${PASTA}multipt
GIT=/usr/bin/git
LOG=${PASTA}log
if [ ! -d $PASTA ] ; then
mkdir $PASTA
fi
if [ ! -f $CONFIGFILE ] ; then
#echo file created
touch $CONFIGFILE
fi
remover(){
if [ -s $CONFIGFILE ] ; then #size > 0
xinput remove-master $(tail -n 1 $CONFIGFILE)
#suprimir ultima linha
sed --in-place '$d' $CONFIGFILE
#echo Ponteiro desabilitado.
zenity --info --text "Ponteiro desabilitado"
else
zenity --info --text "Voce nao tem mouse para remover"
fi
main
}
help(){
zenity --info \
--text="Com esse programa, você pode abilitar novas mouses com os seus ponteiros proprios.\n\
Funciona em Fedora >= 13, em Ubuntu >= 10.0.1 e em outros sistemas que tem a versão de Xorg >= 1.6 (pode ver com Xorg -version).
Precisa-se do programa xinput que se encontra nos depositos das distribucões.
autores : Guillermina e Vincent"
main
}
install(){
#zenity --info --text="Favor remover o mouse que você quer instalar"
zenity --info --text="O programa precisa de inicialisar-se. Favor esperar antes de inserir o mouse que você quer instalar."
if [ ! "$?" = 1 ] ; then
xinput list > /tmp/1-no-mouse.txt
zenity --info --text="Pode inserir a mouse"
if [ ! "$?" = 1 ] ; then
xinput list > /tmp/2-uma-mouse.txt
# Aquela linha saque o numero da nova mouse
MOUSE=$(diff /tmp/1-no-mouse.txt /tmp/2-uma-mouse.txt |grep -E -o id=[0-9]+ | tr -d [a-z,=])
xinput create-master mymaster
xinput list > /tmp/3-master1.txt
# localisar a id do novo master
MASTER1=$(diff /tmp/2-uma-mouse.txt /tmp/3-master1.txt | \
grep "mymaster.*pointer.*master.*pointer"| \
grep -E -o id=[0-9]+ | tr -d [a-z,=])
xinput reattach $MOUSE $MASTER1
# salvar a configuração num arquivo
echo $MASTER1 >> $CONFIGFILE
zenity --info --text="Operação finalizada. Pode aproveitar."
fi
fi
main
}
Publicar un comentario en la entrada