it-swarm.com.de

Wie ordne ich alle Dateitypen in Wine der entsprechenden nativen Anwendung zu?

Dies ist einfach für einen einzelnen Dateityp möglich, wie in So ordnen Sie einen Dateityp in Wine einer nativen Anwendung zu? durch Erstellen eines .reg für den gewünschten Dateityp. Dies ist jedoch nur für AVI. Ich verwende einige Wein-Apps (uTorrent, Soulseek, Eudora, um nur einige zu nennen), die eine Vielzahl von Dateien starten können. E-Mail-Anhänge können zum Beispiel JPG, DOC, PDF, PPS sein. Es ist unmöglich (und nicht wünschenswert), alle möglichen Dateitypen aufzuspüren, die man in einer E-Mail erhalten oder in einem Torrent herunterladen kann.

Also brauche ich eine Lösung, die allgemeiner und umfassender ist. Ich benötige die Dateizuordnung, um die derzeit konfigurierte native App zu berücksichtigen. Und ich möchte, dass dies für alle Dateitypen durchgeführt wird, die in meinem System konfiguriert sind.

Ich habe bereits herausgefunden, wie man die Lösung generisch macht. Ersetzen Sie einfach die gestartete App in .reg durch winebrowser.

[HKEY_CLASSES_ROOT\.pdf]
@="PDFfile"
"Content Type"="application/pdf"
[HKEY_CLASSES_ROOT\PDFfile\Shell\Open\command]
@="C:\\windows\\system32\\winebrowser.exe \"%1\""

Ich habe das getestet und es funktioniert richtig. Da winebrowser xdg-open als Backend verwendet und meinen Windows-Pfad in einen Unix-Pfad konvertiert, wird die richtige (Linux-) App gestartet.

Ich benötige also einen "Batch" -Updater für die Weinregistrierung, eine Art wine-update-associations -Skript, das ich ausführen kann, wenn eine neue App installiert wird. Vielleicht ein Tool, das:

  • Liste alle Mime Types-Typen in meinem System auf , auf denen eine Standard-App installiert ist
  • Extrahieren Sie alle benötigten Informationen (Glob, MIME-Typ usw.)
  • Generieren Sie die .REG-Datei im obigen Format

Der knifflige Teil ist: Ich habe VIEL gesucht, um Informationen darüber zu finden, wie die Zuordnung in Ubuntu ab 10.10 erfolgt, und die Dokumentation ist, gelinde gesagt, knapp und verwirrend. Freedesktop.org hat keine vollständige Spezifikation und selbst Gnome-Dokumente sind veraltet. Bisher habe ich 4 Dateien gesammelt, die Zuordnungsinformationen enthalten, aber ich weiß nicht, welche (oder warum) oder wie ich sie zum Generieren verwenden soll die .reg Datei:

~/.local/share/applications/mimeapps.list
~/.local/share/applications/miminfo.cache
/usr/share/applications/miminfo.cache
/etc/gnome/defaults.list

Jede Hilfe, Skript oder Erklärung wäre sehr dankbar!

Vielen Dank!

8
MestreLion

Jahre später habe ich ein kleines Dienstprogramm erstellt, das die MIME-Datenbank (sowohl das System als auch den Benutzer) durchsucht und alle bekannten nativen MIME-Typen in der Windows-Registrierung registriert.

Es verwendet xdg-open, um eine Datei zu öffnen, wenn es eine (native) Standardanwendung für diesen MIME-Typ gibt, andernfalls packagekit, um nach einem Paket zu suchen, das diese Datei verarbeiten kann (genau wie Nautilus). Meine anfängliche Anforderung, nur Erweiterungen zu registrieren, auf denen eine native Anwendung installiert ist, wurde nicht mehr benötigt. Eine frühe Version des Skripts hat jedoch nur solche Typen gefiltert. Das Snippet, das dies ermöglichte, war:

Perl -e '
    use strict; use warnings;
    use File::MimeInfo::Magic; use File::MimeInfo::Applications;
    while (my $line = <STDIN>) {
      chomp($line);
      my ($ext, $mime) = (split/\t/, $line);
      my ($def, @apps) = mime_applications_all($mime);
      print "$line\n" if ($def || @apps)
    }'

Standardmäßig registriert mein Skript nur native Typen, die keinen Handler in der Windows-Registrierung haben, aber es kann auch solche Zuordnungen überschreiben (so werden beispielsweise JPEG-Dateien im nativen Viewer anstelle des standardmäßigen Gecko-Weinbrowsers geöffnet). Es kann auch einige Erweiterungen ignorieren, selbst wenn sie keinen Handler in Windows haben.

Es versucht sein Bestes, um winemenubuilder-freundlich zu sein, dh alle Assoziationen, die es erstellt, werden von winemenubuilder nicht als native Assoziationen (oder als X-Wine-Extension-Mimetypen) veröffentlicht, was hässlich sein und möglicherweise Schleifen verursachen würde. Dies ist sehr schwierig und noch nicht perfekt, insbesondere bei Erweiterungen mit gemischten Groß-/Kleinschreibung (z. B. .C und .c).

Trotzdem hoffe ich, dass dieses Skript für alle hilfreich ist:

https://github.com/MestreLion/wine-tools/blob/master/wine-import-extensions

Verbesserungen willkommen!

2
MestreLion

EDIT:

Es gibt einen Weinfehler -, der eher eine Verbesserung als einen Fehler darstellt. Der Punkt ist, ShellExecutexdg-open aufzurufen und, falls nicht gefunden, nach den Standardeinstellungen von gnome und kde zu suchen. Du solltest den Patch anwenden können und endlich die Magie haben :-). Diese Lösung ist sauberer , da sie keine Probleme mit der Registrierung verursacht.

