Опция построения меню и изменения ассоциации файлов в Wine задумывалась из благих побуждений. По крайней мере на это хочется надеяться. Видимо, кто-то сильно верил, что в будущем с помощью Wine можно будет запустить абсолютно всё и заранее приготовил «интеграцию».
Да, опция имела бы смысл, если бы Wine был частью каждого рабочего стола по умолчанию, любая Windows программа запускалась бы в один клик и работала как часы. Тогда обычному пользователю не нужно было бы знать всю кухню, связанную с Wine. Пользователь загружает exe-файл из интернета, кликает по нему, и программа устанавливается. В меню и на рабочем столе появляются соответствующие ярлычки, и прописываются соответствующие ассоциации файлов. И в дальнейшем при двойном клике, например, на psd — открывается Photoshop и всё это выглядит нативно.
На практике же у тех, кто активно использует Wine, в системе куча разных префиксов, не одна сборка Wine «на все случаи жизни», и никто в здравом уме не запускает «uninstall.exe» при удалении чего-либо. Пользователь удаляет префикс и создаёт следующий. Со временем пользователь замечает, что в меню десяток ярлычков на Uplay, в «играх» тоже чёрт ногу сломит и вишенка на торте — отдельный пункт «Wine», дублирующий всё то, что размазано по другим пунктам. Дальше интереснее: попытка запуска оцифровки позапрошлого юбилея бабушки выдаёт что-то на тему неспособности запустить Windows Media Player 10, а уже упомянутые PSD не в курсе, что в системе есть Gimp.
Те, кто принимает решения в проекте Wine о чём-то таком догадываются. Поэтому начиная с версии 3.14 в настройках «интеграции рабочего стола» есть чекбокс, в пункте «MIME Types», позволяющий отключить попытки Wine перестроить ассоциации файлов. На сегодня по умолчанию опция включена. То есть после создания каждого префикса нужно идти в эти настройки и снимать галку.
В Valve используется радикальный подход: в Proton отсутствует файл «winemenubuilder.exe». В последних версиях отсутствует и «winecfg», но это не имеет отношения к теме. В Lutris есть опция, отключающая функционал «winemenubuilder.exe» во всех подключённых к нему префиксах. В большей части публичных сборок Wine опция так же отключена. Но большинстве дистрибутивов Wine собран «как есть», то есть со всеми «преимуществами» настроек «по умолчанию».
Что можно предпринять, если у вас уже бардак в меню и беда с ассоциациями файлов?
Для решения проблемы с ассоциацией файлов и очистки списка «открыть с помощью» используйте следующие команды:
Для наведения порядка в меню используйте следующее:
Используйте отдельные префиксы для каждого приложения. Удалите префикс «по умолчанию», созданный случайно, или по незнанию. Префикс по умолчанию обычно расположен в корне домашнего каталога в папке «.wine».
Что предпринять для предотвращения вышеописанных проблем в будущем?
1. Можно отключать ассоциацию файлов вручную, каждый раз после создания префикса. Нудно и можно случайно забыть.
2. «Лучшее лекарство от головы — топор». Это понятие спорное, но подход Valve довольно действенен. Если удалить этот файл из сборки, то проблема решится. Файл находится в том же месте, где и сам бинарник Wine, в папке «bin». Минусом является то, что консоль будет плеваться ошибками по поводу того, что не может найти «winemenubuilder.exe».
3. Можно отключить «winemenubuilder.exe» с помощью Winetricks. Опять же, вручную, для каждого префикса. Пример:
4. Более действенным способом является использование сборок, где всё уже отключено.
5.Можно отключить вручную, в любой сборке, включая системную. Для этого нужно внести изменения в файл «wine.inf». Файл находится по адресу «/share/wine/», относительно корневой папки сборки. Для этого выполните следующие два команды (с правами root, если сборка системная):
Где "path_to_wine" - путь до сборки Wine.
При использовании последнего способа, все создаваемые сборкой префиксы не будут пытаться что-то добавлять в меню, или перестраивать ассоциации файлов. Галка в настройках интеграции рабочего стола при этом может стоять, но работать не будет.
Да, опция имела бы смысл, если бы Wine был частью каждого рабочего стола по умолчанию, любая Windows программа запускалась бы в один клик и работала как часы. Тогда обычному пользователю не нужно было бы знать всю кухню, связанную с Wine. Пользователь загружает exe-файл из интернета, кликает по нему, и программа устанавливается. В меню и на рабочем столе появляются соответствующие ярлычки, и прописываются соответствующие ассоциации файлов. И в дальнейшем при двойном клике, например, на psd — открывается Photoshop и всё это выглядит нативно.
На практике же у тех, кто активно использует Wine, в системе куча разных префиксов, не одна сборка Wine «на все случаи жизни», и никто в здравом уме не запускает «uninstall.exe» при удалении чего-либо. Пользователь удаляет префикс и создаёт следующий. Со временем пользователь замечает, что в меню десяток ярлычков на Uplay, в «играх» тоже чёрт ногу сломит и вишенка на торте — отдельный пункт «Wine», дублирующий всё то, что размазано по другим пунктам. Дальше интереснее: попытка запуска оцифровки позапрошлого юбилея бабушки выдаёт что-то на тему неспособности запустить Windows Media Player 10, а уже упомянутые PSD не в курсе, что в системе есть Gimp.
Те, кто принимает решения в проекте Wine о чём-то таком догадываются. Поэтому начиная с версии 3.14 в настройках «интеграции рабочего стола» есть чекбокс, в пункте «MIME Types», позволяющий отключить попытки Wine перестроить ассоциации файлов. На сегодня по умолчанию опция включена. То есть после создания каждого префикса нужно идти в эти настройки и снимать галку.
В Valve используется радикальный подход: в Proton отсутствует файл «winemenubuilder.exe». В последних версиях отсутствует и «winecfg», но это не имеет отношения к теме. В Lutris есть опция, отключающая функционал «winemenubuilder.exe» во всех подключённых к нему префиксах. В большей части публичных сборок Wine опция так же отключена. Но большинстве дистрибутивов Wine собран «как есть», то есть со всеми «преимуществами» настроек «по умолчанию».
Что можно предпринять, если у вас уже бардак в меню и беда с ассоциациями файлов?
Для решения проблемы с ассоциацией файлов и очистки списка «открыть с помощью» используйте следующие команды:
rm -f ~/.local/share/mime/packages/x-wine*
rm -f ~/.local/share/applications/wine-extension*
rm -f ~/.local/share/icons/hicolor/*/*/application-x-wine-extension*
rm -f ~/.local/share/mime/application/x-wine-extension*
Для наведения порядка в меню используйте следующее:
rm -f ~/.config/menus/applications-merged/wine*
rm -rf ~/.local/share/applications/wine
rm -f ~/.local/share/desktop-directories/wine*
rm -f ~/.local/share/icons/????_*.{xpm,png}
rm -f ~/.local/share/icons/*-x-wine-*.{xpm,png} }}}
Используйте отдельные префиксы для каждого приложения. Удалите префикс «по умолчанию», созданный случайно, или по незнанию. Префикс по умолчанию обычно расположен в корне домашнего каталога в папке «.wine».
cd
rm -rf .wine
Что предпринять для предотвращения вышеописанных проблем в будущем?
1. Можно отключать ассоциацию файлов вручную, каждый раз после создания префикса. Нудно и можно случайно забыть.
2. «Лучшее лекарство от головы — топор». Это понятие спорное, но подход Valve довольно действенен. Если удалить этот файл из сборки, то проблема решится. Файл находится в том же месте, где и сам бинарник Wine, в папке «bin». Минусом является то, что консоль будет плеваться ошибками по поводу того, что не может найти «winemenubuilder.exe».
3. Можно отключить «winemenubuilder.exe» с помощью Winetricks. Опять же, вручную, для каждого префикса. Пример:
WINEPREFIX="/путь до префикса" winetricks winemenubuilder.exe=disabled
4. Более действенным способом является использование сборок, где всё уже отключено.
5.Можно отключить вручную, в любой сборке, включая системную. Для этого нужно внести изменения в файл «wine.inf». Файл находится по адресу «/share/wine/», относительно корневой папки сборки. Для этого выполните следующие два команды (с правами root, если сборка системная):
sed 's/winemenubuilder.exe -a -r/winemenubuilder.exe -r/g' /path_to_wine/share/wine/wine.inf -i
sed 's| LicenseInformation| LicenseInformation,\\\n FileOpenAssociations|g;$a \\n[FileOpenAssociations]\nHKCU,Software\\Wine\\FileOpenAssociations,"Enable",,"N"' /path_to_wine/share/wine/wine.inf -i
Где "path_to_wine" - путь до сборки Wine.
При использовании последнего способа, все создаваемые сборкой префиксы не будут пытаться что-то добавлять в меню, или перестраивать ассоциации файлов. Галка в настройках интеграции рабочего стола при этом может стоять, но работать не будет.
___
Tatyana K.
Tatyana K.