domingo, 14 de julio de 2013

Tropezando - Parte 4 - Wine y sus problemas

Una de las cosas que no quería perderme en Linux eran los juegos. Ahora que dispongo de un netbook, nada mejor que darle caña a los clásicos: Half Life, Quake 2, Starcraft... En este artículo veremos algunos de los problemas más comunes de Wine y usaré como ejemplo el dolor de cabeza que me ha supuesto un juego supuestamente compatible y más que conocido por todos: Half Life (no Steam; me lo compré en CD mucho antes de las tiendas virtuales).

PASOS TÍPICOS
Lo primero que vamos a hacer no será instalar Wine desde la línea de comandos, como he visto en tantos tutoriales. Ya que disponemos de herramientas más sencillas, ¿por qué no usarlas? Así que lo primero que haremos será instalar PlayOnLinux, un front-end de Wine que nos facilitará mucho su instalación, configuración y uso, y lo haremos desde Synaptic, un gestor de paquetes muy conocido y sencillo de usar que viene instalado en muchas distribuciones.

El primer paso es, obviamente, abrir Synaptics. Debe estar en el menú de inicio (si venimos de Windows así es como lo conoceremos... y si no, seguro que también lo entendemos), en "Herramientas del sistema". Escribimos "playonlinux" en el buscador: si aparece marcado, perfecto, ya está instalado; si no, lo marcamos, aceptamos las dependencias que nos pida y esperamos a que termine de descargarse e instalarse.

 
Ahora abrimos PlayOnLinux desde el menú "Juegos" y pulsamos el botón "Instalar".


Normalmente buscaríamos "half life" dentro de su catálogo, pero en este caso sólo encontraremos Half-Life 2 con sus expansiones y la expansión Blue Shift del primer Half-Life, pero no el juego original.


Si estuviera en esta lista no tendríamos que configurar nada: el programa se encargaría él solito de elegir una versión de Wine con la que funcionara bien, de instalar cualquier otro programa necesario (DirectX, .Net, Internet Explorer...) y de configurar Wine. Como no es el caso, nos toca hacerlo "a mano": vamos al enlace que hay en la parte de abajo de la ventana, donde pone "Instalar un programa no listado".


Recomiendo usar un nuevo entorno cada vez que instalemos un juego. Así evitaremos conflictos entre ellos, podremos eliminarlos sin dejar rastros y, sobre todo, podremos configurar cada uno con más detalle. Por contra, esto implica algo más de espacio usado...
Le ponemos un nombre bonito al entorno, dejamos (en principio) las opciones por defecto, esperamos a que Wine termine de crear el entorno, seleccionamos desde dónde queremos instalar (CD-ROM, carpeta, etc... Si lo que tenemos es una imagen de CD, antes habrá que montarla, cosa que explico un poco más adelante) y hacemos una instalación normal y corriente, como si estuviéramos en Windows.
Cuando termine, PlayOnLinux nos pedirá qué accesos directos quiere que creemos. Elegiremos el archivo hl.exe, por supuesto, y le pondremos nombre. Hala, ya debería funcionar... pero no.

USAR OTRAS VERSIONES DE WINE
Para empezar, PlayOnLinux siempre elegirá la última versión estable de Wine que tenga disponible, aunque nos permite elegir otra durante la instalación o cambiarla más adelante.
En el caso del Half-Life, la versión 1.5 (la más reciente ahora mismo) me daba muchos problemas con el sonido, ralentizaciones y, según cómo, el juego nunca pasaba del vídeo inicial. He leído reportes antiguos de que con la versión 1.20 funcionaba, pero tampoco. Al final ha funcionado con la 1.6-R5, una versión beta de la 1.6 (aún inestable).
NOTA (1/8/2013): Ya está disponible la versión 1.6 final de Wine.
Aquí viene otro problema: lo lógico sería instalar otras versiones de Wine en el sistema desde Synaptics, por ejemplo, pero luego PlayOnLinux no las reconoce. Hay que instalarlas desde el propio PlayOnLinux, en "Herramientas/Gestionar versiones de Wine".

