Как передать файл в качестве аргумента в файл .desktop для приложения Wine


11

Я на самом деле хочу задать два вопроса:

  1. Где можно найти дополнительные сведения о доступных сочетаниях аргументов / параметров для записи Exec в файлах рабочего стола (например,% U,% u,% f ...)

  2. Главный вопрос, как передать файл в качестве аргумента на панели запуска .desktop для приложения Wine?

Я нашел в поиске здесь это предложение: 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

Я хочу поместить XML-файл на свой собственный модуль запуска .desktop для этого приложения Wine, и я могу это сделать. Проблема в том, что, если я нажимаю на значок запуска, чтобы вызвать эту программу, аргумент z:всегда передается по ней, и это не приемлемо


Кстати, что вы пытаетесь сделать? Можете ли вы добавить пример?
Бруно Перейра

Привет, Бруно;) Я подумал, что это понятно - я сделал настольный файл (предназначение - лаунчер) для приложения Wine, и я хочу иметь возможность передать файл на него. Вышеупомянутый z:%fобходной путь не годится, так как всякий раз, когда я запускаю это винное приложение, z:передается аргумент, и я хочу этого избежать
зетах

Так что у вас есть окна программы под названием (то есть) , application.exeчто вы хотите передать текущий выбранный файл в Наутилус к нему , т.е. file.txt?
Бруно Перейра

Извините, я должен был добавить пример в свой первый пост. Я добавил это сейчас
Zetah

До сих пор я смотрел вокруг этого, и единственной другой возможностью для этого является сценарий, помещенный в execстроку, который проверяет %f, запускает ли приложение приложение в файле, если не просто запускает приложение. Забота об этом или это не вариант?
Бруно Перейра

Ответы:


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

Я ожидаю лучших ответов, учитывая, что я новичок


Смотрите мое улучшение ниже для передачи нескольких файлов.
Харви


1

Улучшение ответа Зетов. Это работает для передачи нескольких файлов в программу. % F изменен на% F (верхний регистр), чтобы передать все удаленные файлы, заменив ^ (для начала строки) достаточным количеством имени пути, чтобы сделать его более вероятным уникальным, 'g' в конце команды sed, чтобы замена повторялась для всех переданных файлов и, наконец, $ вместо /, так что символы \ escape не нужны.

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

Линия Exec с каналом winepath для xargs, используемая с правильными кавычками и их параметрами -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

Это способ, который только что работал для меня на 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;

0

Я только что написал крошечный скрипт на Python, который конвертирует пути в стиле Unix в формат Wine path.

Загрузите zip , распакуйте файл wine-launcher.py в вашу домашнюю папку и отредактируйте файл .desktop следующим образом:

Exec=python ~/wine-launcher.py "program.exe" %F
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.