透明地运行葡萄酒程序


9

当我想运行一个酒程序时,我必须输入例如

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

可以直接运行TextAloudMP3吗?我的意思是不仅从命令行(我可以创建别名),而且在整个图形环境中。我正在使用启动程序dmenu

Answers:


10

我猜您打算直接用wine启动exe程序,所以告诉内核用wine运行win32二进制文件,

  1. 摩binfmt FS,添加一行none /proc/sys/fs/binfmt_misc binfmt_misc defaults 0 0到/ etc / fstab文件并执行mount -a之后

  2. echo ':DOSWin:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register 注册二进制格式

因此,稍后,您只需使用 /path/to/XX.exe

请注意,这还会引入安全性问题。


我无法编辑/proc/sys/fs/binfmt_misc/register。它写道/proc/sys/fs/binfmt_misc/register E667: Fsync failed。我也尝试在用户帐户sudo下以及根帐户下进行编辑。两者都写入此错误。
xralf

哇!我不知道内核可以做到这一点。但是,这个特定的用例感觉很邪恶。但我喜欢那样,即使打开扇门,文件名(即扩展名)也没关系,而其他操作系统...:D
Bananguin

@xralf:您如何尝试编辑文件?echo应该可以工作,但是某些(大多数/全部?)编辑器可能无法工作,因为它不是真正的可编辑文件,而是在proc文件系统中是虚拟的。
chmeee

@xralf不要用vim编辑
雏菊

@ warl0ck我必须在root帐户下执行此操作。我添加/path/to/$PATH变量,可以从命令行运行XX.exe,但仍然不能从运行dmenu。对不起,我xmobar在这个问题上弄错了。
xralf

3

请确保wine在您的路径,并创建包含以下内容的shell脚本:

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

通过运行来授予自己执行脚本的权限chmod u+x SCRIPT_NAME

然后,从文件管理器运行该脚本。它将启动wine,它将运行TextAloudMP3.exe。


textaloud/usr/local/bin文件夹中创建了一个脚本。第一行是#! /bin/bash第二行wine ...。textaloud不会出现在xmobar启动器中。运行时,sh textaloud它写道$ sh textaloud wine: cannot find '~/.wine/drive_c/Program Files/TextAloud/TextAloudMP3.exe'
xralf

哎呀。~在双引号内时,不会扩展到用户的主目录。我已经修改了答案,改为使用环境变量$HOME

sh textaloud已经可以使用,但只能在目录中使用,/usr/local/bin并且在xmobar启动器中仍然不可见。
xralf

1
可能想$@在程序名称后添加,以便它传递所有参数。而且我通常将这样的脚本放在〜/ bin中(当然,要确保它在您的PATH中)。
Wyatt8740 2015年

您还不能在中定义别名~/.bash_aliases吗?
亚伦·弗兰克

3

步骤0

为您的用户设置一个二进制路径。运行mkdir ~/bin并将此目录添加到您的PATH。

完成此操作的方式可能会因您使用的外壳和桌面环境而异。

在这里,您可以找到如何在各种shell中更改PATH的方法

如果您的桌面环境不关心您的Shell配置文件,并且前者确实可以在终端上运行而不是在桌面环境中运行,请检查此已解决的问题

步骤1

设置完外壳程序和桌面环境以使其遵循新的PATH之后,您可以将脚本放在那里并以常规命令运行它们,而无需键入它们的路径。

创建一个简短的Shell脚本以在此目录中运行wine程序,即~/bin/textaloud

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

并赋予它执行权限。

chmod +x ~/bin/textaloud

关于上述脚本,需要注意三件事:

  • cd路径是该程序将要被运行(其中,目录)。某些程序可能要求您在特定目录上运行它们。如果对此有问题,请在该目录中进行设置(通常与可执行文件所在的目录相同)。在某些情况下,您可能不希望使用此行。
  • 这些exec命令通过以下参数告诉bash变身为wine,因此这不再是bash运行wine,而是bash变为wine。PID保持不变。您没有运行两个进程。
  • $@取代有你运行脚本的参数,如果有的话。因此,这些将传递给您的酒程序。

现在您可以像下面这样从shell运行程序了:

textaloud

第2步

创建一个应用程序启动器。如今,这些文件已被标准化为.desktop文件,并且许多桌面环境都提供了用于创建它们的图形工具。

这是一个示例框架,您可以自己编写。您可能需要提供一个图标(通常为PNG,SVG或XPM)。

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

将此文件放在中~/.local/share/applications/TextAloud.desktop。在其他位置搜索图标~/.local/share/icons,因此请确保为您的应用程序找到一个可爱的图标,并将其放置在名称中textaloud.png

完成此操作后,您的桌面环境应找到您的快捷方式文件,并能够使用脚本运行该程序。如果不是,请重新加载或重新启动它。


谢谢,我尝试了您的指南,但最后一步没有用。我textalouddmenu启动器中看不到。
xralf

步骤2针对GNOME,KDE或XFCE之类的桌面。dmenu似乎并不关心.desktop文件,因此使用“步骤1”就可以了。它在终端上工作了吗?如果可以,但是仍然无法正常工作,请复查步骤0。也许您正在使用~/.xsessionX11进行安装?尝试export PATH="$HOME/bin:$PATH"在用于运行dwm并重新启动X11的行之前添加该行。
艾丽西亚(Alicia)

在终端上正常工作。路径确定。只有要完成的问题,我想从dmenu处理。
xralf

我告诉你了。你有~/.xsession吗 请注意,终端的PATH可能与X11会话的PATH不相等。
艾丽西亚(Alicia)

$@为了安全起见,应使用双引号。这样就变成了exec wine "~/.wine/drive_c/Program Files/TextAloud/TextAloudMP3.exe" "$@"
Wyatt8740 2015年

1

您是否考虑过尝试PlayOnLinux?它可以为您解决所有问题,甚至您可以配置一些文件类型以由Wine程序打开。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.