Lutris: Juegos en el ODROID-H2

Durante aproximadamente veinte años, la comunidad de Linux ha seguido intentando hacer del año actual "el año del escritorio de Linux", un momento mítico en el que la popularidad del escritorio de Linux superaría al de Windows. Desafortunadamente, aún no ha sucedido, pero al menos en un aspecto, Linux está ganando popularidad: el soporte para juegos. Con la llegada de Wine, Steam y Vulkan, cada vez más juegos se pueden jugar en sistemas Linux, liberando a los jugadores del temido ciclo de la muerte de Windows Update. Ten en cuenta que los juegos de Linux no son algo para el usuario principiante de Linux (todavía), aunque los usuarios con experiencia pueden llegar a disfrutar más configurando el entorno que jugando al propio juego.

En este artículo analizaremos brevemente lo que se necesitas para configurar un sistema de juego básico en un ODROID-H2, el cual está disponible en la tienda de Hardkernel en https://www.hardkernel.com/shop/odroid-h2/. Como ya sabes, el ODROID-H2 está basado en la arquitectura Intel y puede ejecutar muchos más juegos que el ODROID-XU4. Veremos hasta dónde podemos llegar. Ten en cuenta que puesto que el ODROID-H2 no es un verdadero "PC de juegos", no esperes milagros, pero puede ejecutar juegos de hace 5 a 10 años con un rendimiento bastante decente. Desafortunadamente, Linux sufrirá una cierta degradación en el rendimiento cuando se ejecuten juegos de Windows, ya que las distintas capas de adaptación añaden la correspondiente sobrecarga al sistema.

Presentando Lutris

Lutris es una plataforma de juegos de código abierto para Linux que puede instalar y lanzar juegos, reduciendo la dificultad de las configuraciones. Puede ejecutar juegos de plataformas online como GoG, Steam o Battle.net, pero también puede gestionar juegos de otras plataformas (desde Amiga a DOS, Windows, Linux nativo o juegos de navegador). La plataforma tiene varios scripts que se encargan de descargar el juego deseado y de aplicar los parches/cambios necesarios para que se ejecute lo mejor posible. Puedes echar un vistazo a la lista de juegos compatibles de su sitio web https://lutris.net/games/, o buscar un juego en concreto dentro de la aplicación.

Las instrucciones de instalación están disponibles en https://lutris.net/downloads/. Los pasos que se muestran a continuación se han llevado a cabo en una imagen de Ubuntu 19.04 que se ejecuta en ODROID-H2. Las instrucciones en video están disponibles en https://youtu.be/oHDkeQ9eDrc.

$ sudo add-apt-repository ppa:lutris-team/lutris
$ sudo apt-get install lutris
Cuando estés en el intérprete de comandos, también debes instalar Wine si tienes pensado ejecutar juegos de Windows (yo usé la versión estándar de Ubuntu):
$ sudo apt-get install wine
Algunos juegos pueden requerir diferentes versiones de Wine (o Wine mejorado con proton), aunque puedes instalarlos desde la sección Wine Runners dentro de Lutris. Cada Wine puede tener su propio entorno (llamado Bottle) para que puedan coexistir múltiples versiones.

Para los juegos de Windows, puede instalar una capa adicional llamada DXVK que realiza la conversión de DirectX 11 a Vulkan. En primer lugar, necesita instalar los drivers Vulkan:

$ sudo apt install mesa-vulkan-drivers mesa-vulkan-drivers:i386
También puedes instalar vkmark, que es un indicador de rendimiento para Vulkan similar a glmark. Ejecutándolo debería demostrar que el soporte vulkan funciona como es debido en tu sistema Ubuntu. La herramienta necesita ser compilada, así que puede seguir estos pasos:
$ sudo apt install meson libvulkan-dev libglm-dev libassimp-dev libxcb1-dev libxcb-icccm4-dev libwayland-dev libdrm-dev libgbm-dev git
$ git clone https://github.com/vkmark/vkmark.git
$ cd vkmark
$ meson build
$ ninja -C build
$ sudo ninja -C build install
Ahora puede ejecutar vkmark y ver la demo representada con la API de Vulkan.

Figure 1 - Vkmark in action
Figura 1 - Vkmark en acción

