If you want to listen to your music library on the go, you can tunnel iTunes through SSH in a few easy steps.
First of all, you have to enable sharing in iTunes: iTunes > Preferences > Sharing > Share my library on my local network.
This will announce your library on your local network using multicast DNS, provided by Apple’s implementation of zeroconf: Bonjour. The library can then be accessed on port 3689 of the computer mDNS announced.
Hence, to access your local library on a distant network, we will implement two things: ssh tunneling of port 3689 for the data to be transmitted, and mDNS announcement of the library on the new network so iTunes is aware of where to get it.
We will assume:
– local = where me & my laptop are
– remote = where iTunes is (=server).
Tunneling port 3689
We will tunnel port 3689 of the remote computer to a port of your choice on your local computer:
ssh -N florent@myServer -L 3690:localhost:3689 -f
-L is the standard syntax for SSH tunneling. man ssh tells us the three arguments stands for port:host:hostport; as in “send data received at my own port to the hostport of said host“. Here for example, it means: tunnel all data received on my port 3690 to this SSH connection’s localhost (myServer) on its port 3689.
Feel free to change 3690 to the port of your choice, replace florent@myServer by your own login/host combination, and add a -p if you use a non-standard port for SSH (which is a Good Thing(tm)!).
The -f argument means the SSH tunnel will stay in the background. Finally, -N tells SSH not to execute a command on the remote side (i.e. launch a terminal on the server), meaning we will only use this connection to forward data.
Announcing the library
We will use this command to declare the new library:
dns-sd -P iTunesServer _daap._tcp local 3690 localhost.local 127.0.0.1 &
This command sets up a DNS proxy (-P) called iTunesServer, retransmitting DAAP announcements, on the local domain, on port 3690 of host localhost.local (at address 127.0.0.1).
You should get the following output from dns-sd:
Registering Service iTunesServer._daap._tcp.local host localhost.local port 3690
0:24:30.140 Got a reply for service iTunesServer._daap._tcp.local.: Name now registered and active
0:24:30.140 Got a reply for record localhost.local: Name now registered and active
Note that this will only advertise the library on your own computer. If you want other computers on your network to see the library you’re tunneling to, use the following command, where ComputerName is the Bonjour name of your computer (set in System Preferences > Sharing > Computer Name):
Playback can be a bit choppy if your server’s upload or laptop’s download is low, but it usually should be okay – MP3 and AAC yields great results around 192 to 320 kbps, equivalent to an average 25 to 40 kB/s transfer rate.
Note that this method also allows you to use a password (set up in iTunes) to protect your shared libraries.
Applications on Mac OS typically include a lot of stuff most people won’t use daily, especially translations in foreign languages and builds for different architectures (x86, x86_64, PPC and PPC 64 bits).
A handful of utilities exist to trim down applications. I personally use Trimmit, a free-as-in-beer software that gives excellent results, as long as it’s used carefully.
For example, let’s take the latest version of iTunes (v9.1) under Snow Leopard.
This is the default install:
A simple cleanup of foreign languages and compression of TIFF files shrinks iTunes into this more reasonable app:
Trimmit already cut iTunes size by nearly two thirds (!), and iTunes works flawlessly.
That’s about the best results I’ve had with Trimmit, because things get ugly if you want to squeeze it too far.
Still want to push things more? Okay, let’s keep only the x86 binaries:
That’s another 17MB trimmed… But this manipulation breaks iTunes code signature. Which will -if you run OS X firewall, like everyone should- trigger a message asking you if you want to allow iTunes to connect to Internet each time you run it.
Still seem a bit big? Well let’s check every option in Trimmit and go for it.
That’s 100kB more freed, but now iTunes crashes at startup. Seems that “useless files” aren’t that useless after all.
It’s important to keep in mind that Trimmit doesn’t work well with any applications.
You should be particularly careful (read: do not try) with Adobe applications and other applications on the blacklist. But overall, the extra space can be a very good thing, especially on small partitions and/or on SSDs.
My home main computer is a MacBook Pro, on which I frequently play music with iTunes. However, I’m often on my laptop, without direct access to the MBP’s screen or keyboard/mouse to pause, change song, change volume, etc. I can connect to the MBP using VNC, but I was looking for something more lightweight.
I therefore decided to design a command-line interface for iTunes, that I would run via SSH. I called it Seitunes for reasons I can’t really remember right now, but there it is!
– written in C and interfaces with iTunes through AppleScript
– designed for OS X – should be compatible with quite old versions actually, because it doesn’t rely on a lot of cutting edge features
– built upon the curses library
– very very small
– still under development
– Free software (GPLv3)
– available here
> Display iTunes playing track and status
> Control iTunes playback (play/pause, volume, next song/previous song)
> If iTunes is stopped when Seitunes starts, it starts iTunes and starts a song from the Library.
> Add more tests to better check iTunes state and not trigger Applescript errors
> Add info about playlists in order to be able to play a specific playlist instead of the whole library
> Add an option to toggle shuffle
> Implement the “quit iTunes” function and check that it doesn’t cause more Applescript problems
> An error message flickers when an Applescript error is triggered (often when iTunes quit while Seitunes is opened)