Авторские статьи об OpenSource

Ассоциации файлов в WINE.


Часто требуется, чтобы при работе в 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, который "сделает всё красиво". До его использования желательно открыть его вашим любимым редактором и изменить переменные WINEPRFX и NEED_EXT под ваши нужды. В переменной WINEPRFX по умолчанию значение ".wine", если вы используете другой префикс, то укажите его. В переменной NEED_EXT по умолчанию значение "png jpg jpeg pdf tiff doc docx xls xlsx odt ods vsd". В нижнем регистре через одиночный пробел сформируйте свой список расширений, обработка которых будет осуществляться НЕ внутри WINE, а в вашей Linux системе.

Пример запуска нативных Linux программ по ассоциациям в WINE

От вашего лица (не 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.

    Twitter   


Разделы

Главная
Новости
Ворох бумаг
Видео Linux
Игры в Linux
Безопасность
Статьи о FreeBSD
Статьи об Ubuntu
Статьи о Snappy
Статьи об Ubuntu Phone
Статьи о Kubuntu
Статьи о Xubuntu
Статьи о Lubuntu
Статьи об Open Source
Карта сайта