PROBLEMAS TÍPICOS CON EL SONIDO
Es tristemente habitual que el sonido falle con algunos juegos, aunque no le ocurre a todo el mundo. Lo que más he sufrido ha sido la ausencia de sonido pasado un rato: cargas el juego y todo funciona, pero pasados unos minutos el sonido empieza a distorsionarse hasta que desaparece por completo.
El culpable no es otro que PulseAudio, un añadido para el sistema de sonido Alsa completamente innecesario pero instalado por defecto en Ubuntu y otras distribuciones. Después de probar mil soluciones y de cargarme completamente el sistema de sonido, lo único que ha resultado ha sido lo más sencillo: desinstalar el PulseAudio sin más.
Nos vamos a Synaptics, buscamos el paquete "esound" y lo marcamos para instalar. Seguidamente buscamos "pulseaudio" y lo marcamos para desinstalar. Aplicamos los cambios, reiniciamos y debería haberse solucionado el problema.

MONTAR UN DISCO VIRTUAL
Dado que tengo una versión antigua de Half-Life que, como muchos juegos antiguos, requiere tener el disco en el lector para poder jugar, la opción más sencilla es crear una imagen del CD en el disco duro que al arrancar el juego se monte ella solita, como si siempre tuviéramos el disco puesto pero teniéndolo en realidad a buen recaudo en su caja.
Los que vengan de Windows sabrán que se puede montar una imagen de disco (iso para los amigos, aunque sea bin/cue, nrg, cdi, etc...), sin necesidad de grabarla en un disco real, usando programas como Alcohol, Clone, DiscJuggler... En Linux no es necesario: el sistema trata igual a las unidades reales que a las virtuales, sin necesidad de un programa que le "engañe". El problema aquí es cómo hacerlo.
Para casos sencillitos, Gmount-iso nos puede echar un cable: tiene una interfaz muy sencilla de usar y normalmente se encuentra en los repositorios oficiales. No obstante no está nada mal saber cómo se hace desde línea de comandos para automatizar el proceso... aunque eso lo veremos después.
Otro gran problema es que sólo podemos montar imágenes en formato "iso". Si las tenemos en formato bin, bin/cue, nrg... tendremos que convertirlas a iso antes de usarlas. En este enlace hay un tutorial muy bien escrito sobre el tema, y es más sencillo de lo que parece.

AUTOMATIZAR EL MONTADO DE IMÁGENES
Dejemos algo claro: cuando quiero jugar, lo que quiero es encender el ordenador, pinchar el icono del juego y verlo cargar, no pelearme con otro programa ni meter códigos arcanos en una terminal. Así que me puse a investigar cómo conseguir que el acceso directo se encargara de montar el disco y ejecutar el juego sin darme la tabarra.
Lo primero será crear un script que monte el disco. Podemos usar los mismos comandos que vimos en el tutorial que acabo de enlazar, pero ¿cómo creo el script? Pues no es tan difícil. Primero creamos un archivo de texto plano con cualquier editor. En la primera línea ponemos #!/bin/bash, en la segunda # -*- ENCODING: UTF-8 -*-, en las siguientes el código que queremos que se ejecute y, por último, una línea en la que ponga exit. Una precaución: como tanto mount como umount piden clave, siempre van precedidos por sudo, pero sudo sólo funciona en terminal y nosotros queremos ejecutarlo en el entorno gráfico, así que lo sustituiremos por gsudo. Otra precaución: a priori no sabremos si nuestra unidad virtual ya está siendo usada por otro disco, así que vamos a tomar la precaución de desmontar lo que haya antes de montar la nuestra. A todo esto, los CDs suelen montarse en un directorio dentro de /media/.
Una vez preparado el montaje, también queremos que se ejecute el juego. No hay más que buscar uno de los accesos directos que ha creado PlayOnLinux (pueden estar en el escritorio y/o en "/usr/share/applications"), editarlo con cualquier editor de texto y buscar donde pone "exec=": ésa es la orden que arranca el juego... y es ésa la que cambiaremos por nuestro script.
Como ejemplo, nuestro archivo debe tener dentro lo siguiente:
#!/bin/bash
# -*- ENCODING: UTF-8 -*-
gksudo -S "umount -t iso9660 /media/VCD"
gksudo -S "mount -t iso9660 -o loop /mnt/datos/isos/half_life.iso /media/VCD"
/usr/share/playonlinux/playonlinux --run "Half Life"
exit
Yo he creado un disco virtual llamado VCD, pero podéis usar el nombre que os salga de las gónadas (si ya habéis instalado el juego en Wine, mejor usad el mismo directorio que entonces; de lo contrario, toca configurar Wine para que tome este directorio como disco virtual). Ídem para el nombre de la iso, que en mi caso se llama "half_life.iso" y está en el directorio "/mnt/datos/isos/", y para el acceso directo de PlayOnLinux, al que he llamado "Half Life" (esta línea es la que he copiado del acceso directo).
Ahora guardamos nuestro script donde nos apetezca, aunque recomiendo tenerlo en nuestra home, en una carpeta que podamos recordar; en mi caso he usado el directorio "home/mi_usuario/scripts". Hacemos click con el botón secundario sobre nuestro archivo, nos vamos a "Propiedades" y marcamos la casilla pertinente para convertirlo en un archivo ejecutable.
Ahora podemos editar el acceso directo (ya sea el del escritorio o el de /usr/share/applications/) cambiando el "exec=" por "directorio_del_script/nombre_del_script.sh".
Si todo ha salido bien, cuando arranquemos nuestro juego nos pedirá dos veces la clave y el juego no volverá a dar la tabarra con lo de que no encuentra el CD. Si no... pues toca revisarlo todo hasta que funcione.

