Вопрос или проблема
Прежде всего, прошу прощения за публикацию этой проблемы с Wine здесь. Я уже пробовал форум WineHQ, но, к сожалению, никто не смог мне помочь. Может быть, мне повезет здесь больше.
У меня проблема с запуском Wine 9.0 и настройками Windows- приложений. Всякий раз, когда приложение выходит “неаккуратно” (например, я просто перезагружаю ПК), не закрыв Windows-приложение заранее, все настройки просто теряются. Я наблюдаю это поведение с тех пор, как начал использовать Wine – это не специфично для версии 9.0.
В качестве примера, когда я запускаю Notepad++ под Wine, я включаю автоматический перенос слов в его настройках. Это работает и также восстанавливается правильно, когда я явно закрываю Notepad++ перед перезагрузкой. Когда я просто перезагружаю свой ПК, не закрывая Notepad++ заранее, все сделанные мною настройки просто теряются. А настройки последнего “аккуратного” выхода восстанавливаются, когда я открываю Notepad++ в следующий раз. Можно ли как-то предотвратить это, например, сохраняя состояние запущенного Windows-приложения периодически? Или есть какой-то трюк, который я могу использовать, чтобы сказать Linux (в моем случае Ubuntu 20.04) закрывать любое запущенное приложение Wine “аккуратно”, а не убивать его силой, например, перед перезагрузкой?
Notepad++ – это всего лишь один пример. Это происходит и с другими Windows-приложениями.
Любая помощь будет очень ценна. Заранее большое спасибо.
После того, как я поиграл с менеджером сессий (скрипт PostSession gdm3), я в итоге создал файл .desktop
и добавил его в свою панель:
$ cat ~/.local/share/applications/clean-shutdown.desktop
[Desktop Entry]
Name=Чистая перезагрузка
Exec=sh -c "gnome-session-quit --power-off && wmctrl -l | cut -d ' ' -f1 | xargs -rL1 wmctrl -ic"
Terminal=false
Type=Application
Icon=system-shutdown
Comment=Закрывает все открытые окна аккуратно через wmctrl перед выключением (правильно сохраняет настройки приложений Wine)
Это не самое элегантное решение, но оно работает на данный момент.
Единственный небольшой недостаток в том, что команда wmctrl
всегда выполняется, даже если я не подтверждаю диалог выключения. Я не нашел, как это обойти.
Ответ или решение
Ваша проблема с сохранением настроек приложений в Wine при незавершенном выходе — это довольно распространенное явление среди пользователей, работающих с программами, эмулируемыми на Wine. Давайте разберем основные аспекты данной ситуации и рассмотрим возможные решения.
Проблема: Неправильное завершение приложений
Как вы упомянули, при неправомерном завершении, например, при перезагрузке компьютера без предварительного закрытия приложения (в данном случае Notepad++), все изменения в настройках теряются. Это связано с тем, что Wine не успевает сохранить состояние приложения в момент его неаккуратного завершения и возвращается к последнему сохраненному состоянию при следующем запуске.
Решения
-
Программное обеспечение для управления окнами:
Вы нашли разумное решение, используя инструментwmctrl
для закрытия всех открытых окон перед завершением работы системы. Это действительно позволяет обойти проблему с потерей данных и не сохраняемыми настройками.Ваш скрипт
.desktop
эффективно автоматизирует этот процесс:[Desktop Entry] Name=Clean shutdown Exec=sh -c "gnome-session-quit --power-off && wmctrl -l | cut -d ' ' -f1 | xargs -rL1 wmctrl -ic" Terminal=false Type=Application Icon=system-shutdown Comment=Closes all open windows cleanly through wmctrl before shutdown (saves Wine app settings properly)
Такой подход позволяет вам правильно завершить работу Wine-приложений.
-
Периодическое сохранение состояния:
К сожалению, Wine не предоставляет встроенной функции для регулярного автоматического сохранения состояния приложений. Однако вы можете добавить в ваш скрипт дополнительные команды для автоматизации этих сохранений, если приложение поддерживает команду для сохранения состояния через консоль (например, с помощью аргументов командной строки). -
Использование системного менеджера сессий:
Вы также можете рассмотреть возможность настройки вашего дисплейного менеджера, такого какgdm3
, чтобы он автоматически вызывал свой скрипт перед завершением сеанса. Это требует немного более глубоких познаний в конфигурации системных настроек и может варьироваться в зависимости от используемой среды рабочего стола. -
Обновление Wine:
Хотя вы указали, что проблема наблюдается не только в версии 9.0, использование актуальной версии Wine может помочь избежать некоторых известный ошибок, связанных с управлением состоянием приложения. В новой версии могут быть внесены улучшения в управление памятью и сохранение состояния, которые могут помочь Зависимости текущих версий также могут быть важны.
Вывод
Ваша текущая реализация с wmctrl
— это одно из эффективных решений для вашей проблемы. Возможно, вы также захотите выяснить, можно ли настроить его так, чтобы команда выполнялась только при подтверждении завершения, что улучшит удобство использования.
Если у вас остались дополнительные вопросы или вы хотите обсудить другие аспекты работы с Wine, пожалуйста, не стесняйтесь обращаться. Удачи в использовании Wine и в дальнейших настройках вашей системы!