Jak przekazać plik jako argument w pliku .desktop dla aplikacji Wine

11

Właściwie chcę zadać dwa pytania:

  1. Gdzie mogę znaleźć więcej informacji o dostępnych skrótach argumentów / parametrów dla wpisu Exec w plikach pulpitu (takich jak% U,% u,% f ...)

  2. Główne pytanie, jak przekazać plik jako argument w programie uruchamiającym .desktop dla aplikacji Wine?

Znalazłem szukanie tutaj tej sugestii: z:%fco mi się nie przydaje, tak jakbym po prostu uruchomił plik .desktop bez przekazywania pliku, zakłada, że ​​argument jest, z:i rozpoczyna skanowanie z:„dysku”


Przykład:

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

Chcę upuścić plik XML na moim niestandardowym programie uruchamiającym .desktop dla tej aplikacji do wina i mogę to zrobić w ten sposób. Problem polega na tym, że jeśli kliknę ikonę programu uruchamiającego, aby wywołać ten program, argument z:jest zawsze przekazywany i jest to nie do przyjęcia

zetah
źródło
Co próbujesz zrobić btw? Czy możesz dodać przykład?
Bruno Pereira,
Hej Bruno;) Myślałem, że to jasne - stworzyłem plik na pulpicie (cel - program uruchamiający) dla aplikacji do wina i chcę mieć możliwość przesłania na niego pliku. Powyższe z:%fobejście nie jest dobre, ponieważ za każdym razem, gdy uruchamiam ten argument z:dotyczący wina, przekazywany jest na niego argument i chcę tego uniknąć
zetah
Więc masz program Windows o nazwie (tj.), application.exeŻe chcesz przekazać do niego aktualnie wybrany plik w nautilus, tj. file.txt?
Bruno Pereira,
Przepraszam, że powinienem dodać przykład w moim pierwszym poście. Dodałem go teraz
zetah,
Rozglądałem się do tej pory i jedyną inną opcją jest skrypt umieszczony w execlinii, który sprawdza %f, czy istnieje, uruchom aplikację na pliku, jeśli nie, po prostu uruchom aplikację. Zależy ci na tym, czy to nie jest opcja?
Bruno Pereira,

Odpowiedzi:

8

To jest najlepsze, co do tej pory (przykład Notatnika)

[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

Oczekuję lepszych odpowiedzi, biorąc pod uwagę, że jestem początkujący

zetah
źródło
Zobacz moje ulepszenie poniżej dotyczące przekazywania wielu plików.
Harvey
1

Poprawa odpowiedzi Zetah. Działa to w przypadku przekazywania wielu plików do programu. % F jest zmieniany na% F (wielkie litery), aby przekazać wszystkie upuszczone pliki, zastępując ^ (na początku wiersza) wystarczającą liczbą ścieżek, aby bardziej prawdopodobne, że będzie unikalny, na końcu „g” polecenia sed, aby spowodować powtórzenie zamiany dla wszystkich przekazanych plików i wreszcie $ zamiast /, aby znaki ucieczki \ nie były konieczne.

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

Przeniosłem również program do uruchomienia na ścieżkę, w której nazwa ścieżki nie ma spacji, więc przeniosłem mój edytor bokserów z:

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

do:

/home/owner/.wine/dosdevices/c:/Progs/Boxer/
Harvey
źródło
1

W tym wątku było wiele hackerskich rozwiązań. Oto znacznie lepsze rozwiązanie dotyczące wielu plików i spacji w nazwach plików.

Utwórz plik .desktop jak zwykle i po prostu użyj tego wiersza 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'"

Edycja : Jeśli Twoja aplikacja obsługuje wiele plików w jednym wystąpieniu (na przykład przeglądarkę PDF z wieloma kartami) i chcesz, aby bieżące wystąpienie było automatycznie ustawiane automatycznie za każdym razem, gdy uruchamiasz nowy plik, musisz wykonać następujące czynności:

  • Dodaj tę linię do pliku .desktop: StartupWMClass=app.exe

  • Użyj tego polecenia 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\")"
    
Caleb
źródło
1

Linia Exec z potokiem winepath do xargs, używana z odpowiednim cytowaniem i ich opcjami -0, działa bezbłędnie w Ubuntu 14.04 do otwierania pojedynczych i wielu plików.

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'"
lbo
źródło
0

Tak właśnie działało dla mnie RHEL 6.3 po kilku próbach i błędach oraz po przeczytaniu specyfikacji wpisu na pulpicie. Nie jest specyficzne dla wina z argumentami, ale powinno działać z czymś takim Exec=wine \"filename.exe\".

Mam nadzieję, że to pomaga komuś, ponieważ zajęło mi trochę poszukiwań, aby go uruchomić.

Myślę, że musisz użyć podwójnych cudzysłowów i uciec od nich, a także znaków specjalnych za pomocą odwrotnego ukośnika.

[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;
użytkownik80295
źródło
0

Właśnie napisałem mały skrypt Pythona, który konwertuje ścieżki w stylu uniksowym na format ścieżki Wine.

Pobierz zip , rozpakuj wine-launcher.py do swojego folderu domowego i edytuj plik .desktop w następujący sposób:

Exec=python ~/wine-launcher.py "program.exe" %F
Ivan Filho
źródło