Intereting Posts

Как связать все типы файлов в Wine с соответствующим родным приложением?

Это легко сделать для одного типа файла, как указано в разделе Как связать тип файла внутри Wine с родным приложением? , создав .reg для желаемого типа файла. Но это только для AVI. Я использую некоторые винные приложения (uTorrent, Soulseek, Eudora, чтобы назвать несколько), которые могут запускать широкий спектр файлов. Вложения электронной почты, например, могут быть JPG, DOC, PDF, PPS … его невозможно (и нежелательно) отслеживать все возможные типы файлов, которые можно получить в электронной почте или загрузить в торренте.

Поэтому я решил, что решение будет более общим и широким. Мне нужна ассоциация файлов, чтобы удостовериться, что в настоящее время настроено собственное приложение. И я хочу, чтобы это было сделано для всех типов файлов, настроенных в моей системе.

Я уже понял, как сделать решение общим. Просто заменив запущенное приложение в .reg для winebrowser , вот так:

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

Ive проверил это, и он работает правильно. Поскольку winebrowser использует xdg xdg-open в качестве бэкэнд и преобразует мой путь к Windows в Unix, запускается правильное (Linux) приложение.

Поэтому мне нужно «пакетное» обновление в реестре вин, вроде скрипта wine-update-associations который можно запускать при каждом новом приложении. Может быть, инструмент, который может:

  • Список всех типов типов Mime в моей системе , у которых есть установленное по умолчанию, установленное приложение
  • Извлеките всю необходимую информацию (glob, mime type и т. Д.).
  • Создайте файл .REG в указанном выше формате.

Сложная часть: я обыскал LOT, чтобы узнать, как ассоциация выполняется в Ubuntu 10.10 и далее, а документация скудна и запутанна, если не сказать больше. Freedesktop.org не имеет полной спецификации, и даже документы Gnome устарели. До сих пор я собрал 4 файла, которые содержат информацию об ассоциации, но я не знаю, для чего (или почему) использовать, или как их использовать для создания .reg файла:

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

Любая помощь, сценарий или объяснение были бы очень признательны!

Благодаря!

Спустя годы я сделал небольшую утилиту, которая сканирует базу данных MIME (как системную, так и пользовательскую) и регистрирует все известные собственные типы mime в реестре Windows.

Он использует xdg-open для открытия файла, если для этого типа mime используется собственное (по умолчанию) приложение, в противном случае используется пакетный файл для поиска пакета, который может обрабатывать этот файл (как и то, что делает 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, но также могут переопределять такие ассоциации (так, например, файлы jpeg открываются в собственном средстве просмотра, а не в браузере Wine Gecko по умолчанию). Он также может игнорировать некоторые расширения, даже если они не имеют обработчика в окнах.

Он изо всех сил старается быть дружелюбным к winemenubuilder, что означает, что все созданные им ассоциации не публикуются как родные ассоциации (или как mimetypes x-wine-extension) от winemenubuilder, которые были бы уродливыми и потенциально вызывали бы циклы. Это очень сложно и еще не идеально, особенно со смешанными расширениями (например, C и C.)

Тем не менее, я надеюсь, что этот сценарий будет для всех оправданным:

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

Усовершенствования приветствуются!

РЕДАКТИРОВАТЬ:

Есть вина об этом – это скорее улучшение, чем ошибка. Дело в том, что ShellExecute вызывает xdg-open , а если не найден, найдите значения gnome и kde. Вы должны иметь возможность применять патч и, наконец, иметь магию :-). Это решение является более чистым, поскольку ему не нужно возиться с реестром.

Чтобы быть более полным здесь, как исправить и скомпилировать вино из источника .

END EDIT

Я обновляю винный реестр скриптом ниже, чтобы добавить список распространенных типов файлов.
Вы можете расширить список, чтобы добавить больше типов.
Он использует /usr/bin/gnome-open в файле gstart.exe поэтому он не будет работать для настольных компьютеров, отличных от gnome .

Поместите это в conf_wine.sh :

 #!/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" 

gstart.exe является gstart.exe bash … и является мостом для обоих миров:

 #!/bin/bash OPEN_HANDLER=/usr/bin/gnome-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" 

Заметки:

  1. скопируйте gstart.exe в текущий рабочий каталог перед запуском conf_wine.sh как он скопирует его в папку .wine .
  2. расположение папок можно изменить, например, gstart.exe не нужно сидеть в c:\ .
  3. не делает магии: новые типы должны добавляться вручную. Вы можете улучшить его, чтобы читать файлы Linux (mimeapps.list, ..) и обновлять реестр вин, если это необходимо.
  4. проверено на работу, по крайней мере, в вине1.4.

Винные FAQ: Как связать родную программу с типом файла в Wine?

Я собрал информацию повсюду и нашел следующее:

Я создал файл с именем ~ / .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" 

Затем: Создал файл linuxnative.reg в моем ~ / bin

со следующим:

 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

Надеюсь это поможет.