Gestire in modo trasparente i programmi del vino


9

Quando voglio eseguire un programma sul vino devo digitare ad es

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

Sarebbe possibile eseguire direttamente TextAloudMP3? Intendo non solo dalla riga di comando (potrei creare un alias) ma in un intero ambiente grafico. Sto lanciando programmi con dmenu.

Risposte:


10

Immagino volessi lanciare direttamente programmi exe con wine, quindi di 'al kernel di eseguire binari win32 con wine da,

  1. Montare binfmt fs, aggiungere una linea none /proc/sys/fs/binfmt_misc binfmt_misc defaults 0 0a / etc / fstab ed eseguire mount -asuccessivamente

  2. echo ':DOSWin:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register per registrare il formato binario

Quindi, dopo, esegui il file exe con /path/to/XX.exe

Si noti che ciò introduce anche un problema di sicurezza.


Non riesco a modificare /proc/sys/fs/binfmt_misc/register. Si scrive /proc/sys/fs/binfmt_misc/register E667: Fsync failed. Ho provato a modificare con account utente con sudoe anche con l'account di root. Entrambi scrivono questo errore.
xralf,

Wow! Non sapevo che il kernel potesse farlo. Questo particolare caso d'uso è malvagio. Ma mi piace anche quando si apre quella porta, i nomi dei file, ovvero le estensioni, non contano, mentre altri sistemi operativi ...: D
Bananguin

@xralf: come stai cercando di modificare il file? echo dovrebbe funzionare, ma alcuni editor (quasi tutti?) potrebbero non funzionare, perché non è un vero file modificabile, è virtuale all'interno del filesystem proc.
Chmeee

@xralf non modifica con vim
daisy il

@ warl0ck Devo farlo con un rootaccount. Ho aggiunto /path/to/alla mia $PATHvariabile e posso eseguire XX.exedalla riga di comando ma non riesco ancora a eseguirlo dmenu. Scusa se l'ho confuso con xmobarla domanda.
xralf,

3

Assicurarsi che winesia nel percorso e creare uno script di shell contenente quanto segue:

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

Concediti il ​​permesso di eseguire lo script eseguendolo chmod u+x SCRIPT_NAME.

Quindi, esegui semplicemente quello script dal tuo file manager. Inizierà wine, che eseguirà TextAloudMP3.exe.


Ho creato uno script chiamato textaloudnella /usr/local/bincartella. La prima riga è la #! /bin/bashseconda riga è wine .... textaloud non verrà visualizzato nel programma di xmobaravvio. Durante l'esecuzione sh textaloudscrive$ sh textaloud wine: cannot find '~/.wine/drive_c/Program Files/TextAloud/TextAloudMP3.exe'
xralf

Ops. ~non si espande nella home directory di un utente quando si trova tra virgolette doppie. Ho modificato la mia risposta per utilizzare $HOMEinvece la variabile ambientale .

sh textaloudfunziona già, ma solo dalla directory /usr/local/bine non è ancora visibile nel launcher di xmobar.
xralf

1
potrebbe essere necessario aggiungere $@dopo il nome del programma in modo che passi tutti gli argomenti. E di solito inserisco tali script in ~ / bin (dopo essermi assicurato che sia nel tuo PERCORSO, ovviamente).
Wyatt8740,

Non potresti anche definire un alias in ~/.bash_aliases?
Aaron Franke,

3

Passaggio 0

Imposta un PERCORSO binario per il tuo utente. Esegui mkdir ~/bine aggiungi questa directory al tuo PERCORSO.

Il modo in cui ciò viene fatto può variare in base alla shell e all'ambiente desktop in uso.

Qui puoi trovare come cambiare il tuo PERCORSO in una varietà di conchiglie .

Controlla questa domanda risolta se l'ambiente desktop non si preoccupa del profilo della shell e il primo funziona dal terminale ma non dall'ambiente desktop .

Passo 1

Dopo aver impostato la shell e l'ambiente desktop in modo che rispettino un nuovo PERCORSO, è possibile rilasciare gli script lì ed eseguirli come comandi regolari senza digitare il loro percorso.

Crea uno script di shell breve per eseguire il tuo programma di vino in questa directory, ovvero ~/bin/textaloud:

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

E dargli il permesso di esecuzione.

chmod +x ~/bin/textaloud

Ci sono tre cose da notare sullo script sopra:

  • Il cdpercorso è dove verrà eseguito il programma (in quale directory). Alcuni programmi potrebbero richiedere di eseguirli in una directory specifica. Se hai problemi con questo, imposta lì quella directory (di solito la stessa dove si trova l'eseguibile). In alcuni casi potresti non volere questa linea.
  • I execcomandi dicono a bash di trasformarsi in vino con i seguenti argomenti, quindi questo non è più bash che esegue il vino, ma processo di bash che diventa vino. Il PID rimane. Non hai due processi in esecuzione.
  • Il $@è sostituito con gli argomenti l'esecuzione dello script, se presenti. Quindi quelli vengono passati al tuo programma di vini.

Ora puoi eseguire il tuo programma dalla shell come ...

textaloud

Passo 2

Crea un lanciatore di applicazioni. Oggi questi file sono standardizzati come .desktopfile e molti ambienti desktop forniscono strumenti grafici per crearli.

Ecco un esempio di scheletro che puoi usare per scriverlo tu stesso. Potresti voler fornire un'icona (spesso in PNG, SVG o XPM).

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

Inserisci questo file in ~/.local/share/applications/TextAloud.desktop. Le icone vengono cercate (tra gli altri punti) in ~/.local/share/icons, quindi assicurati di trovare un'icona carina per la tua applicazione e posizionala lì con il nome textaloud.png.

Una volta fatto questo, l'ambiente desktop dovrebbe trovare il tuo file di collegamento ed essere in grado di eseguire il programma con lo script. In caso contrario, ricaricare o riavviare.


Grazie, ho provato la tua guida ma l'ultimo passaggio non funziona. Non riesco a vedere textaloudin dmenuLauncher.
xralf,

Il passaggio 2 è diretto a desktop come GNOME, KDE o XFCE. dmenu non sembra preoccuparsi dei file .desktop, quindi con il passaggio 1 dovresti andare bene. Ha funzionato dal terminale? Se ha funzionato ma continua a non funzionare, ~/.xsessionrivedi il passaggio 0. Forse stai utilizzando la sessione X11? Prova ad aggiungere lì export PATH="$HOME/bin:$PATH"prima della linea che usi per eseguire dwm e riavviare X11.
Alicia,

Funziona senza problemi dal terminale. PERCORSO è OK. Solo la domanda per essere completa mi piacerebbe lavorarci dal dmenu.
xralf

Te l'avevo detto. Hai ~/.xsession? Ricorda che il PERCORSO del tuo terminale potrebbe non essere uguale al PERCORSO della tua sessione X11.
Alicia,

$@dovrebbe essere tra virgolette doppie per sicurezza. così sarebbe diventato exec wine "~/.wine/drive_c/Program Files/TextAloud/TextAloudMP3.exe" "$@".
Wyatt8740,

1

Hai mai pensato di provare PlayOnLinux? Può occuparsi di tutto per te e anche tu puoi configurare alcuni tipi di file da aprire con i programmi del vino.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.