Часто требуется, чтобы при работе в WINE файлы по ассоциациям открывались родными Linux программами в системе. К примеру, щелчок по файлу doc/docx/odt и вот уже запускается LibreOffice и т.д. К сожалению, пример от разработчиков в вики WINE уводит людей в такие сложности, хотя есть вариант попроще.
В чём недостаток примера из вики WINE? В ней рекомендуется создать исполняемый скрипт-обработчик run_linux_program внутри $HOME/bin, который если существует, то заносится для удобства в переменную $PATH.
#!/bin/sh
$1 "`wine winepath -u "$2"`"
А потом предлагается начать тяжкий труд по ручному созданию reg файлов на каждое интересующее вас расширение на примере pdf.
[HKEY_CLASSES_ROOT\.pdf] @="PDFfile" "Content Type"="application/pdf" [HKEY_CLASSES_ROOT\PDFfile\Shell\Open\command] @="/bin/sh run_linux_program acroread \"%1\""
Здесь мне уже не понравилось упоминание программы (в примере это acroread), который пойдёт первым параметром в скрипт ~/bin/run_linux_program. Если вы завтра захотите сменить дефолтный вьювер PDF файлов? А что если удалите Acrobat Reader?
Решил написать bash скрипт wine-file-associations (архив wine-file-associations), который "сделает всё красиво". До его использования желательно открыть его вашим любимым редактором и изменить переменные WINEPRFX и NEED_EXT под ваши нужды. В переменной WINEPRFX по умолчанию значение ".wine", если вы используете другой префикс, то укажите его. В переменной NEED_EXT по умолчанию значение "bmp gif png jpg jpeg svg pdf tif tiff rtf doc docx xls xlsx odt ods vsd zip rar 7z eml". В нижнем регистре через одиночный пробел сформируйте свой список расширений, обработка которых будет осуществляться НЕ внутри WINE, а в вашей Linux системе.
От вашего лица (не root) сделайте скрипт wine-file-associations исполняемым через chmod a+x wine-file-associations
или запускайте sh ./wine-file-associations
. Что делает скрипт?
1) Создаёт папку ~/bin/ и там скрипт-обёртку run_linux_app с содержимым
#!/bin/bash xdg-open "$(winepath --unix "$1")"
2) Делает копию реестра в вашем префиксе WINE.
3) Начинает формировать файл реестра, выставляя для указанных вами расширений использование обработчика UniversalHandlerW2L, который будет вызывать ~/bin/run_linux_app, но уже в Windows стиле аля Z:\home\ваш_аккаунт\bin\run_linux_app
Как работает эта магия? Внутри WINE если вы будете щёлкать по файлам с расширением из списка NEED_EXT, то в реестре будет указано использовать скрипт-обработчик run_linux_app, который благодаря xdg-open сможет открыть данный файл в той программе, которую вы используете в вашей Linux системе.
Отсюда приятные выводы. Если вы меняете дефолтную программу для данного расширения, то лишних телодвижений делать не нужно. Если вам в будущем потребуется обработка новых расширений, то просто модифицируйте NEED_EXT и снова запускайте скрипт wine-file-associations.
В данном месте совет! Сначала в вашей Linux машине пощёлкайте по нужному расширению и убедитесь что запускается нужная программа и вам нравится, как файл в ней открывается и выглядит.
Жду отзывов и предложений по улучшению.
Дополнительные материалы:
Как я подружился с PlayOnLinux.
Запуск игр в префиксах WINE.