No entiendo lo del servidor X en Linux.

El propósito de este experimento es conectar mi 3DS como mando inalámbrico a una laptop con Linux para hacerla funcionar con un televisor de plasma como si de una consola de juego se tratase. No tengo Joystick inalámbrico, sólo cuento con mi 3DS, por eso me importa tanto este objetivo.

Tengo un programita en una PC, sirve para conectar una Nintendo 3DS y usarla como mando inalámbrico mediante wi-fi para jugar y más. El programa fué hecho principalmente para Windows, allí lo tenía, lo he hecho funcionar, luego de tratar de hacerlo correr en Linux tuve muchos intentos fallidos.

Después de cierto tiempo, descubrí en Github que afortunadamente, alguien programó e hizo un código de Python para hacer funcionar el cliente en Linux. Así es como describe el soporte (Ignoren lo último, un usuario completó la emulación del joystick.):

This adds a Python script that should work on all Linux computers running X11. Existing code is unchanged. Fixes #10, maybe also #12.

No joystick support, sorry; they don't go via the usual Linux input system, I can't find how to emulate one.


Bien chicos, la parte difícil, y eso porque no entiendo lo de X11, o específicamente servidor X.

Resulta que este código trabaja mediante el uso de las librerías X de Python, ya las instalé, pero no funciona tal experimento.

Ejecuté el Script, y me devuelve esto:

  File "3DSController.py", line 163, in <module>
    disp = Xlib.display.Display()
  File "/usr/lib/python3.5/site-packages/Xlib/display.py", line 80, in __init__
    self.display = _BaseDisplay(display)
  File "/usr/lib/python3.5/site-packages/Xlib/display.py", line 62, in __init__
    display.Display.__init__(*(self, ) + args, **keys)
  File "/usr/lib/python3.5/site-packages/Xlib/protocol/display.py", line 129, in __init__
    raise error.DisplayConnectionError(self.display_name, r.reason)
Xlib.error.DisplayConnectionError: Can't connect to display ":0": b'No protocol specified\n'


En internet, encontré el error del "Can't connect to display ":0": b'No protocol specified\n", algunos lo definen como un bug de Python, otros dicen que el siguiente comando soluciona el problema:

xhost +


Lo probé, ahora cuando ejecuto el script de Python, no hace nada, se queda pegado, y no funciona la cosa. PERO, hay algo que me llama la atención y me preocupa, el comando "xhost +" me da este mensaje:

access control disabled, clients can connect from any host


La página de Buanzo.com.ar describe lo que hacen los siguientes comandos así:

    "xhost +": elimina toda restriccion, cualquier cliente puede conectarse
    "xhost -": activa las restricciones, solo los clientes autorizados pueden conectarse.
    "xhost +IP": permite que la IP indicada se conecte. "xhost -IP": elimina el permiso de coneccion a la direccion IP indicada.


Desde allí no entendí bien lo que hace xhost y ahora no me parece seguro, preferí restringir el acceso cuando leía en otra página acerca de las posibilidades de que un usuario pudiera ver y controlar mi compu, CLARO, yo lo que quiero es controlar mi compu con el 3DS xDDD No que me espíe otro hahahah.

Bueno, sobre las Xlib, debo decir que al intentar correr el script con Python 2, no hace otra cosa que pegarse en lo siguiente y no hacer nada:

Xlib.protocol.request.QueryExtension


Me desespera un poco esto amigos, tengo la esperanza de que puedan ayudarme con este rollo, que me expliquen para entender, es que no entiendo porque no funciona.

Aquí está la source del programa.
https://github.com/CTurt/3DSController/


Se agradece muchísimo la ayuda. Es bienvenida como siempre, y estoy atento cuando me necesiten!

Estoy usando Arch Linux.


Saludos.
¿Estás ejecutando el script como usuario root o con sudo?
Prueba a ejecutarlo como tu usuario normal sin sudo.
SI lo he entendido bien xhost +IP permite que solo se connecte desde esa IP en cocnreto en tu caso lo que se conecta es un programa local (el 3DS Controller) asi que si pones xhost +127.0.0.1 podrá el programa conectarse (otros programas en tu pc tambien logicamente ) pero desde fuera no si eso es lo que te preocupa.
Pero bueno que no tengo la consola ni nada asi que no puedo provar.
2 respuestas