web-dev-qa-db-ja.com

Wine内のすべてのファイルタイプを対応するネイティブアプリケーションに関連付ける方法

これは、singleファイルタイプに対して簡単に行われます。これは、 Wine内のファイルタイプをネイティブアプリケーションに関連付ける方法 で回答したように、.regを作成することにより目的のファイルタイプ用。ただし、これはAVI専用です。さまざまなファイルを起動できるいくつかのワインアプリ(uTorrent、Soulseek、Eudoraなど)を使用しています。たとえば、メールの添付ファイルにはJPG、DOC、PDF、PPSなどがあります。メールで受信したりトレントでダウンロードしたりする可能性のあるすべてのファイルタイプを追跡することは不可能です(望ましくありません)。

そこで、より汎用的で幅広いソリューションを必要としました。現在設定されているネイティブアプリを尊重するには、ファイルの関連付けが必要です。そして、私のシステムで設定されたallファイルタイプに対してこれを実行したいです。

ソリューションを汎用化する方法を既に考えました。次のように、.regで起動したアプリをwinebrowserに置き換えるだけです:

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

これをテストしましたが、正常に動作します。 winebrowserはxdg-openをバックエンドとして使用し、WindowsのパスをUnixのパスに変換するため、正しい(Linux)アプリが起動します。

そこで、新しいアプリがインストールされるたびに実行できるwine-update-associationsスクリプトのような、ワインのレジストリへの「バッチ」アップデータが必要です。多分次のことができるツール:

  • システムにあるすべてのMIMEタイプのタイプをリストします、デフォルトのインストール済みアプリが関連付けられています
  • 必要な情報(glob、mimeタイプなど)をすべて抽出します
  • 上記の形式で.REGファイルを生成します

トリッキーな部分は次のとおりです。Ubuntu10.10以降で関連付けがどのように行われるかについての情報を見つけるためにLOTを検索しました。 Freedesktop.orgには完全な仕様はなく、Gnomeのドキュメントも廃止されています。これまでに、関連付け情報を含む4ファイルを収集しましたが、どの(または理由)を使用するか、またはそれらを使用して生成する方法はわかりません.regファイル:

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

ヘルプ、スクリプトまたは説明は大歓迎です!

ありがとう!

8
MestreLion

数年後、MIMEデータベース(システムとユーザーの両方)をスキャンし、Windowsレジストリに既知のネイティブmimeタイプを登録allする小さなユーティリティを作成しました。

そのMIMEタイプのデフォルト(ネイティブ)アプリケーションがある場合はxdg-openを使用してファイルを開き、そうでない場合はpackagekitを使用してそのファイルを処理できるパッケージを検索します(Nautilusの場合と同様)。そのため、ネイティブアプリケーションがインストールされている拡張機能のみを登録するという私の最初の要件はもう必要ありませんでした。ただし、スクリプトの初期バージョンでは、そのようなタイプのみがフィルタリングされていました。それを可能にしたスニペットは次のとおりです。

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)
    }'

デフォルトでは、スクリプトはWindowsレジストリにハンドラーを持たないネイティブタイプのみを登録しますが、そのような関連付けをオーバーライドすることもできます(たとえば、デフォルトのGeckoワインブラウザーの代わりにネイティブビューアーでjpegファイルが開かれます)。また、Windowsにハンドラーがない場合でも、一部の拡張機能を無視できます。

Winemenubuilderにやさしいように最善を尽くします。つまり、作成するすべてのアソシエーションは、winemenubuilderによってネイティブアソシエーション(またはx-wine-extension mimetypes)として公開されず、wineいためループが発生する可能性があります。これは非常にトリッキーで、まだ完全ではありません。特に大文字と小文字が混在する拡張子(たとえば、.Cと.c)

とはいえ、このスクリプトがすべての人に役立つことを願っています。

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

改善を歓迎します!

2
MestreLion

私はあちこちでInfoを収集しましたが、以下が機能することがわかりました。

〜/ .wine/drive_c/gstart.exeというファイルを作成しました

次のように:

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

その後:〜/ binにlinuxnative.regというファイルを作成しました

次のように:

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\""

それからあなたは

regedit linuxnative.reg

お役に立てれば。

0
user300778