sábado, 22 de noviembre de 2014

Tropezando - Parte 16 - Introducción a Wine con PlayOnLinux

Es bien sabido que los programas de un sistema operativo no funcionarán en otro. Más concretamente, los programas de Windows no funcionan en Linux. Y hay muchos programas de Windows que no tienen un equivalente aceptable en Linux. Para eso tenemos a Wine.
Pero Wine es... complicado. Ciertos programas sólo funcionan en versiones específicas de éste, y no es plan de estar instalando y desinstalando distintas versiones todo el día. Además, su configuración no siempre es muy intuitiva. Para eso tenemos PlayOnLinux.
Hoy vamos a ver cómo usar PlayOnLinux para instalar programas de Windows sin emuladores o máquinas virtuales que causen pérdida de rendimiento.
Ya he hablado antes de Wine y PlayOnLinux aquí (instalación y un ejemplo de uso) y aquí (en sistemas de 64 bits), además de usarlo aquí y aquí. Esta vez quisiera explicar su uso de forma más genérica.

Antes de nada

PlayOnLinux (POL) es un front-end, esto es, un gestor de otro programa, en este caso Wine. Nos ayudará a gestionar versiones de Wine, crear unidades virtuales, instalar y desinstalar programas, agregar paquetes y librerías y muchas cosas más.
Además, incluye una lista de programas "autoinstalables". Muchos usuarios prueban programas, ajustan la configuración necesaria y suben esos datos a los servidores de POL, por lo que cuando otro usuario quiere instalar el mismo programa no tiene más que elegirlo en la lista y todo el entorno se configurará automáticamente con la seguridad de que funcionará sin problemas.

Wine es un programa que añade una capa de compatibilidad implementando las APIs de Windows.
Explicado mal y pronto: Los ejecutables, en sí mismos, deberían funcionar en cualquier sistema operativo mientras usen el mismo procesador; en definitiva, no son más que paquetes con el código máquina en ellos.
Uno de los problemas es que estos paquetes tienen "cabeceras" (información extra sobre el archivo) diferentes dependiendo del sistema para el que hayan sido creados, y es una de las cosas que Wine traduce sin problemas.
Otra gran parte del problema son las APIs, esto es, librerías del sistema operativo que los programas utilizan para ahorrar mucho trabajo a los programadores. Así, los menús en pantalla, los accesos a memoria o el uso de funciones gráficas son gestionadas por el sistema operativo mediante estas librerías. Una de las cosas que hace Wine es utilizar APIs creadas para Linux pero compatibles con las de Windows. De aquí viene la enorme mayoría de problemas de compatibilidad de Wine: muchas de las librerías de Windows no están documentadas o no hacen exactamente lo que se supone que deben hacer, y a los desarrolladores de Wine les cuesta sudor y lágrimas crear otras compatibles, investigando qué hacen realmente las librerías originales.
Como se ve, no se emula ningún procesador, ni se convierte código ni se divide el ordenador en dos (como en las máquinas virtuales), sino que se añaden las librerías que necesitan los programas de Windows, de forma que éstos pueden funcionar de forma nativa. Eso permite un gran rendimiento, hasta el punto de que a menudo estos programas funcionan más rápido en Linux bajo Wine que en Windows.

Una unidad virtual de Wine es una carpeta en cuyo interior encontraremos  la típica estructura de directorios de Windows, así como archivos de sistema, un registro, etc...
En el caso de PlayOnLinux, también incluye datos de configuración de Wine, la versión de éste a usar e información sobre carpetas virtuales (otras unidades de disco, por ejemplo).
Cada unidad virtual es completamente independiente de las demás, hasta el punto de que los programas de una no pueden interferir en los de otras.

 

Preparando PlayOnLinux

Lo primero que se debería hacer al ejecutar el programa tras su instalación es ir a "Herramientas/Gestionar versiones de Wine". Ahí podremos descargar e instalar todas las versiones que necesitemos. Suele ser buena idea descargar la última disponible, ya que será la que tenga mejor compatibilidad, pero es posible que otros programas requieran versiones específicas. Siempre podremos añadir las que necesitemos sobre la marcha, y podemos tener tantas como queramos.

 Instalando un programa listado


