如何在Wine应用程序的.desktop文件中将文件作为参数传递


11

我实际上想问两个问题:

  1. 在哪里可以找到有关台式机文件(例如%U,%u,%f ...)中执行Exec的可用参数/参数快捷方式的更多信息

  2. 主要问题,如何在Wine应用程序的.desktop启动器上将文件作为参数传递?

我发现在这里搜索此建议:z:%f这对我没有用,就好像我只是在不传递文件的情况下运行.desktop文件一样,它假定参数为z:并开始扫描z:“驱动器”


例:

[Desktop Entry]
Name=Some Windows program
Exec=wine "program.exe" z:%f
Type=Application
Terminal=false
MimeType=application/docbook+xml

我想在此酒应用程序的自定义.desktop启动器上删除XML文件,并且可以这样做。问题是,如果我单击启动器图标来调用该程序,z:则始终在其上传递参数,这是不可接受的


你正试图做什么?你能补充一个例子吗?
布鲁诺·佩雷拉

嘿,布鲁诺;)我认为这很清楚-我制作了用于酒类应用程序的桌面文件(目的-启动器),并且希望能够在上面传递文件。上面的z:%f解决方法不好,因为每当我启动此wine应用程序参数时z:都传递了该参数,我想避免这种情况
zetah 2011年

因此,您有一个名为(ie)的Windows程序application.exe,您希望将nautilus中的当前选定文件传递给它,即file.txt
布鲁诺·佩雷拉

抱歉,我应该在第一篇文章中添加示例。我现在添加了
zetah 2011年

到目前为止,我一直在研究这个问题,唯一的其他选择是exec检查行中是否%f存在脚本,如果存在,则启动文件上的应用程序,而不只是启动应用程序。照顾它还是不是一种选择?
布鲁诺·佩雷拉

Answers:


8

到目前为止,这是我最好的方法(记事本示例)

[Desktop Entry]
Name=Notepad
Exec=sh -c "echo %f | sed 's/^\//z:\//' | xargs wine /home/zetah/.wine/drive_c/windows/notepad.exe"
Type=Application
Terminal=false
Categories=Wine
MimeType=text/plain

考虑到我是初学者,我希望得到更好的答案


请参阅下面的我的改进以传递多个文件。
哈维2014年


1

改进了《 Zetah》的答案。这适用于将多个文件传递给程序。将%f更改为%F(大写)以传递所有删除的文件,并使用足够的路径名替换^(用于该行的开头),以使其更有可能唯一,路径末尾为'g' sed命令中的命令导致替换对所有传递的文件重复执行,最后使用$代替/,因此\转义字符不是必需的。

Exec=sh -c "echo %F | sed 's$/home$z:/home$g' | xargs wine /home/owner/.wine/dosdevices/c:/Progs/Boxer/b.exe"

我还将要执行的程序移动到了路径名没有空格的路径,因此我将拳击手编辑器从以下位置移动了:

/home/owner/.wine/dosdevices/c:/Program Files/Boxer Text Editor/

至:

/home/owner/.wine/dosdevices/c:/Progs/Boxer/

1

此线程中发布了许多骇人听闻的解决方案。这是一个更好的解决方案,可以处理多个文件和文件名中的空格。

像通常一样创建.desktop文件,只需使用以下Exec行:

Exec=/usr/bin/env bash -c "printf 'z:%%q\\n' %F | WINEPREFIX='/home/<your username>/.wine' xargs wine 'C:\\Path\\to the executable\\app.exe'"

编辑:如果您的应用程序可以在一个实例中处理多个文件(例如,多选项卡式PDF查看器),并且您希望在启动新文件时自动对当前实例进行聚焦,那么您需要执行以下操作:

  • 将此行添加到.desktop文件: StartupWMClass=app.exe

  • 使用此Exec命令:

    Exec=/usr/bin/env bash -c "(printf 'z:%%q\\n' %F | WINEPREFIX='/home/<your username>/.wine' xargs wine 'C:\\Path\\to the executable\\app.exe' &); xdotool windowactivate \$(xdotool search --sync --onlyvisible --class \"app.exe\")"
    

1

带有xargs 的winepath管道的Exec行在正确的引号及其-0选项下使用,在Ubuntu 14.04中可以完美地打开单个和多个文件。

Exec=/usr/bin/env sh -c "winepath -w -0 %F | WINEPREFIX='/home/your_user_name/.wine' xargs -0 wine 'C:\\\\Program Files\\\\Some Vendor\\\\SomeProgram.exe'"

0

经过一番尝试和错误并阅读了Desktop Entry规范之后,这才是在RHEL 6.3机器上为我工作的方式。它不特定于带有参数的葡萄酒,但应与相似Exec=wine \"filename.exe\"

希望它对某人有所帮助,因为我花了一些时间才能使其正常工作。

我认为您必须使用双引号并将其以及任何特殊字符使用反斜杠转义。

[Desktop Entry]
Version=1.0
Name=Ansys User Lic Prefs 12.1
GenericName=Ansys User Lic Prefs 12.1
Comment=Ansys User License Prefs 12.1
Encoding=UTF-8
Exec=anslic_admin \"\-userprefs121\"
Icon=ansysLogo_16x16.png
Terminal=false
Type=Application
Categories=Ansys;

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.