The forum

Some issues with updating to newer versions of Wine in POL

Author Replies
shmerl Wednesday 29 July 2015 at 3:46
shmerlAnonymous

I use PlayOnLinux as my Wine manager, and I usually try to install the newest Wine when it comes out (not every time to avoid all the hassle below, but still not very infrequently). Currently in POL it has some issues which make this update not as seamess as it could be.

 

1. After installing the new version, I have to go through the list of installed applications individually, and do Configure > General > Wine version and bump the version there. And the more applications are installed, the more manual and tedious this step becomes. Is there some way to basically do "select all" and bump the version for all applictinos (or a selected subset)? If there is no such option, it would really great to add it in the UI somewhere.

2. After bumping the version I always have to go and configure Wine for each application. It runs some migration procedure, but it has one annoying issue. In Desktop Integration (in Wine settings) I usually disable all folders except for Desktop (since it annoyingly uses $HOME for many of them). Every time that migration happens, many of them are enabled back! So I have to go in there and disable them again... Is it a bug with that migration step? Is there a way to avoid it, or may be to provide a preset (i.e. only enable Desktop)? If it's a general Wine bug - I can report it to the Wine bug tracker.


Thanks!

Edited by shmerl

petch Wednesday 29 July 2015 at 8:49
petch
Developer

   Hi shmerl,

1. There's currently no such feature, but there's an RFC for one: #5099

It's only scheduled for PoL v5 however, and even then maybe not on first release.

An alternative for now to manually updating each virtual drive could be something like

sed -i.bak -e 's/^VERSION=1\.7\.47$/VERSION=1.7.48/' ~/.PlayOnLinux/wineprefix/*/playonlinux.cfg

replacing the Wine versions for your transition. Be careful with that though ;)

2. PoL is not involved in this "migration" procedure, and I could reproduce the problem you describe easily, so I think it's a Wine bug also.

If you look at how it's implemented, Wine normally creates those user directories in virtual drives as symlinks to what it considers counterpart directories in the hosting system (probably using $HOME if it can't find the directories it expects, hence the mess). Disabling this integration in the interface replaces those symlinks with empty directories.

So two workarounds for you:

- instead of disabling the integration, make them point to another "sandbox" directory you created; This won't be overridden by Wine version changes. This is what I use, using the "CentralizedUserDirs" pseudo component, and why I didn't notice this bug before;

- putting anything in those empty directories prevent them from being replaced by symlinks during Wine version changes. I don't know if it's a feature, or just makes rmdir() fail, but it works. I just modified "PrivateUserDirs" pseudo component to use this trick.

Notice you can customize newly created virtual drives using the undocumented post_prefixcreate hook script.

Both "PrivateUserDirs" and "CentralizedUserDirs" modify all directories integration, including Desktop, so they may not be exactly what you want. Their implementation is quite straightforward, so you could use a modified implementation directly into a post_prefixcreate script.

When is desktop directory integration useful though?

Regards,

Pierre.

Edited by petch

shmerl Thursday 30 July 2015 at 5:23
shmerlAnonymous

petch: Thanks! That sed tip is very useful - I'll do that until UI feature will arrive :)

I filed a bug about symlinks here: https://bugs.winehq.org/show_bug.cgi?id=38994

Here is a modified part of your script to preserve Desktop only (thanks for the hint about that hook):

find "$WINEPREFIX/drive_c/users/$USER" -maxdepth 1 \( -name 'My Documents' -o -name 'My Pictures' -o -name 'My Music' -o -name 'My Videos' \) | while read dir; do { echo "fixing $dir"; rm "$dir"; mkdir "$dir"; touch "$dir/.fixed"; } done

 

Edited by shmerl