- Pulsamos en "Instalar".
- Lo buscamos por categorías o usando el pequeño buscador que se nos ofrece, lo seleccionamos y pulsamos en "Instalar".
- Empezará a crearse una unidad virtual con todo lo necesario.
- Nos pedirá la ruta del instalador (ya sea un ejecutable o un disco).
- Instalamos el programa normalmente.
- A correr. Nuestro programa debería funcionar perfectamente. Rápido, fácil y para toda la familia.

 

Instalando un programa no listado

- Pulsamos en "Instalar".
- Pulsamos en "Instalar un programa no listado".
- Recomiendo usar una unidad virtual diferente para cada programa, aunque podemos aprovechar una existente. Eso va a gustos...

Si hemos optado por crear una unidad virtual:
* Nos pide que le pongamos un nombre. Sed creativos. =;D
* Seleccionamos "Use otra versión de Wine". Las otras dos opciones no suelen ser necesarias, pero las explicaré igualmente.
* Elegimos la versión de Wine que queramos, habitualmente la más reciente, a no ser que la aplicación no funcione con ésta o que ya sepamos cuál debemos usar. Estará un rato creando la nueva unidad virtual. Paciencia...
* Si hemos marcado la opción "Configurar Wine", ahora se nos abrirá la herramienta para ello. Hacemos los cambios pertinentes y pulsamos en "Aceptar".
* Si hemos marcado la opción "Instalar librerías" nos aparecerá un cuadro con todas las librerías disponibles. Marcamos las que necesitemos y PlayOnLinux las descargará e instalará. Algunas requieren confirmación, así que habrá que estar atentos.

- Nos preguntará dónde está el instalador de nuestro programa. Lo buscamos y aceptamos.
- Se realiza la instalación normal del programa.
- PlayOnLinux nos muestra los ejecutables que se han creado en la unidad virtual. Seleccionamos el que se encargue de abrir el programa para que nos cree un acceso directo.

- Nos pide un nombre para el acceso directo, y pone por defecto el nombre del ejecutable. Lo podemos cambiar o no, que eso son gustos.
- Nos vuelve a preguntar por los accesos directos. Si nuestro programa tiene más de un ejecutable importante (por ejemplo, juegos que tienen un lanzador y un programa aparte para configuración), lo elegimos y repetimos los pasos anteriores. Si no, elegimos "no quiero crear otro atajo" y listo.
- ¡Hecho! Nuestro programa está instalado. Ahora falta ver si funciona.

 

¿Y si no funciona?

Podemos probar con otras versiones de Wine.
También es posible que nos salga un error que nos informe de que falta algún paquete importante. Los más típicos: algún .Net Framework, DirectX9, Microsoft Corefonts (si nos falta algún tipo de letra, o éstas se ven mal), Gecko...
Lo mejor suele ser ir a la base de datos de WineHQ, donde tienen información sobre la compatibilidad y requerimientos de miles de programas en distintas versiones de Wine. Si nuestro programa está ahí, es probable que encontremos información sobre su instalación: paquetes necesarios, versiones de Wine en las que funciona, etc...
Hecho esto, podemos cambiar nuestra unidad virtual o, en el peor de los casos, crear una nueva y repetir todo el proceso.

 

Configuración y otros retoques

Pulsando el botón "Configuración" se abre un nuevo panel. A la izquierda tenemos las unidades virtuales y los programas instalados en ellas.

 

Cambiar la versión de Wine a usar

 - Seleccionamos la unidad que queremos cambiar.
- Vamos a la pestaña "General".
- Donde pone "Versión de Wine", la cambiamos por la que queramos.
- ¡Importante! Entramos en la pestaña "Wine" y pulsamos el botón "Reparar la unidad virtual".

 

Añadir paquetes a una unidad virtual existente

- Seleccionamos la unidad que queremos cambiar.
- Vamos a la pestaña "Instalar componentes".
- Seleccionamos los componentes que necesitemos y pulsamos "Instalar".
Wine se encargará de descargar e instalar los paquetes.

 

