I’ve finally made it. I can now use my iPod Touch just with Linux. Apple adding over the air updates really helped, but I still couldn’t sync my music. I also found that pulling large videos off via Dropbox didn’t work as the app would time out. I had been trying to get gtkpod to work, but kept running into a problem with the database checksum on the music database. Recently I found Phone Drive and this has solved my problem. This app lets me copy images and videos out of my camera roll into the app and then the app will bring up a web server and an ftp server on the device. I can then browse the files from my web browser and download the files to my desktop. I can also put files up this way. Phone Drive also has a built in music player that will play any directory as a playlist and supports users adding their own playlists. So I wrote a little script (below) that will generate a playlist for all music and one for each artist on my computer and then I can upload those and all of my music via ftp. I did have a little trouble with some ftp programs that want to open multiple connections. In the end I used ncftp as it doesn’t try to open multiple connections and it has the ability to upload directories recursively. I did find one oddity that I needed to turn off the auto conversion of ascii files otherwise playlist files got their line endings changed and Phone Drive wouldn’t recognize them.
So my current list of apps that I regularly use is this:
- Calendar syncing with Google, either via Active Sync or via caldav (this allows the colors to sync)
- Contacts syncing with Google as an Exchange account
- GMail app for mail from Google as I prefer the way Google does conversations
- Appigo Todo syncing with Toodledo
- PlainText for notes
- Dropbox for keeping family pictures and moving images between my device and my computer
- MiniKeePass on my device and KeePassX syncing through Dropbox
- Podcaster for audio and video podcasts
- ReadItLater for offline access to web pages
#!/bin/sh
debug() { ! "${log_debug-false}" || log "DEBUG: $*" >&2; } log() { printf '%s\n' "$*"; } warn() { log "WARNING: $*" >&2; } error() { log "ERROR: $*" >&2; } fatal() { error "$*"; exit 1; }
mydir=$(cd "$(dirname "$0")" && pwd -L) || fatal "Unable to determine script directory"
cd "${mydir}/mp3"
# generate artist playlists find . -maxdepth 1 -type d -print0 | while read -d $'\0' dir do short_dir="${dir#./}" if [ "${short_dir}" != "." ]; then playlist="${mydir}/itouch-playlists/aaa_${short_dir}.m3u" log "Processing ${short_dir}" printf "" > "${playlist}" find "${short_dir}" -type f -name '*.mp3' -printf "/music/%p\n" >> "${playlist}" mv "${playlist}" "${dir}" fi done
# generate all music playlist log "Generating all music playlist" find . -type f -name '*.mp3' \ -fprintf "${mydir}/mp3/aaa_all_music-new.m3u" "/music/%P\n"