Esta duda me ha atormentado desde hace mucho tiempo (casi desde que empecé a utilizar GNU/Linux) y es como instalar una vez un programa Windows en linux y ejecutarlo en cualquier usuario linux.
Se me ocurrieron varias cosas, como crear un enlace simbólico a la carpeta wine de los otros usuarios, pero por los permisos no sirvió, enlaces duros tampoco.
Trasteando un poco leí una solución que me sirvió, en lo poco que la he probado, que es hacer un usuario y ejecutar wine (o playonlinux) como él, entonces las instalaciones y todo quedan en su carpeta de usuario y la podemos utilizar desde el usuario que se desee. Suena sencillo, pero luego se complica un poco (hay que otorgar al usuario "wine" permiso para que ejecute X en el usuario que queremos ejecutar, etc), pero encontré
una página donde solucionaron casi todo. En esta entrada transcribo, casi textualmente, traduciendo al español los pasos a seguir para lograrlo.
Instalar WINE y PLAYONLINUX
Instalarlos es muy sencillo, pueden buscar los paquetes en el gestor de paquetes Synaptic.
Crear una nueva cuenta de usuario para Wine
Se creará una cuenta de usuario llamada "
wine" (en minuscula). Para crearlo se puede hacer mediante la consola
$ sudo adduser --disabled-login --shell /forbid/login wine
Esto debería crear una nueva cuenta de usuario llamada
wine que no se podrá autenticar, pero tendrá directorio
home.
Opcional
Dependiendo de los programas que se quieran instalar se deberá agregar al usuario
wine a un grupo que tenga los permisos necesarios. Por ejemplo, si se tiene un programa que requiera audio deberá agregarse
wine al grupo
audio
$ sudo usermod --append --groups audio wine
De igual manera, según necesidad, se tendrá que agregar el usuario
wine a grupos como
cdrom,
floppy, etc.
Permitir a nuestra propia cuenta de usuario lanzar comandos bajo el nombre de la cuenta wine
Tener mucho cuidado en esta sección los usuarios de
Ubuntu y otras distribuciones donde
sudo maneja los privilegios de
super usuario y no se tiene acceso al usuario
root. El comando
sudo permite correr comandos bajo el nombre de otra cuenta. Usualmente
sudo es utilizado para correr programas como super usuario (lo hicimos un par de veces en la sección anterior). Pero también se puede usar
sudo con la opción
-u, que permite correr los comandos como otro usuario. Normalmente esto requiere que se digite la contraseña de dicho usuario, pero editando el archivo
/etc/sudoers se puede dar permiso a tu propia cuenta de usuario para correr el comando sin necesidad de escribir la contraseña de la otra cuenta de usuario. Para editar /etc/sudoers se debe hacer son el momando visudo
sudo visudo
Una vez dentro del archivo /etc/sudoers, se necesita agregar una nueva linea al final del archivo. Se quiere que nuestra cuenta, para este ejemplo llamada "pepe", pueda correr comandos como el usuario wine. Para esto se agrega la siguiente línea
pepe ALL=(wine) NOPASSWD: ALL
Recuerde cambiar pepe por su propio nombre de usuario. Debe de hacer esto con cada usuario que desee ejecute la aplicación windows. Leyendo un poco la documentación de /etc/sudoers y un par de ejemplos por ahí dice que se puede agregar
Alias y listas de usuarios.
Ahora se puede, desde la terminal, probar que sirvan los comandos corridos desde la cuenta
wine :
$ sudo -u wine ls /home/wine
Opcional (recomendado)
Si la cuenta de usuario que desea que ejecute los programas Windows no está dentro del grupo sudo, debe agregarla desde la terminal. Pero al hacer esto, le estará dando permisos (por la configuración por default que viene en el archivo /etc/sudoers) para ejecutarse y loguearse como administrador. Por motivos de seguridad esto no es deseable, para corregir esto, siga los siguientes pasos, sin salir de la edición del archivo /etc/sudoers.
Documente la línea
%sudo ALL=(ALL:ALL) ALL, quedando así
#Allow members of group sudo to execute any command
#%sudo ALL=(ALL:ALL) ALL
Seguido debe agregar al grupo administrador de sistema (donde se encuentra su cuenta principal de administración) y darle todos los permisos, para esto (probado en Ubuntu 13.10) agregue las siguientes líneas al archivo
#Permitir al grupo administrador ejecutar cualquier comando
%adm ALL=(ALL:ALL) ALL
Con esto le concede permiso a los usuarios del grupo
adm (administradores en Ubuntu) a ejecutar cualquier comando y poderse loguear como super usuario.
No permitir que wine y playonlinux sean usados por otras cuentas de usuario
Porque queremos estar seguros que Wine o PlayOnLinux no será utilizado deliberadamente o accidentalmente por otra cuenta de usuario que no se wine, necesitamos cambiar los permisos de ejecución de los respectivos archivos binarios. Estos se encuentran en la carpeta de sistema /usr/bin.
$ sudo chown root:wine /usr/bin/wine*
$ sudo chown root:wine /usr/bin/playonlinux*
$ sudo chmod o-x /usr/bin/wine*
$ sudo chmod o-x /usr/bin/playonlinux*
Creando el script runaswine
Según la lógica que llevamos, correr una aplicación en windows debería ser tan simple como digitar
sudo -u wine /ruta/programa_windows.exe. Pero en la práctica, nos podemos encontrar un par de piedras grandes en el camino.
Primero que todo, el usuario wine no podrá tener acceso al servidor X para manejar los gráficos. Al intentar correr la aplicación, como HotPotatoes, únicamente nos generará un mensaje de error. Para dar permiso al usuario wine de utilizar el servidro X, podemos ingresar en el terminal el siguiente comando:
xhost +SI:localuser:wine
Esto dará permiso al usuario wine de utilizar el servidor X de nuestro usuario por una sesión únicamente.
nota: Pareces ser que se puede hacer permanente mediante
xauth , tengo que investigar sobre el asunto.
El comando
sudo -u wine /ruta/programa_windows.exe ahora debería servir. Pero, las variables de entorno de nuestro usuario wine están apuntando a las variables de nuestro usuario ejecutor, esto puede crear conflictos a la hora de ejecutar programas y dejar un par posibles huecos de seguridad (también se tiene que investigar más este punto) ,entonces se puede usar el comando env, utilizando la cuenta wine para reflejar las variables hacia wine.
sudo -u wine env HOME=/home/wine USER=wine USERNAME=wine LOGNAME=wine wine "$@"
Esto lo podemos agregar en un script que se ejecute luego desde terminal, el cual se puede guardar en /usr/bin, para este ejemplo el escript se llamará runaswine.bash.
nano /usr/bin/runaswine.bash
Dentro del archivo escribiremos los comandos recién vistos.
#!/bin/bash
# Run Wine as user wine.
# Should only be used for running Windows software with Wine emulator.
echo "Adding wine to X server permissions list."
xhost +SI:localuser:wine
echo "Running as wine:" "$@"
# Use sudo -u wine to run command (and all arguments) as user wine.
# and use env command to set environment variables for wine user.
sudo -u wine env HOME=/home/wine USER=wine USERNAME=wine LOGNAME=wine playonlinux "$@"
http://www.bobulous.org.uk/misc/Spotify-Linux-Wine.html
http://www.linuxtotal.com.mx/?cont=info_admon_014