Gestionar Wine

- Seleccionamos la unidad que queremos cambiar.
- Vamos a la pestaña "Wine".
 
"Configurar Wine" abre el menú de configuración de Wine. Por norma general no es buena idea tocar mucho aquí, aunque hay algunas cosas muy útiles:

- En "Versión a imitar" podemos elegir qué versión de Windows queremos emular (sí, ya sé que no es una emulación). Esto es útil para programas muy antiguos o muy recientes, sobre todo para los que comprueban que están en una versión concreta antes de arrancar.
- La opción "Capturar el ratón automáticamente en pantalla completa", en la pestaña "Gráficos", puede ser necesaria en algunos juegos.
- En "Unidades" se puede montar una imagen de disco siempre que haya sido previamente montada en Linux, lo cual es imprescindible para ciertos juegos que comprueban la presencia del disco en el lector. ¡Ojo! Esto hay que hacerlo antes de la instalación del juego en cuestión, porque los muy puñeteros suelen buscar el disco en la misma unidad desde la que se instaló. Es una de las cosas que más dolores de cabeza me ha dado (hasta el punto de que suelo buscar craks para mis juegos originales).

"Editor del registro" es precisamente eso, nuestro viejo amigo Regedit.

"Reinicie Windows" es muy útil cuando algún programa que normalmente funciona bien empieza a dar problemas.

"Reparar la máquina virtual" nos permite arreglar problemas causados por una mala configuración o simplemente por trastear demasiado. Es muy recomendable hacerlo si le cambiamos la versión de Wine a usar.

"Línea de comandos" es el viejo CMD, MS-DOS style, tal cual.

"Administrador de tareas" es precisamente eso.

"Matar procesos" nos permite detener todos los programas que estén funcionando en esa unidad virtual, incluyendo los de sistema.

"Desinstalador" nos permitirá desinstalar programas de la unidad virtual. Es parecido al menú "Instalar y desinstalar programas" o "Programas y características" del panel de control de Windows.

 

Eliminar una unidad virtual

- Seleccionamos la unidad que queremos cambiar.
- Pulsamos el botón "Quitar".

 

Eliminar un acceso directo

- Seleccionamos el acceso directo que queremos cambiar.
- Pulsamos el botón "Quitar".

 

Otras

- Seleccionamos la unidad que queremos cambiar.
- Vamos a la pestaña "Miscelánea".

 "Abrir una shell" abrirá el entorno de línea de comandos de PlayOnLinux. No confundir con la opción "Línea de comandos" de Wine: ésta se parece más a la de Unix que a la de MS-DOS, y sirve para tareas distintas.

"Ejecutar un archivo .exe en esta unidad virtual" nos permitirá abrir un programa cualquiera y que los cambios que haga afecten únicamente a esta unidad. Muy útil para cracks, keygens y demás guarreridas.

 Asociar un tipo de archivo a un programa en POL

De poco nos sirve instalar, por ejemplo, Word, si al abrir un documento desde una carpeta éste se abre con, por ejemplo, OpenOffice. Hay varias maneras de solucionar esto, pero la que me ha funcionado  la primera es la siguiente:
- Vamos a "Opciones/Asociaciones de archivo".
- Pulsamos en el botón "Instalar un programa".
- Escribimos la extensión del tipo de archivo que queramos asignar (por ejemplo, doc o docx).
- La seleccionamos en el panel y elegimos el programa adecuado en la lista "Programa asignado" .
- Pulsamos en "Aplicar" .
- Reiniciamos PlayOnLinux (cerrarlo y volverlo a abrir) .
Esto debería ser suficiente, pero a mí me ha hecho falta hacer un paso extra:
- Vamos a "Configurar" .
- Seleccionamos el acceso directo del programa .
- En la pestaña "General", buscamos el cuadro "Argumentos" y copiamos ahí lo siguiente:
'$(echo $@ | sed -e '"'"'s:/*/:\:g'"'"')'

- En el gestor de archivos, buscamos un archivo con la extensión deseada y lo asociamos a PlayOnLinux (permanente)


