Sunday, 15 April 2012

Amarok's rewritten iPod plugin: testers needed!

Little introduction first: I'm a student of theoretical computer science from Prague/Czech Republic and I've started contributing to Amarok last autumn by fixing some of its (mainly iPod-related) bugs.

It turned out that maintaining the iPod collection plug-in was rather painful due to its complexity that accumulated over time - and I got motivated to rewrite it from scratch by Amarok's Bart Cerneels. The effort is now over. Welcome the all-new iPod collection plug-in! (supports iPads and iPhones, too!)
Mandatory screen-shot of the rewritten iPod collection plug-in
What does the rewrite bring? Well, working playlists, transcoding, multiple concurrent transfers, working stale & orphaned tracks detection and elimination plus many more enhancements and bug-fixes. Thanks to the rewrite, some bugs in USB Mass Storage collection got fixed, too.

You'll get all these goodies with Amarok 2.6, which is slated for release in a month or (rather) two. But if you're brave enough, I encourage you to compile Amarok from source using Mamarok's awesome guide and try it now! Please report any bugs you find to KDE bugzilla and if it works, send me a screen-shot of the iPod Device Configuration dialog so that I know how it looks with models I don't have.

iPod collection plug-in is only tested on Linux and won't probably work out-of-the box on other platforms. There is a hope for Windows users, there seems to be an older version of the needed libgpod library in KDE on Windows repositories. It should be possible to port the newest version, 0.8.2, too. Have fun!


  1. W00t! Mine works will send a screenshot ;)

  2. The plug-in does not work with my iPod Touch 2G. I'm commenting here because I want to give feedback and fill a bug, but so far I didn't success. I did the following, so maybe you can help me...:

    - First I connected my iPod. It correctly recognized as an iPod Touch 2G but didn't work for synchronizing songs. First problem was about the Hashinfo file.

    - I mounted the iPod and saw that the Hashinfo file was there.

    - I repeated the process and this time this problem didn't happen. Then, I tried to test the plug-in and synchronize songs. A (nice) window was asking me whether to copy the songs as they are or to convert to other formats. All options but one were not able to be selected, including mp3 and aac. I selected copy as they are and then after a second or two of trying to sync, an error emerge pointing to more info in some log file that I don't know how to find.

    - As I saw those problems I installed also amarok-dbg, but this was worse as when I run amarok now there is an error message about not being able to connect to the iPod and then amarok suffers of a segfault, and there is not any backtrace that I can report for filling a bug.

    So from here I don't know how to help more to get these issues fixed...

  3. Hi avlas, thanks for testing. Please do the following:

    0. Tell me what libgpod version do you use

    1. Install gdb (GNU Debugger) and following debugging packages in addition to amarok-dbg: libglib2.0-0-dbg and libqt4-dbg. (there's no libgpod-dbg, I've filled a bug about that:

    2. Run Amarok under gdb to intercept crashes. Open a terminal and issue:
    $ gdb --args amarok --debug --nofork
    (gdb) run

    3. The output you see is the Amarok debugging log. Connect your iPod etc - if you see weird behaviour, please post several last screens of it to

    4. If Amarok interface freezes, it has crashed. Do to the terminal where gdb session is and issue:
    (gdb) thread apply all bt 30
    # paste complete backtrace for all threads and several last screens of the debug messages
    (gdb) continue # issue this command several times to stop amarok
    (gdb) quit

    That should provide me some useful information. Thanks!

  4. Hi!

    I followed your steps and this is the result:

    Then Amarok crashed:

    Hope this can help a bit...

  5. Thanks for your pastes, I was able to hopefully solve the crash that comes after unsucessfull mount (update from current git and rebuild), but the mount problems still persist.

    What happens when you just run `ifuse --debug /home/yourname/some/directory` from console (without sudo) after iPhone is connected? Paste the outputs of the `mount` command before and after issuing ifuse. What's your version of libgpod, libimobiledevice, ifuse?

  6. Nice to read!
    But there is probably no iOS support for newer devices since the libgpod devs could not yet reverse engineer the new encryption: It's very sad that Apple does this silly play even on the music library - I really like iOS but have to start a VM with iTunes every time I want to sync.

  7. Hi Matej,

    I confirm that the new git version does not crash! So glad that this can be useful! I'm using the following kubuntu 12.04 packages: libgpod4-nogtk 0.8.2-4, libimobiledevice2 1.1.1-4 and ifuse 1.1.1-2.

    I usually mount with ifuse /media/iTouch/ without problems neither any message appears in the console. I added --debug as suggested but this didn't change anything, it mounted without issues and no output appeared from 'ifuse --debug /media/iTouch/', even after installing ifuse-dbg

    BTW, I didn't get what you meant by paste the outputs of the `mount` command before and after issuing ifuse. I mount my iPod Touch simply with the ifuse instruction, did you mean something different or in addition to that?

    Is there anything else I could try?

  8. @Maxi: hardware support is the domain of libgpod, not Amarok. However, even the newest models reportedly work with some hackery of using binary-only library. (search the web, read libgpod 0.8.2 announcement)

    @avlas: sorry about the confusion about the mount command, I simply wanted to see how your mountpoints look, and that's what the mount command shows when called without arguments. Amarok mounts the iPhone by just calling `/tmp/kde-jsardid/amarok/imobiledevice`, so I wonder it doesn't work. Perhaps I should use some randomised mount-point in the code. Please do the following:

    1. paste whole output of the `solid-hardware list details` command run with iPhone connected.
    2. Start with iPhone disconnected. Issue `mount` command and save its output. Start Amarok from console as `amarok --debug --nofork`. Wait until Amarok starts. Start recording Amarok debug log, connect iPhone, and save messages that appear as a result of iPhone being connected. Issue second `mount` command and save its output in another terminal. Paste all 2 outputs (you can squash them into one pase)
    3. Perhaps Amarok mounts iPhone too soon, you may start with Amarok no running, then connect iPhone but don't mount it, then start Amarok. Does it help? I fear not.

    Thanks for your cooperation, avlas.

    1. @Maxi: now I see you said it correcly, disregard my note about what libgpod does.

    2. No problem, it's just sad that Apple locks out us users of their expensive devices on other platforms as OS X and Windows. For the Amarok part: It would be nice if the UI could display some helpful information. Maybe detect the iOS version and the device... I remember that former versions of libgpod didn't care of the iOS version and you could destroy your existing database in no time. Don't underestimate the iOS devices, the most sold iPod is the iPod touch, followed by the iPhone. The nano, shuffle and Classic have only a small percentage of actual users today.

    3. Hmm, Amarok actually already shows some information of connected iPod and tries to detect whether it is safe to write to it. Have you actually tried it??

      What's the source of your claim about actual usage of various iPod models?

  9. Hi,

    Delighted that this can help...

    1. (I just filtered to only keep what refers to the iPod Touch, please tell me if you prefer the raw output)

    2. It seems that this time mounting the iPod Touch worked! But then it was not possible to copy songs to it.

    amarok --debug --nofork:

    In addition to that, I would like to note that in the transcode section only the 'Apple lostless' option (I have that in another language so not sure how exactly this is called in English) is able to be selected, all others are not (AAC, FLAC, MP3, OGG, WMF). Do you have any idea of what's causing it?


    1. Hi Matej,

      I got it working! I realized that the problem was the missing directory structure. I used gtkpod to create it and now syncing is working in amarok.

      So two things that would be incredibly nice:

      1. To be able to create it in amarok

      2. The issues I mentioned above about the transcode options that are not accessible.

      Thanks a lot for your work and please tell me if I could help in anything...

    2. Good! Yes, I will implement 1. in Amarok and it will work without user interaction.
      Regarding 2, you should mouse-over the greyed-out entries - Amarok should give information why it is disabled. Amarok uses ffmpeg to do the transcoding, maybe you can just install additional packages? The actual commands used can be seen in .cpp files in

    3. I recently noticed that if Amarok crashes then /tmp/kde-user/amarok/imobiledevice is not unmounted and then it cannot be mounted back in the future. So I guess that it would be good first to do a sanity check of whether /tmp/kde-user/amarok/imobiledevice has been mounted before and if so remount it (unmount and mount again back, maybe?) instead of getting stacked.

      And with respect to 1, this is great news!

  10. Not sure you saw my last comment so I repeat it here (sorry if you saw it already):

    "I recently noticed that if Amarok crashes then /tmp/kde-user/amarok/imobiledevice is not unmounted and then it cannot be mounted back in the future. So I guess that it would be good first to do a sanity check of whether /tmp/kde-user/amarok/imobiledevice has been mounted before and if so remount it (unmount and mount again back, maybe?) instead of getting stacked."

    In the time being as a workaround I use 'sudo umount /tmp/kde-user/amarok/imobiledevice' in the console.

    1. Yes, I noticed it, but currently trying to think the best way to deal with it. Some options are:

      a) if /tmp/kde-user/amarok/imobiledevice is already mounted, assume it is the correct iPhone and continue. This obviously breaks as soon as you connect multiple iPhones. I have pushed a change to kdelibs to report iPhone's UUID and I will soon update Amarok to use it to construct unique mount-point name.

      b) if /tmp/kde-user/amarok/imobiledevice is already mounted, unmount and remount it. The problem is that unmounting may fail if you have opened some files etc; additionally, I know no way to get notified when the unmouting is possible again. Even detecting if /tmp/kde-user/amarok/imobiledevice is used mount-point may be tricky, see next.

      I have some questions and I think you can help with:
      1. Does multiple-mounting the same iPhone work? E.g. if you issue `ifuse /tmp/iphone1; ifuse /tmp/iphone2`, do the commands succeed? Can you use both mountpoints simultaneously without issues?

      2. When you mount iPhone through ifuse (manually or via Amarok), does it show in KDE's solid? -- what does `solid-hardware list` say? (the udi would probably be /org/kde/fstab/something - if it exists, post me its details)

    2. Hi,

      I'm testing this in an iPod Touch 2G

      1. I didn't experience issues while mounting. I had the device mounted by amarok in /tmp/kde-jsardid/amarok/imobiledevice and then I mounted it manually in /media/iTouch. Then I removed some songs and add some others to test it a bit more. After that I unmounted from amarok and tried to do the same manually from /media/iTouch. It didn't work. This was the result:

      sudo umount /media/iTouch
      umount: /media/iTouch: device is busy.
      (In some cases useful info about processes that use
      the device is found by lsof(8) or fuser(1))

      Curiously, mounting the device again (by restarting amarok) solved (or seemed to solve) the issue (since I cannot completely discard that the problem was not solved by the time it took)

      2. It doesn't seem to say much. This is the result:

      It appears in mtab, but I guess you already knew that:

      ifuse /media/iTouch fuse.ifuse rw,nosuid,nodev,user=myusername 0 0
      ifuse /tmp/kde-jsardid/amarok/imobiledevice fuse.ifuse rw,nosuid,nodev,user=myusername 0 0

    3. Hi,

      I tried this in an iPod Touch 2G:

      1. No problems in mounting in two places, although then if I remove and add songs in Amarok, cannot umount the manual mount as the device appears as busy. Remounting in Amarok (by restarting it) solved the issue.

      2. Nothing in /org/kde/fstab/ from `solid-hardware list details`

      It appears though in /etc/mtab, don't know if this may help:

      ifuse /tmp/kde-jsardid/amarok/imobiledevice fuse.ifuse rw,nosuid,nodev,user=myusername 0 0

    4. Hi, I've significantly improved iPhone mounting (hopefully), see

      I'd be glad if you could test this, too. Thanks!

    5. Great! I'm updating and I'll let you know...

  11. Hi,

    I can see that now the iPod Touch is mounted in a folder that is uuid specific, neat!

    But, I'm still having troubles when amarok crashes, which I achieve by killing it. After that every intent to start amarok crashes it and makes plasma to crash as well (with/without iPod mounted or even in USB so this is I guess beyond the plugin)

    I then start amarok in debug mode and it doesn't crash (why is it behaving differently, btw?)

    If I do kill amarok and restart it in debug mode, then it's behaving as expected and I have access to the iPod even if it was not unmounted before (as I killed it), so this is great!

  12. Good. You've probably upgraded to kdelibs 4.8.3, didn't you? These contain my fix that allows Amarok to read iPhone UUID.

    Speaking of Amarok crashing after you kill it (which now seems unrelated, but I'd like to debug it anyway, I suspect database corruption), please try the following: When starting Amarok for the second time (e.g. when it will crash), start it under gdb _without_ debugging enabled:

    $ gdb --ex run --args amarok --nofork
    (gdb) # (waint until it crashes)
    (gdb) thread apply all bt 30

    If you get meaningful backtrace, please report this as a new bug to along with steps to reproduce (please investigate and try to get the simplest steps to reproduce). Add me (matej at laitl dot cz) to CC list. Thanks!

  13. I was busy these past days and I tried new git version and I'm not having this bug anymore... neat!

  14. Hi!

    I am trying to get my iPod Touch 3rd Gen working with Amarok. I know that I have to use the external hash library. Amarok 2.5 reckognized my iPod but wasn't able to put files on it etc, so I updated to the latest Git version on gentoo.

    However, this version doesn't let the iPod show up as before. I tried with and without ifuse-mounted iPod. In the end I wrote an udev rule to automatically mount it with 'allow_other' but still no luck. Gtkpod shows it, if it is mounted.

    Here is the debug output of amarok if I plug in the iPod:

    amarok: [MediaDeviceCache] Found new Solid device with udi = "/org/kde/solid/udev/sys/devices/pci0000:00/0000:00:1c.3/0000:05:00.0/usb3/3-2"
    amarok: [MediaDeviceCache] Device name is = "iPod" and was made by "Apple Inc."
    amarok: [MediaDeviceCache] udi "/org/kde/solid/udev/sys/devices/pci0000:00/0000:00:1c.3/0000:05:00.0/usb3/3-2" is AFC cabable (Apple mobile device)
    amarok: BEGIN: void MountPointManager::deviceAdded(const QString&)
    amarok: [MountPointManager] looking for udi "/org/kde/solid/udev/sys/devices/pci0000:00/0000:00:1c.3/0000:05:00.0/usb3/3-2"
    amarok: [MountPointManager] Did not find device from Solid for udi "/org/kde/solid/udev/sys/devices/pci0000:00/0000:00:1c.3/0000:05:00.0/usb3/3-2"
    amarok: END__: void MountPointManager::deviceAdded(const QString&) [Took: 0.013s]
    amarok: BEGIN: void MediaDeviceMonitor::deviceAdded(const QString&)
    amarok: BEGIN: void MediaDeviceMonitor::checkDevice(const QString&)
    amarok: BEGIN: virtual bool AudioCdConnectionAssistant::identify(const QString&)
    amarok: END__: virtual bool AudioCdConnectionAssistant::identify(const QString&) [Took: 0s]
    amarok: BEGIN: virtual bool MtpConnectionAssistant::identify(const QString&)
    amarok: Not a PMP
    amarok: END__: virtual bool MtpConnectionAssistant::identify(const QString&) [Took: 0s]
    amarok: END__: void MediaDeviceMonitor::checkDevice(const QString&) [Took: 0s]
    amarok: END__: void MediaDeviceMonitor::deviceAdded(const QString&) [Took: 0s]
    amarok: END__: void MediaDeviceCache::slotAddSolidDevice(const QString&) [Took: 0.014s]
    amarok: BEGIN: bool IpodCollectionFactory::identifySolidDevice(const QString&) const
    amarok: Device "/org/kde/solid/udev/sys/devices/pci0000:00/0000:00:1c.3/0000:05:00.0/usb3/3-2" identified iPod-like using vendor and product name
    amarok: END__: bool IpodCollectionFactory::identifySolidDevice(const QString&) const [Took: 0.002s]
    amarok: BEGIN: void IpodCollectionFactory::createCollectionForSolidDevice(const QString&)
    amarok: device "/org/kde/solid/udev/sys/devices/pci0000:00/0000:00:1c.3/0000:05:00.0/usb3/3-2" has no StorageAccess interface, treating as iPhone/iPad
    amarok: Ignoring above device as it doesn't have PortableMediaPlayer interface
    amarok: END__: void IpodCollectionFactory::createCollectionForSolidDevice(const QString&) [Took: 0s]

    If there is a better place to discuss this, please let me know.

    1. Hi, KDE bugzilla is perhaps better (I get subscribed to all Amarok bugs with Media Devices/iPod component), but let's solve this issue here.

      Speaking about your problem, the culprit is the second line here:
      > amarok: device "/org/kde/solid/udev/sys/devices/pci0000:00/0000:00:1c.3/0000:05:00.0/usb3/3-2" has no StorageAccess interface, treating as iPhone/iPad
      > amarok: Ignoring above device as it doesn't have PortableMediaPlayer interface

      KDE's solid should definitely attach PortableMediaPlayer to /org/kde/solid/udev/sys/devices/pci0000:00/0000:00:1c.3/0000:05:00.0/usb3/3-2. It attaches this interface based on ID_MEDIA_PLAYER udev property. ID_MEDIA_PLAYER should be attached by udev rules from media-player-info package. Since KDE 4.8.3, kdelibs package should runtime-only depend on media-player-info, see [1]. If this is not the case in Gentoo, please bug Gentoo KDE team and CC matej at laitl dot cz on that bug.


      Please note that you should _not_ mount iPhone, Amarok does it and could fail if iPhone is already mounted somewhere else than where Amarok expects.

      Note: iPhone should work in Amarok even with kdelibs <= 4.8.2, but in this case you have to pull media-player-info manually and Amarok won't be able to read iPhone UUID, which is fine as long as you connect only one iPhone.

      In short, please try again with media-player-info installed and report whether it worked.

    2. First, thanks for your quick reply. Indeed, there was the 'media-player-info' package missing. After installation, the iPod showed up in solid as a media player and not as a camera. I removed all custom udev rules for automounting the ipod, but unfortunately, I get the following error when starting amarok with the iPod connected or connecting the iPod with already started amarok:

      determined mount-point path to /tmp/kde-USER/amarok/imobiledevice_uuid_b83335aaeab61fa7fde38089692f71ecd6918f2c
      calling `ifuse "--uuid" "b83335aaeab61fa7fde38089692f71ecd6918f2c" "-ofsname=afc://b83335aaeab61fa7fde38089692f71ecd6918f2c" "/tmp/kde-USER/amarok/imobiledevice_uuid_b83335aaeab61fa7fde38089692f71ecd6918f2c"` with timeout of 10s
      ifuse: fuse: bad mount point `b83335aaeab61fa7fde38089692f71ecd6918f2c': No such file or directory
      ifuse: command exited with non-zero return code 1
      Failed to mount iPhone on /tmp/kde-USER/amarok/imobiledevice_uuid_b83335aaeab61fa7fde38089692f71ecd6918f2c

      Apparently, there is something wrong with the ifuse syntax. I use ifuse 1.1.2 as being the only choice in Gentoo right now and AFAIK the most recent version.

      Again thanks for your help and of course for all the hard work you put into amarok.

  15. Thanks a lot. The package was indeed missing. However, amarok tries to mount the device with the '--uuid' option, which is wrong for ifuse 1.1.2. It should be '--udid' or simply '-u'.

    Is it possible to check for ifuse's version and adopt the command accordingly?

    1. Good catch. Fixed, please pull, rebuild & retest. Can you please fill the Gentoo bug (linking [1] from previous post)? Thanks.

    2. Works for me. Thanks.

      But the syncing does not work. I know, it is not your business, but maybe this can help. The ipod is reckognized aas iPod Touch 4th Gen (I was wrong in the first post) and I ensured that libgpod uses the file accordingly by stracing gtkpod before. Amarok also sreports successful syncing, but the new files are not displayed on the ipod. If I replug the ipod and let amarok reread the db, it does not complain. Apparently it writes to a wrong db?

      Anyway, that's the debug output when ejecting the device:

      ** (amarok:23918): CRITICAL **: itdb_splr_validate: assertion `at != ITDB_SPLAT_UNKNOWN' failed
      [mk_Dynamic] creating table structure
      [mk_Extras] re-building table structure
      [mk_Genius] re-building table structure
      [mk_Library] building table structure
      [mk_Library] compiling SQL statements
      [mk_Locations] re-building table structure
      itdbprep: copying 'Dynamic.itdb'
      itdbprep: copying 'Extras.itdb'
      itdbprep: copying 'Genius.itdb'
      itdbprep: copying 'Library.itdb'
      itdbprep: copying 'Locations.itdb'
      itdbprep: copying 'Locations.itdb.cbk'
      amarok: BEGIN: virtual void CollectionTreeItemModel::collectionRemoved(const QString&)
      amarok: [CollectionTreeItemModel] Removed collection id: "amarok-ipodtrackuid:///tmp/kde-USER/amarok/imobiledevice_uuid_b83335aaeab61fa7fde38089692f71ecd6918f2c"
      amarok: END__: virtual void CollectionTreeItemModel::collectionRemoved(const QString&) [Took: 0s]
      amarok: BEGIN: virtual IpodCollection::~IpodCollection()
      amarok: IpodCollection: IphoneMountPoint: "calling `fusermount "-u" "-z" "/tmp/kde-USER/amarok/imobiledevice_uuid_b83335aaeab61fa7fde38089692f71ecd6918f2c"` with timeout of 10s"
      amarok: IpodCollection: IphoneMountPoint: "fusermount: "
      amarok: IpodCollection: IphoneMountPoint: "Successfully unmounted iPhone from /tmp/kde-eger/amarok/imobiledevice_uuid_b83335aaeab61fa7fde38089692f71ecd6918f2c"
      amarok: IpodCollection: IphoneMountPoint: "Deleted /tmp/kde-USER/amarok/imobiledevice_uuid_b83335aaeab61fa7fde38089692f71ecd6918f2c directory and empty parent directories"

      Gtkpod is also not able to let the new files to be displayed on the ipod even though it thinks that they are referenced in the database.

      Thanks a lot. I will file the bug to tell the Gentoo devs to make the media-player-info package a dependency from kdelibs-4.8.3 on.

  16. This is simple, iOS5 devices aren't supported yet by libgpod, a library that Amarok uses to access it. See

  17. Sorry but anyway this is a piece of shit. During copying music in Amarok to Ipod clasic 160 (black) after some time about 7000 uploaded files Amarok hangs. This drives me crazy.

  18. Perhaps when you stop calling someone's work a piece of shit, the someone might be motivated to actually help you...

  19. Ladislav Šefčík7 January 2013 at 22:30

    Hi Matěj

    I tried Amarok 2.6 because I hope that it supports VoiceOver of my new iPOD shuffle 4G.
    Unfortunately I’m unable to add any music. I didn’t use Amarok before but I believe that it should work by dragging a playlist from amarok database.
    Is there some better way how to transfer music?

    I found out that amarok did not recognize my iPOD’s model.
    Maybe it does matter that I initialized iPOD by windows iTUNES and currently I’m using Fedora 17.

    I tried to google some solution but with no results.
    Could you give me any advice how to solve this issue or direct me where I can find solution?

    Thank you.

  20. Ahoj Láďo,

    initializing iPod in iTunes shouldn't matter and some models even require it (but not yours AFAIK). Dragging tracks/playlist/whatever to iPod is the main way to transfer music, yes. What you should do is to open the iPod Device Configuration dialog (as seen on screenshot above) and check any troubleshooting/info messages. Another thing that should help is starting Amarok from console as:

    amarok --debug --nofork 2>&1 | grep -iC20 ipod

    and watch for any suspicious messages.

    If neither gives any hints, please file a bug on with
    Amarok product and Collections/iPod component and attach a gread deal of
    debugging output, output of solid-hardware list details and a
    screenshot of the mentioned dialog.

    Regarding VoiceOver support I don't think it is supported at all by the libgpod library that Amarok uses for low-level iPod operations. (and Amarok doesn't have any explicit VoiceOver support)

  21. Ladislav Šefčík9 January 2013 at 15:13

    Ahoj :-)

    In case that amarok doesn’t support voiceover there is no need for me to solve
    this issue. I can upload song/playlists by using Fedora’s default music player – rhythmbox quite easily, but the viceover doesn’t work. I tried also banshee and gtkpod but without success and iTunes with Wine doesn’t work at all :-)

    I can live without voiceover but it would be nice to have this feature for easier and faster orientation in iPOD shuffle. Maybe the best would be if Apple could implement some easier way to switch albums/playlist (e.g. by double-click), but this is really out of topic I think :-)

    Anyway thank you for your response and advices. Maybe someone else will use it for solving similar issues.

  22. Well, gtkpod, Amarok, Rhythmbox and Banshee use libgpod library to access the iPod. (we don't reinvent the wheel!) So if someone managed to implement VoiceOver support in libgpod (perhaps you can help?), all these players would then get it for free, automatically.

  23. Matej,
    wold like to test the iPod-Interface (Nanao 6G) under Win 7 .
    Is there a Version 2.7 available?
    Couldn't find a download

  24. There's currently no living port of libgpod to Windows, so no luck for Win users yet. You are always welcome to help, contact folks at

  25. This works well on openSUSE for my pod classic 5th generation. Thanks for the excellent work.

  26. didnt work at all