Um vollständiger zu sein, lesen Sie hier, wie Patchen und Kompilieren von Wein aus der Quelle .

END EDIT

Ich aktualisiere die Weinregistrierung mit dem folgenden Skript, um eine Liste der gängigen Dateitypen hinzuzufügen.
Sie können die Liste erweitern, um weitere Typen hinzuzufügen.
Es verwendet /usr/bin/gnome-open in der gstart.exe -Datei, so dass es nicht für Nicht-Gnome-Desktops funktioniert, wie es ist .

Gib dies in conf_wine.sh ein:

#!/bin/bash

SRC=~
WINE=~/.wine
REG=$WINE/system.reg
GSTART=gstart.exe
GSTART_TARGET=$WINE/drive_c
EXE_TARGET=$WINE/drive_c/windows
FNKEY=/tmp/"key"$(date +%F_%H-%M-%S)".reg"

[ -e $FNKEY ] && { echo "temporary key file exists..try again"; exit 1; }

echo "copying gstart.exe"
cp $SRC/$GSTART $GSTART_TARGET
chmod +x $GSTART_TARGET

echo "backing up the registry"
cp $REG $REG.$(date +%F_%H-%M-%S).old

echo "setting new wine registry keys"
for i in http doc docx ppt pptx xls xlsx odt ods xml txt pdf odt svg Zip ; do {
    echo "setting $i"
key='[HKEY_CLASSES_ROOT\.'$i']
@="'$i'file"
"Content Type"="application/'$i'"
[HKEY_CLASSES_ROOT\'$i'file\Shell\Open\command]
@="C:\\gstart.exe \"%1\""'
    echo "$key" > $FNKEY
    regedit $FNKEY
}
done

echo "done"

Der gstart.exe ist ein Bash-Skript und die Brücke zu beiden Welten:

#!/bin/bash

OPEN_HANDLER=/usr/bin/gnome-open
# logging, optional
LOG=$HOME/.wine/gstart.exe-log.$(id -u -n)
echo "[ $(date) ] $# argument(s) received: '[email protected]'" > $LOG

# convert the path
RESULT=$(winepath "[email protected]" 2> /dev/null)
echo "$OPEN_HANDLER $RESULT" >> $LOG
TMP=$TMPDIR
TEMP=$TMPDIR

# finally open the file
$OPEN_HANDLER "$RESULT"

Anmerkungen:

  1. kopieren Sie gstart.exe in Ihr aktuelles Arbeitsverzeichnis, bevor Sie conf_wine.sh ausführen, da es in den Ordner .wine kopiert wird.
  2. die Ordnerpositionen können geändert werden, z. gstart.exe muss nicht in c:\ sitzen.
  3. macht keine Magie: Neue Typen müssen manuell hinzugefügt werden. Sie können es verbessern, indem Sie die Linux-Dateien (mimeapps.list, ..) lesen und die Weinregistrierung bei Bedarf aktualisieren.
  4. getestet, um mindestens in wine1.4 zu arbeiten.

Wein FAQ: Wie verknüpfe ich ein natives Programm mit einem Dateityp in Wein?

1
rosch

Ich habe überall Informationen gesammelt und festgestellt, dass Folgendes funktioniert:

Ich habe eine Datei mit dem Namen ~/.wine/drive_c/gstart.exe erstellt

mit den folgenden :

#!/bin/bash
OPEN_HANDLER=/usr/bin/xdg-open
# logging, optional
LOG=$HOME/.wine/gstart.exe-log.$(id -u -n)
echo "[ $(date) ] $# argument(s) received: '[email protected]'" > $LOG
# convert the path
RESULT=$(winepath "[email protected]" 2> /dev/null)
echo "$OPEN_HANDLER $RESULT" >> $LOG
TMP=$TMPDIR
TEMP=$TMPDIR
# finally open the file
$OPEN_HANDLER "$RESULT"

Dann: Erstellt eine Datei namens linuxnative.reg in meinem ~/bin

mit den folgenden :

REGEDIT4
[HKEY_CLASSES_ROOT\.doc]
@="linuxnative"
"Content Type"="application/linuxnative"
[HKEY_CLASSES_ROOT\.rtf]
@="linuxnative"
"Content Type"="application/linuxnative"
[HKEY_CLASSES_ROOT\.odt]
@="linuxnative"
"Content Type"="application/linuxnative"
[HKEY_CLASSES_ROOT\.pdf]
@="linuxnative"
"Content Type"="application/linuxnative"
[HKEY_CLASSES_ROOT\.tif]
@="linuxnative"
"Content Type"="application/linuxnative"
[HKEY_CLASSES_ROOT\.doc]
@="linuxnative"
"Content Type"="application/linuxnative"
[HKEY_CLASSES_ROOT\.docx]
@="linuxnative"
"Content Type"="application/linuxnative"
[HKEY_CLASSES_ROOT\.jpg]
@="linuxnative"
"Content Type"="application/linuxnative"
[HKEY_CLASSES_ROOT\linuxnative]
[HKEY_CLASSES_ROOT\linuxnative\Shell]
[HKEY_CLASSES_ROOT\linuxnative\Shell\open]
[HKEY_CLASSES_ROOT\linuxnative\Shell\open\command]
@="c:\\gstart.exe \"%1\""

dann machst du a

regedit linuxnative.reg

Hoffe das hilft.

0
user300778