Programas de vino de ejecución transparente

9

Cuando quiero ejecutar un programa de vinos tengo que escribir, por ejemplo

$ wine ~/.wine/drive_c/Program\ Files/TextAloud/TextAloudMP3.exe

¿Sería posible correr directamente TextAloudMP3? Me refiero no solo a la línea de comando (podría crear un alias) sino a todo el entorno gráfico. Estoy iniciando programas con dmenu.

xralf
fuente

Respuestas:

10

Supongo que querías lanzar programas exe directamente con wine, así que dile al kernel que ejecute win32 binarios con wine por,

  1. Monte binfmt fs, agregue una línea none /proc/sys/fs/binfmt_misc binfmt_misc defaults 0 0a / etc / fstab y ejecútelo mount -adespués

  2. echo ':DOSWin:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register para registrar el formato binario

Más tarde, simplemente ejecutas el archivo exe con /path/to/XX.exe

Tenga en cuenta que esto también presenta un problema de seguridad.

margarita
fuente
No puedo editar /proc/sys/fs/binfmt_misc/register. Se escribe /proc/sys/fs/binfmt_misc/register E667: Fsync failed. Traté de editar con la cuenta de usuario con sudoy también con la cuenta raíz. Ambos escriben este error.
xralf 01 de
¡Guauu! No sabía que el núcleo podría hacer eso. Sin embargo, este caso de uso particular se siente mal. Pero eso me gusta incluso al abrir esa puerta, los nombres de archivo, es decir, las extensiones, no importan, mientras que otros sistemas operativos ...: D
Bananguin
@xralf: ¿Cómo intentas editar el archivo? echo debería funcionar, pero algunos editores (¿la mayoría / todos?) pueden no funcionar, porque no es un archivo editable real, es virtual dentro del sistema de archivos proc.
chmeee
@xralf no edite con vim
daisy
@ warl0ck Tengo que hacerlo bajo rootcuenta. Agregué /path/to/a mi $PATHvariable y puedo ejecutar XX.exedesde la línea de comandos pero aún no puedo ejecutarla dmenu. Lo siento, lo he confundido con xmobarla pregunta.
xralf
3

Asegúrese de que wineesté en su camino y cree un script de shell que contenga lo siguiente:

#!/bin/sh
wine "$HOME/.wine/drive_c/Program Files/TextAloud/TextAloudMP3.exe"

Date permiso para ejecutar el script ejecutando chmod u+x SCRIPT_NAME.

Luego, simplemente ejecute ese script desde su administrador de archivos. Se iniciará wine, que ejecutará TextAloudMP3.exe.

Comunidad
fuente
Creé un script nombrado textalouden la /usr/local/bincarpeta. La primera línea es la #! /bin/bashsegunda línea es wine .... textaloud no aparecerá en el iniciador xmobar. Cuando se ejecuta sh textaloud, escribe$ sh textaloud wine: cannot find '~/.wine/drive_c/Program Files/TextAloud/TextAloudMP3.exe'
xralf
Ups ~no se expande al directorio de inicio de un usuario cuando está entre comillas dobles. He modificado mi respuesta para usar la variable ambiental en su $HOMElugar.
sh textaloudya funciona, pero solo desde el directorio /usr/local/biny aún no está visible en xmobar launcher.
xralf
1
Es posible que desee agregar $@después del nombre del programa para que pase todos los argumentos. Y generalmente pongo tales scripts en ~ / bin (después de asegurarme de que está en su RUTA, por supuesto).
Wyatt8740
¿No podrías definir también un alias en ~/.bash_aliases?
Aaron Franke
3

Paso 0

Establezca una RUTA binaria para su usuario. Ejecute mkdir ~/biny agregue este directorio a su RUTA.

La forma en que se hace esto puede variar según el entorno de shell y escritorio que utilice.

Aquí puede encontrar cómo cambiar su RUTA en una variedad de conchas .

Compruebe esta pregunta resuelta si su entorno de escritorio no se preocupa por su perfil de shell y el primero funciona desde la terminal pero no desde el entorno de escritorio .

Paso 1

Una vez que haya configurado su shell y su entorno de escritorio para respetar una nueva RUTA, puede soltar los scripts allí y ejecutarlos como comandos regulares sin escribir su ruta.

Cree un script de shell corto para ejecutar su programa de vinos en este directorio, es decir ~/bin/textaloud:

#!/bin/bash
cd "~/.wine/drive_c"
exec wine "~/.wine/drive_c/Program Files/TextAloud/TextAloudMP3.exe" "$@"

Y dale permiso de ejecución.

chmod +x ~/bin/textaloud

Hay tres cosas a tener en cuenta sobre el script anterior:

  • La cdruta es donde se ejecutará el programa (en qué directorio). Algunos programas pueden requerir que los ejecute en un directorio específico. Si tiene problemas con esto, configure allí ese directorio (generalmente el mismo donde se encuentra el ejecutable). Puede que no desee esta línea en algunos casos.
  • Los execcomandos le dicen a bash que se convierta en vino con los siguientes argumentos, por lo que ya no es bash ejecutar vino, sino que el proceso de bash se convierte en vino. El PID permanece. No tienes dos procesos en ejecución.
  • Se $@sustituye por los argumentos con los que ejecutó el script, si corresponde. Entonces esos se pasan a su programa de vinos.

Ahora puede ejecutar su programa desde el shell como ...

textaloud

Paso 2

Crea un lanzador de aplicaciones. Hoy en día, estos archivos están estandarizados como .desktoparchivos y muchos entornos de escritorio proporcionan herramientas gráficas para crearlos.

Aquí hay un ejemplo de esqueleto que puedes usar para escribirlo tú mismo. Es posible que desee proporcionar un icono (a menudo en PNG, SVG o XPM).

[Desktop Entry]
Type=Application
Name=TextAloud
Exec=textaloud
Icon=textaloud.png

Coloque este archivo en ~/.local/share/applications/TextAloud.desktop. Se buscan íconos (entre otros lugares) ~/.local/share/icons, así que asegúrese de encontrar un ícono lindo para su aplicación y colóquelo allí con el nombre textaloud.png.

Una vez que haya hecho esto, su entorno de escritorio debe encontrar su archivo de acceso directo y poder ejecutar el programa con el script. Si no, vuelva a cargarlo o reinícielo.

Alicia
fuente
Gracias, probé tu guía pero el último paso no funciona. No puedo ver textalouden el dmenulanzador.
xralf
El paso 2 está dirigido a escritorios como GNOME, KDE o XFCE. dmenu no parece preocuparse por los archivos .desktop, por lo que con el Paso 1 debería estar bien. ¿Funcionó desde la terminal? Si funcionó pero aún no funciona, revise el Paso 0. ¿Tal vez está utilizando ~/.xsessionpara obtener su sesión X11? Intente agregar allí export PATH="$HOME/bin:$PATH"antes de la línea que usa para ejecutar dwm y reiniciar X11.
Alicia
En obras desde terminal sin problemas. RUTA está bien. Solo la pregunta para completar me gustaría resolverlo desde dmenu.
xralf
Te lo dije. ¿Tiene usted ~/.xsession? Tenga en cuenta que la RUTA de su terminal puede no ser igual a la RUTA de su sesión X11.
Alicia
$@debe estar entre comillas dobles por seguridad. entonces se convertiría exec wine "~/.wine/drive_c/Program Files/TextAloud/TextAloudMP3.exe" "$@".
Wyatt8740
1

¿Has considerado probar PlayOnLinux? Puede encargarse de todo e incluso puede configurar algunos tipos de archivos para que los programas de vino los abran.

Bichoy
fuente