Bueno, esto es todo por hoy. Un post extenso y un poco pesado, pero creo que muy necesario. 
Para la próxima... no tengo ni idea. Quizá os cuente cómo he conseguido usar los botones extra de mi ratón (un Logitech G3), no sé.
Como siempre, los comentarios están abiertos. Podéis usarlos para escribir vuestro diario,  hacer la lista de la compra, reivindicar vuestras (asurdas) preferencias políticas... lo de siempre. =;D

Actualización 28/11/2014: Añadido método de asociaciones de archivos.

3 comentarios:

  1. Hola.

    Antes de todo, agradezco la información y el tiempo dedicado a ella, muy completa.

    Tengo una consulta. Tengo un equipo donde hay dos usuarios. En uno de ellos instalé un programa X, pero resulta que el segundo usuario también utiliza el programa X, por lo que también lo necesita tener instalado y no aparece, por defecto en el segundo usuario.

    ¿Qué debo hacer?
    - ¿Reinstalar en este usuario una nueva copia del programa X? Duplicando el espacio utilizado del disco duro.
    - ¿Existe alguna manera de asignar que el segundo usuario tenga acceso a la unidad virtual del primer usuario (que es donde, hasta el momento, está instalado el programa X)?

    Saludos.

    ResponderEliminar
    Respuestas
    1. Las unidades virtuales de PlayOnLinux se encuentran en la carpeta personal del usuario , con lo que es norma que el otro usuario no pueda ver esos programas: la carpeta personal de un usuario es inaccesible por los demás usuarios por temas de seguridad. No obstante, se puede hacer "trampa":

      - La primera opción sería copiar la unidad virtual completamente desde la carpeta de un usuario hasta la del otro.
      Abrimos el navegador de archivos que tengamos instalado (Nautilus, Dolphin, Konkeror...) como administrador, abrimos la carpeta "/home/usuario1/.PlayOnLinux/wineprefix" (¡Ojo! La carpeta .PlayOnLinux está oculta; hay que pulsar Ctrl+H para desocultarla), copiamos la carpeta de la unidad virtual que queremos duplicar, nos vamos a la misma ruta pero del otro usuario ("/home/usuario2/.PlayOnLinux/wineprefix") y pegamos la carpeta ahí.
      Con eso, la unidad virtual ya debería aparecer disponible en PlayOnLinux para el otro usuario.
      NOTA: Es posible que haya que cambiar los permisos de la carpeta que hemos copiado, ya que por defecto estarán configurados para el usuario 1.

      - En lugar de copiar, con el consumo de espacio que supone, podemos crear un enlace simbólico, que es algo así como un acceso directo. Esto se hace desde la línea de comandos, pero no es difícil.
      El comando para crear enlaces simbólicos funciona así:
      ln -s CarpetaAEnlazar NuevoNombreDeLaCarpeta
      En este caso, habría que desplazarse hasta "/home/usuario2/.PlayOnLinux/wineprefix" y ahí ejecutar el comando "ln -s /home/usuario1/.PlayOnLinux/wineprefix/UnidadVirtual UnidadVirtual".
      NOTA: Igual que en el caso anterior, es posible que haya que cambiar los permisos para que el usuario 2 pueda trabajar en esta carpeta.

      Eliminar
    2. Muchas gracias, Yomes.

      Intenté lo que indicas y pude crear el acceso con "ln -s", pero cada vez me decía que no era propietario.

      Cambié los permisos en el primer usuario y lo asigné a un grupo "Aplicación" donde incluí a ambos usuarios. Quienes pertenecen al grupo, pueden acceder y modificar archivos, pero siguió sin darme autorización.

      De ahí nacen dos consultas más:

      1.- Desde qué nivel debo darle acceso a las carpetas al segundo usuario (la unidad completa, sólo a la unidad y a la subcarpeta con el programa, etc.)

      2.- Sí se le debe dar acceso a toda la unidad, me complica ir carpeta por carpeta para darle acceso. ¿De qué manera se le puede dar acceso al 100% de los archivos de la unidad de una manera más efectiva?

      Agradezco nuevamente tu ayuda.

      Eliminar