Ya funciona todo, pero no me gusta que pida contraseña cada vez que quiera jugar. Ahora viene una parte delicada:para cambiar esto hay que tocar cierto archivo de sistema que controla todos los permisos del equipo. Quedáis avisados: esta parte es sólo para onvres de pelo en pecho. =:P
No asustarse, que tampoco es para tanto: abrimos una terminal, escribimos "sudo visudo", se nos abrirá un editor de texto old style con un archivo más feo que el de los Goonies, nos vamos hasta el final del archivo y añadimos estas dos líneas:
usuario ALL=NOPASSWD: /bin/mount
usuario ALL=NOPASSWD: /bin/umount
Donde usuario es, obviamente, el nombre que uses en tu ordenador.
Pulsamos  Ctrl+O, Enter y Ctrl+X para salir. Con esto ya hemos conseguido que sudo no nos pida contraseña al usarlo con las órdenes mount y umount.

P.D.: Pedazo de tocho me ha quedado. Y porque sólo he puesto lo que ha funcionado, que si no... bueno, si no habría lectura para tres días, que es lo que me he tirado leyendo documentación, buscando en Google y consultando casos parecidos para cada problema.
Como siempre, se aceptan correcciones, críticas, chistes verdes, interjecciones en sueco, etc...

En la próxima entrada... ni idea, la verdad. Lo mismo os hablo de cómo crear atajos de teclado que de instalar el Quake 2 nativo, o de cómo conseguir que el Half Life funcione a resoluciones raras... o de cómo hacer un pollo al limón sencillito pero muy sabroso, según me dé la vena.

Actualización a día 3 de Agosto de 2013: Me han pasado una versión de Half-Life "sin Steam" pero basada en la de Steam. Unos aficionados le han hecho unos arreglos para que vaya más fluida y sin algunos de los bugs del oficial, y además no requiere andar montando discos ni nada de eso. Esta versión funciona mejor bajo Wine 1.5 que bajo el 1.6, pero no se puede editar la resolución "a pelo" (en la antigua se puede modificar el ejecutable para que reconozca pantallas panorámicas) y me ha dado algunos problemas con el sonido. Volveré a editar cuando consiga arreglar este problema... si lo consigo.
Actualización a día 12 de Agosto de 2013: Ya resolví el problema, tanto en Half-Life como en otros programas: el puñetero PulseAudio haciendo de las suyas. Ya he añadido este detalle a la entrada...
Actualización a día 22 de Noviembre de 2014: Pequeños fallos corregidos (¡Autotalibán ortográfico al rescate!). Añadir que me animé a registrar mi copia original (un CD de cuando lo distribuía Sierra) en Steam, lo instalé desde el cliente de Steam para Linux y ahora funciona perfectamente, sin Wine ni CD. Y de paso me regalaron todas las expansiones y alguna cosilla más. No obstante, creo que esta información puede ser útil como guía de PlayOnLinux.

No hay comentarios:

Publicar un comentario