Dec 272010
 

I have lately noticed that my Ubuntu crash when unplugging the power cord from my Laptop. This seemed to have something with the disk or disk controller since i would get ATA and file system kernel oops, and eventually a full crash.

After a bit testing i found that this came from acpid calling pm-utils (power management utilities) when unplugging the power cord.
A bit more testing revealed that it was the sata_alpm script which was the problem.
From the sata_alpm file it says it does the following:

This hook tries to save power by allowing SATA controllers to
reduce power usage when the SATA subsystem is otherwise idle.
This adds a little bit of latency to drive accesses in
exchange for moderate power savings if you are not using the drive.

I was able to circumvent this issue by doing sudo touch /etc/pm/power.d/sata_alpm.
Immediately after this i am able to unplug my power cord just as i please.

I have not given any time to solving the underlying cause for the freeze in the first time, as this lies in the part of the kernel telling the OS and file system that the drive has gone away sleeping.

Some information about the commit causing this problem: http://kerneltrap.org/mailarchive/git-commits-head/2009/12/8/15922

Apr 272010
 

This is a very short, and “simple” explanation how i made Spotify 0.4 play local MP3 files under Linux with Wine.
I have not tested this elsewhere, and i can not guarantee that everyone has to do the same steps as me.

If you want to try my finished file you can download it here: winemp3.acm.so (x86 only)
Place it in /usr/lib/wine/ (x86) or /usr/lib32/wine/ (x64).

Or if you need to do things a tad more automatic you can try this script which will do everything automatically for the ones of you on x86: winefix.sh

For those of you who want the technical details: continue reading 🙂

You should try and skip step 3 if possible, but if Spotify just hangs and max out your CPU you should do step 3.

You can also use an hex editor to change WINE-MPEG3 to LAME-MPEG3 in /usr/lib/wine/winemp3.acm.so to try before doing the, for me, crucial step number three.

Step 1: Download the wine source code.
Step 2: run configure to create the appropriate Makefiles
Step 3: edit dlls/winemp3.acm/mpgl3.c and change the following:

if (dpos > *ndst) break;
} while (ret != MPG123_ERR && ret != MPG123_NEED_MORE);
*ndst = dpos;

To this:


if (dpos >= *ndst) break;
} while (ret != MPG123_ERR && ret != MPG123_NEED_MORE);
*ndst = dpos;

Step4: Change the following:

add->cFilterTags = 0;
add->hicon = NULL;
MultiByteToWideChar( CP_ACP, 0, "WINE-MPEG3", -1,
add->szShortName, sizeof(add->szShortName)/sizeof(WCHAR) );

To this:

add->cFilterTags = 0;
add->hicon = NULL;
MultiByteToWideChar( CP_ACP, 0, "EFO", -1,
add->szShortName, sizeof(add->szShortName)/sizeof(WCHAR) );

Step 5: Run make to compile the new codec.
Step 6: copy the codec to /usr/lib/wine/ (ubuntu atleast)
Step 7: Run Spotify and enjoy.

This worked for me, but it is not recommended as i changed some code in the MP3 library in Wine.
If you use Wine with other programs which utilizes the mpeg3 library they might break.

UPDATE 1: It seems like my hack will give some problems with automatic changing of songs. The codec does not understand that the song is finished, and will just generate noise.

UPDATE 2: Ok, new fix. This time it does infact end where it should, and continues to the next track. Step 3 is updated. Same with the binary file, and scripts.

UPDATE 3: Moved around some text in this post.