Ahora, las aplicaciones de Linux que saben cómo usarla pueden utilizar la API de Vulkan. Ahora podemos agregar la capa de conversión DXVK (https://github.com/lutris/lutris/wiki/How-to:-DXVK), que es tan fácil como escribir el siguiente comando:

$ sudo apt-get install dxvk

Gestión de Lutris

Ahora que tenemos todo configurado, necesitamos añadir juegos a Lutris. Puede iniciar Lutris o navegar por su sitio web, buscar el juego que deseas instalar y hacer clic en Install. También debes gestionar tus “runners”, que son programas externos que son necesarios para ejecutar juegos emulados. Puede hacer clic en el icono de Lutris (arriba a la izquierda) y seleccionar "Manage Runners". Desde la lista, puede activar las plataformas que quieres usar (por ejemplo, DosBox, ScummVM, Wine, etc.). Desde aquí, también puede configurar varias opciones específicas para un “runner” en concreto.

Figure 2 - Manage runners
Figura 2 - Gestionar runners

Ahora podemos descargar e instalar algunos juegos. Empecemos con algo simple: un juego nativo de Linux como Super Tux Kart. Puede buscar el título en la barra de búsqueda de Lutris, resáltalo y haz clic en Install. El instalador te hará algunas preguntas, así que responde lo mejor que puedas.

Figure 3 - Super Tux Kart
Figura 3 - Super Tux Kart

Una vez que el instalador finalice, puedes iniciar el juego desde el menú.

Figure 4 - Super Tux Kart - playthrough
Figura 4 - Super Tux Kart - Playthrough

Ten en cuenta que, incluso si el juego se ejecuta sin problemas, en el ODROID-H2 algunas texturas pueden verse defectuosas, lo que probablemente se deba a la implementación de los drivers Intel. Al menos la instalación no tiene problemas.

Por ejemplo, para instalar algo de GoG, debe iniciar sesión en GoG a través de Lutris. Primero busca el juego GoG deseado (por ejemplo, Tyrian2000). Se te solicitarán tus credenciales de GoG y, a continuación, el juego se descargará e instalará perfectamente.

Figure 5 - GoG installation
Figura 5 - Instalación de GoG

Intentemos ahora algo más complicado que tu ODROID-XU4 por lo general no puede hacer. Para instalar juegos de Steam (ya sea de Linux o Windows), primero debes instalar el cliente Steam:

$ sudo apt-get install steam

Puedes instalar los juegos de Steam de dos formas: ya sea a través de Steam o a través de Lutris. Para el primer caso, debes iniciar Steam e iniciar sesión con tu cuenta, entra en tu biblioteca de juegos e instala un juego en local. Una vez instalado, puede volver a Lutris y agregarlo al lanzador seleccionando "+" -> Import Games -> Steam. Marca el juego/juegos que quieres importar y selecciona Import Games.

Yo Instalé Team Fortress 2 (que es gratis en Steam) directamente desde Lutris, buscándolo en la pestaña de búsqueda de Lutris, haciendo clic en install y esperando a que terminase. El juego funcionaba bien (como era de esperar) bajo Linux.

Puede haber casos en los que tengas una copia local de un juego (de una copia de seguridad o una instalación original) que quiera instalar, o tal vez quieras instalar un juego no compatible (o uno legalmente cuestionado). También lo puedes hacer. En mi caso, quería instalar la versión para Windows de Lucas Chess (https://lucaschess.pythonanywhere.com/). Los pasos son los siguientes:

Descargar el instalador

Dentro de Lutris, selecciona "+" -> Add game. Dale un nombre y selecciona el runner correcto para ese juego. En mi caso, fue el wine

Figure 6 - Add manual game
Figura 6 - Añadir un juego manual

En la pestaña Game Options, selecciona el ejecutable del instalador dentro del campo Executable. Probablemente no necesites añadir ningún argumento. El campo Wine prefix generalmente estará fijado como ~/Games/Nombre_del_juego y mantendrá el entorno del wine y los datos del juego. Lo ideal es que no se superponga con otros juegos.

Figure 7 - Game options
Figura 7 - Opciones de juego

En la pestaña Runner Options, puede seleccionar la versión de wine que quieres utilizar (puede instalar varias versiones de wine desde Manage Runners -> Wine). También puede activar el soporte DXVK si lo necesitas.

Figure 8 - Runner Options
Figura 8 - Opciones de Runner

Haga clic en “save” y ahora podrás usar la nueva entrada para ejecutar el instalador. El instalador debe continuar como si estuviera ejecutandose en Windows, y cuando finalice, deberás editar el lanzador del juego (presiona el símbolo de configuración en forma de rueda dentada junto a Play), vuelve a las Opciones de juego y cambiar el archivo ejecutable el juego para que apunte al juego instalado en lugar del instalador (puedes buscar el ejecutable del juego).

Si tienes problemas de fuentes con tu programa, puedes instalar las fuentes que te falten de Windows haciendo clic derecho en el título del juego (o haciendo clic izquierdo y seleccionando desde el panel derecho) y seleccionando Winetricks -> Select the default wineprefix -> Install a font -> allfonts. Llevará un tiempo, pero asegúrate de volver a intentar ejecutar el juego después. También hay configuraciones de Windows que puedes cambiar desde Winetricks, como fontsmooth=rgb por ejemplo.

Figure 9 - Running a manually installed game
Figura 9 - Ejecutando un juego instalado manualmente

Hice una prueba con GTA V para ver cómo funcionaban los juegos de última generación en el ODROID-H2. Bajo Windows, se ejecuta a unos 20-30 fps con toda la configuración al mínimo y a una resolución de 800x600. Bajo Linux, se ejecuta a unos 15-25 fps con la misma configuración, aunque a veces “tironea”. Así que baja un poco el rendimiento, aun así, se puede jugar decentemente. Para un jugador casual y entusiasta de Linux puede valer la pena. ¡Imagínate lo bien que deben ejecutarse los juegos con una GPU de última generación!

Lograr que los controles funcionen

El mando Gamesir G3w que vende Hardkernel debería funcionar directamente en Windows sin configurar nada. Sin embargo, no estamos en Windows, así que necesitamos hacer algunas modificaciones. Ten en cuenta que el mando tiene dos modos de funcionamiento: Xiaoji Gamesir-G3w (dos LED encendidos) y un modo Xbox 360 (un LED rojo). Puedes cambiar entre los modos manteniendo presionado el botón central "GameSir" durante unos 10 segundos. El modo Xbox 360 es bueno para Android (busca Octopus en la Play Store), pero para Linux necesitas el modo Xiaoji Gamesir-G3w. Puedes verificar su modo actual comprobando este ID USB (ten en cuenta que mi Ubuntu lo reporta como Apple, pero en realidad no lo es):

$ lsusb | grep 05ac:055b
Bus 001 Device 007: ID 05ac:055b Apple, Inc.
Ahora puedes instalar jstest-gtk para probar los botones:
$ sudo apt-get install jstest-gtk
Si no recibes respuesta, lo más probable es que tu usuario no forme parte del grupo "input", así que asegúrate de agregarte a ese grupo y volver a iniciar sesión.

Figure 10 - Joystick test
Figura 10 - Prueba de joystick

En realidad, utilizar un mando depende del juego/emulador que se use. Algunos juegos (como Need for Speed 2 SE https://github.com/zaps166/NFSIISE) admiten el gamepad como un joystick pre-configurado. Tan solo debes asignar los botones de tu joystick a las acciones del juego.

Figure 11 - Native joystick support
Figura 11 - Soporte de joystick nativo

Para otros juegos, es posible que tengas que asignar eventos de joystick a las teclas. Puedes hacerlo con la aplicación qjoypad:

$ sudo apt-get install qjoypad
Estoy intentando añadir compatibilidad de mando para un antiguo juego de DOS llamado Prehistorik 2. Solo necesita Izquierda/Derecha/Arriba/Abajo y Espacio, que es el botón de disparo. Para ello, creamos un nuevo perfil llamado "Pre2" (después de iniciar la aplicación, puedes seleccionar la ventana principal desde el icono de la barra de estado). La forma más fácil es seleccionar "Quick set" y se te pedirá que presiones un botón en el mando, seguido de una tecla para emularlo

Figure 12 - Joypad mapping
Figura 12 - Mapeo del Joypad

Para concluir, sería mejor ajustar el perfil correcto al iniciar el juego. Puedes hacerlo editando game settings -> System options -> "Show advanced options". Puedes configurar la ruta de acceso a un script (lamentablemente todavía no tiene parámetros) que ejecutará qjoypad con el perfil correcto antes de iniciar el juego. Crea el siguiente script, guárdalo y márcalo como ejecutable:

$ cat Games/pre2/qjoypad.sh
#!/bin/bash
/usr/bin/qjoypad Pre2
$ chmod a+x Games/pre2/qjoypad.sh
En la lista, busca "Pre-launch command" y agrega "/home/odroid/Games/pre2/qjoypad.sh". ¡Guarda y disfruta! (Muchas gracias a @meveric por su ayuda para hacer funcionar el gamepad)

Android via anbox (Android directo)

¿Qué pasa si tienes algunos juegos de Android a los que quieres jugar? Afortunadamente, no es necesario realizar un arranque dual para Android: ¡puedes ejecutar aplicaciones de Android en un contenedor Linux con anbox!

Ten en cuenta que el proyecto aún es joven y solo ofrece una versión beta con la que poder jugar, de modo que pueden aparecer bloqueos ocasionales, aunque gracias a la magia de Linux y la incorporación de dos módulos del kernel de Android, puede ejecutar una imagen Android 7.1.1 con núcleo x86 sobre la cual puede instalar tus aplicaciones, aunque no todas las aplicaciones llegarán a funcionar. Puedes encontrar las instrucciones de instalación en https://github.com/anbox/anbox/blob/master/docs/install.md.

$ sudo add-apt-repository ppa:morphis/anbox-support
$ sudo apt install anbox-modules-dkms
$ sudo modprobe ashmem_linux
$ sudo modprobe binder_linux
$ sudo snap install --devmode --beta anbox
Aparecerá un icono lanzador en tu GUI de linux (tenía el mío en Otros) llamado Android Application Manager que se puede usar para iniciar el lanzador de aplicaciones.

Figure 13 - Android Application Manager
Figura 13 - Administrador de aplicaciones de Android

Ahora que Android lo tienes funcionando, ¿cómo instalamos aplicaciones (supongo que te has cansado de jugar con la Calculadora)? Vamos a instalar Play Store (y soporte para aplicaciones ARM a través de libhoudini) siguiendo la sencilla guía de https://www.linuxuprising.com/2018/07/anbox-how-to-install-google-play-store.html.

$ sudo apt-get install git
$ git clone https://github.com/geeks-r-us/anbox-playstore-installer.git
$ cd anbox-playstore-installer/
$ sudo ./install-playstore.sh
$ sudo apt-get install lzip
$ sudo ./install-playstore.sh
Asegúrate de proporcionar todos los permisos requeridos por Google Play y Google Services en Android Settings -> Apps -> … -> Permissions, de lo contrario, te encontrarás con errores extraños.

Figure 14 - All the permissions
Figura 14 - Todos los permisos

Cuando inicies Play store, te pedirá que inicie sesión con tu cuenta, lo cual debería funcionar en tu caso. En mi caso, intente iniciar sesión con la cuenta de mi hijo, que está vinculada a Google Family (para supervisión de los padres) y el inicio de sesión falló porque el dispositivo emulado carecía de algunas funciones de seguridad requeridas por Google. Sin embargo, hay otra forma de instalar aplicaciones: puedes usar adb para descargar cualquier apk:

$ sudo apt-get install adb-tools
$ adb devices
List of devices attached
* daemon not running; starting now at tcp:5037
* daemon started successfully
emulator-5558 device
$ adb install F-Droid.apk

Conseguido

Me dirigí a F-Droid, la tienda de aplicaciones alternativa de código abierto (https://f-droid.org/en/), y desde allí logré instalar un simple juego llamado Reckoning Skills (https://f-droid.org/en/packages/org.secuso.privacyfriendlyrecknoningskills/) pensado para desafiar las habilidades matemáticas de mi hijo.

Figure 15 - F-Droid
Figura 15 - F-Droid

Si tiene problemas, puedes reiniciar tu dispositivo Android emulado con:

$ sudo snap restart anbox
Puedes obtener (¡un montón!) de registros log con adb logcat si quieres solucionar algún problema, y si necesitas acceder a la partición "userdata", puede encontrar sus archivos en /var/snap/anbox/common/data/data

Añadir aplicaciones de Android a Lutris

Tener contenido reproducible desde Android eta muy bien, pero tal vez te gustaría tenerlo integrado en un único lanzador. Para hacer esto, necesitas localizar el nombre del paquete de la aplicación deseada (identificador del programa) y la actividad de entrada (la ventana de inicio). Necesitarás conectarte a través de adb mientras la aplicación deseada se esté iniciando en primer plano y ejecutar:

$ adb shell
x86_64:/ $ dumpsys window windows | grep -E 'mCurrentFocus'
mCurrentFocus=Window{67dc1f0 u0 org.secuso.privacyfriendlyrecknoningskills/org.secuso.privacyfriendlyreckoningskills.activities.MainActivity}
La cadena resaltada en naranja es el nombre del paquete de la aplicación actual, mientras que la cadena azul es el nombre de la actividad. Con esta información, ahora puede iniciar esta aplicación de Android desde un shell (será mejor que los copies/pegues en lugar de escribirlos):
$ anbox launch --package=org.secuso.privacyfriendlyrecknoningskills --component=org.secuso.privacyfriendlyreckoningskills.activities.MainActivity
Ahora puedes añadir una entrada manual para tu juego bajo Lutris. Selecciona el runner nativo de Linux y añade /snap/bin/anbox como ejecutable. Deberás agregar launch --package = org.secuso.privacyfriendlyrecknoningskills --component = org.secuso.privacyfriendlyreckoningskills.activities.MainActivity en la entrada de parámetros (sin comillas). Guarda y disfruta de tu nuevo lanzador.

Figure 16 - Launching an Android game from Lutris
Figura 16 - Lanzando un juego de Android desde Lutris

Ten en cuenta que incluso si la configuración actual es defectuosa o tediosa, anbox mejora con cada versión liberada, espero que su integración con Lutris mejore en el futuro. Espero que esta guía sobre el mundo de los juegos en Linux te haya ayudado a empezar. Si te quedas atascado en el algún momento, puedes pedir ayuda en el hilo de soporte en https://forum.odroid.com/viewtopic.php?f=172&t=35311&p=258763#p258763.

Be the first to comment

Leave a Reply