In order for programs like Amarok to connect to your iPhone via SSH without asking for a password, you can set up key based logins. You can skip this step if you're happy mounting it manually from a terminal, typing your password each time.
- Make a private and a public key. We'll specify a different identity than the default, so it won't conflict with any existing keys you have. Run the following command in a terminal:
$ ssh-keygen -t rsa -f ~/.ssh/iphone_identity -N ""This will create a directory called .ssh in your home directory, and place three files in there: iphone_identity, iphone_identity.pub, and known_hosts. iphone_identy is your private keyfile, and iphone_identity.pub is your public one. You want your device to have the public key so you can authenticate towards it with your private one.
- Install your public key to the device. If it asks if you want to accept the untrusted device as a trusted host, do so.
$ ssh-copy-id -i ~/.ssh/iphone_identity.pub root@<device ip>
- Log into your iPhone again.
$ ssh root@<device ip>If it at this point asks for your password, that means the server installed on the device has not yet been configured to accept keys as a method of authorization. Ergo, you are not using "Ste's OpenSSH package", which will be mentioned later in this wiki. For the time being, the default password for 1.1.0 phones is 'dottie', and 'alpine' for 1.1.1 and 1.1.2 phones.
- Change the password. This is important for security. You will eventually be logging in via your key anyway, but make it something you'll remember.
- NOTE: On firmware 1.1.3, BSD Subsystem maintainers highly recommend against using the "passwd" command until a stability bug is fixed. Until then, you can use this command, and replace the output password hashes for the users 'root' and 'mobile' in /etc/master.passwd on your device.
$ perl -e 'print crypt("yourpasswordhere", "/s");'
The following steps do NOT apply to Ste's OpenSSH package, which is probably the most common one now. In order to get passwordless login working with Ste's package, rename your ~/.ssh/authorized_keys file on your device to ~/.ssh/authorized_keys2 and proceed straight to adjusting the permissions as described below ("if all else fails"). Full instructions can be found here.
If you are not using said package on your device, follow these instructions to enable the public key authorization method.
- Edit /etc/sshd_config (/etc/ssh/sshd_config on iPhone OS 3.0):
$ pico /etc/sshd_config
- Scroll down to the segment beginning with '#RSAAuthentication', and set it up as follows:
RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keysRemove any commenting hashmarks (#) prepended to the beginning of these three lines.
- Hit Ctrl+X to exit, and save your changes.
- At this point you should be finished. Reboot your device.
- Give it some time to start up, then try logging back in. This time, it should automatically authenticate using your private key.
$ ssh -i ~/.ssh/iphone_identity root@<device ip>
- To make the process even simpler, add these lines to your ~/.ssh/config file on your computer.
Host iphone HostName <device ip> User root IdentityFile ~/.ssh/iphone_identity
$ ssh iphone
If all else fails
If you're still asked for a password:
Check your local ~/.ssh/iphone_identity.pub file and compare it with the ~/.ssh/authenticated_keys file on your device. Does any entry match? If not, try the ssh-copy-id command again. Alternatively, just copy the contents of your iphone_identity.pub file and paste it on a line of its own in authenticated_keys. Entries must be one line only.
- Did you properly input and save the changes to /etc/sshd_conf?
- Did you reboot the device after changing /etc/sshd_conf?
- If you used a tool other than ssh-copy-id, check the permissions for your SSH files. If you type the following command, it should look like this:
# ls -al ~/.ssh total 4 drwxr-xr-x 2 root wheel 102 Nov 21 04:25 . drwxr-xr-x 6 root wheel 306 Nov 20 00:02 .. -rw-r--r-- 1 root wheel 395 Nov 20 03:01 authorized_keys
- Try resetting the permissions on the iPod or iPhone's SSH files manually:
chmod 755 /var/root chmod 700 /var/root/.ssh chmod 644 /var/root/.ssh/authorized_keys
- For more debugging, you can get verbose output from ssh:
$ ssh -vvv iphone
- You can also turn on syslog on the device to have it log any error messages that the SSH server might output.
$ ssh iphone Password: $ echo "*.* /var/log/syslog" > /etc/syslog.conf $ killall syslogd $ /usr/sbin/syslogd -bsd_out 1 $ tail -f /var/log/syslog
Retrieving and setting the Firewire GUID (FirewireGuid)
When you issue iphone-mount or ipod-touch-mount for the first time, the program silently attempts to generate this value using a USB connection. If you have never connected your device via USB before and try to mount it via WiFi for the first time, this step is missed and you end up with a database that your device refuses to read. This is (in nearly all cases) because the Firewire GUID (FirewireGuid) that the iPhone/iPod Touch specifically use to hash their database is either missing or invalid.
To fix this manually:
- Plug your iPhone/iPod device into your Ubuntu machine via USB
In Ubuntu, run Applications → Accessories → Terminal
- Issue iphone-mount or ipod-touch-mount (depending on your device) in the terminal
- Path to /media/ipod/iPod_Control/Device ("cd /media/ipod/iPod_Control/Device", assuming you used /media/ipod for the mount location)
- In your media application of choice, transfer a new song and/or sync your iPod. Depending on what media application you use, you might have to re-transfer all songs.
- Reboot your device
You may also get the GUID directly from the device by executing:
/usr/sbin/ioreg -n IOIpodUSBDevice -w 0 | grep DeviceConfiguration | cut -d '"' -f 44 | cut -c 1-16
If all goes well, your music should now be recognized on the device!
Alternative solution with MNPlight
Add the http://iphone.lefessant.net/iphone link to your Ipod Touch or Iphone installer.
- Install MNPlight.
For Ipod Touch you need to set the "FirewareGuid" of device (see previous section).
Set the Fireware GUID in MNPlight→Preferences.
Warning: Without this step MNPlight will corrupt your music database!
Copy your music in to /var/root/Media/MNPlight/Music folder of your Iphone/Ipod Touch and import it by MNPlight→Playlists→Import songs from directory
Use the guide above for further configuration.
Setting up the iPod or iPhone
Make sure your iPod is jailbroken. QuickPwn works well for 2.x firmware, and a quick Google search will point you to directions (Unfortunately, you'll need to borrow a Windows or a Mac machine for the jailbreaking, but after that, it's Ubuntu all the way). In the process of jailbreaking, make sure to select the option that installs Cydia (Cydia is a front-end for the iPhone's apt port).
On your newly jailbroken iPod, update Cydia and install OpenSSH through it.You may need to reboot your iPhone by holding down the power button after installing OpenSSH to start the SSH Daemon.
In Ubuntu, select Places>Connect to Server. In the dropdown box labeled "Service type," select "SSH". In the "Server" field, input your iPod's ip address (this can be found on your iPod by going to Settings>Wi-Fi>arrow-next-to-SSID-of-network-you're-connected-to). Finally, under username, enter "mobile". Leave other fields blank. Click connect. (In Kubuntu, first install the 'SSH' and 'OpenSSH' packages. Then enter the following in Konqueror: sftp://root@[IP address]/var/mobile/media/music/ to get to your Music folder. Or, for videos, enter, sftp://root@[IP address]/var/media/. Your folder's contents will appear in Konqueror, and then just drag-and-drop as below.)
- When it asks for a password, enter "alpine" (this can--and should--be changed, see below).
- You should now have your iPod mounted on your desktop, and can transfer music onto it.
Playing Music with standard iPod application
- To see new Tracks you transferred to the iPod, you need to fully quit and restart the Music Application. One Click on the Home Button only "minimizes" it, pressing the Home button 5 secs should work. I use SBSettings and the "Processes" Switch. Works fine. Restarting the iPod by pressing the "On/Off" Switch for 5 secs works, too.
Tips, Tricks, Troubleshooting, etc
The standard iPod music player is able to display album art embedded in ID3 tags OR organized as iTunes does it (in separate folders somewhere in your iTunes library location). If you have previusly synchronized your music with iTunes, the album art IS NOT embedded in the ID3 tags of your files. Adding music through amarok or gtkpod will switch the album art display mode of your iPod to displaying only embedded album art, so you'll probably lose most of the album art added through iTunes. The only workaround I found is to copy your iPod music to your computer with amarok, then use EasyTag to embed the album art to the ID3 tags and then sync back to the ipod (it can be very time consuming).
You can change your password in your iPod by logging in from the terminal. Type "ssh mobile@<ipod's_ip_address>", login, and type passwd to change the password.
There is also a root user on your iPod, and it is advisable to change that password as well. Follow the directions above, but use "ssh root@<ipod's_ip_address>" in the terminal.
- You can also transfer music from the terminal using scp, but I'm sure you already know how to do that ; )
If you want to convert videos for use on the default iPhone video player, Handbrake is a good choice (there's now a native Linux GUI version available) -- it is now accepting any video input to create a Apple-compatible video file.
However, if your iPhone is jailbroken and you don't want to play the video back using the native iPhone video player (which for example doesn't support XVid/DiVX file formats), you do need to use a video converter like WinFF and an alternative video player such as MPlayer.
This conversion involves using mplayer4iphone (available through Cydia on jailbroken iPhones) and WinFF using an iPhone 3g with 2.2 firmware.
- Jailbreak your iPhone
- Install mplayer4iphone through Cydia
- Install WinFF on Ubuntu (Medibuntu repository) through Synaptic
- Now convert your videos using WinFF. Use these settings: 480x320, 15fps, XVid in AVI. It's crucial to keep the fps to 15, since 24fps, etc. was jerky for me. Here's my preset for WinFF if you want to create one: -r 15 -vcodec libxvid -vtag XVID -s 480x320 -aspect 4:3 -maxrate 1800k -b 1500k -qmin 3 -qmax 5 -bufsize 4096 -mbd 2 -bf 2 -flags +4mv -trellis 1 -cmp 2 -subcmp 2 -g 300 -acodec libmp3lame -ar 48000 -ab 128k -ac 2
- Once you have your video converted, connect to your iPhone using the SSH method detailed above. This will open a window showing your iPhone file structure.
- Mplayer needs your videos to be in this folder: root/var/media. Just drag your video files to that folder. (In Kubuntu, first install the 'SSH' and 'OpenSSH' packages. Then enter the following in Konqueror: sftp://root@[IP address]/var/media/. Your folder's contents will appear in Konqueror, and then just drag-and-drop as above.)
Now you can just play your files in fullscreen on Mplayer on your iPhone, with audio synch working fine.
Syncing via Cable
iTunnel gives me about 400kb/sec iFuse gives me about 250kb/sec WLan gives me about 10 - 800kb/sec, WLan crowded places give less It is a good idea to create a Ad-hoc WLan and connect directly your iPod to you PC. I take speed up to 1,5MB/sec.
Copying photos to the iPhone
Photos can be copied into the Media/DCIM directory in the mobile account. They need to follow the directory and image numbering conventions used by the iPhone/iPod. Multiple image formats are allowed, but they should have a thumbnail (.THM) file which is a 55x55 pixel JPG file.
There is a command-line script that can copy images to the iPod Touch or iPhone using ipod-convenience or scp available at http://marginalhacks.com/#img2iphone
Note that it is free to use and source available, but not technically open source.
""Alternative method using a webserver (3.x)"" You can use a webserver set up, accessible either via a local IP over wifi or a hosted server to transfer images to your iTouch or iPhone. Transfer the image to the webserver (/var/www/photo.jpeg), and then go to your IP in the web browser followed by the relative path and filename of the image (192.168.2.4/photo.jpeg), then hold your finger on the image until options appear. Click "Save Image" and it will be available in your photo browser for using as a wallpaper or whatever.
Syncing contacts calendar notes
First of all get the Funambol Server: https://www.forge.funambol.org/download/
After that download their Administration Guide: http://download.forge.objectweb.org/sync4j/funambol-installation-and-administration-guide.pdf
Setting up the server following administration guide is straight forward and not that difficult. Here are the main steps:
Start Install: "./sh funambol-8.0.0.bin" read and accept the licens and press Enter to install it to /opt/Funambol you can either start the server when asked by the installation process or later by executing: "/opt/Funambol/bin/funambol start"
Funambol requires java, but the jre is shipped with the server, so there's no need to care about.
Start the server and go to http://localhost:8080/ to see if it's running. Now bring up the admintool executing "/opt/Funambol/admin/bin/funamboladmin"
Go to "File" in the menu and choose "Login". User the default values for your first login. (You should later change the password. See the admin guide for details about that.)
User name: admin Password: sa
Now "localhost" should appear in the main window, expand the tree and double click on user. And choose "add" in the right window. Now enter user credentials and select role "User". Click "add" and voila your server with an account is set up and ready for syncing.
Next step is getting your iphone ready. If your device is jailbroken, install "iPhoneSync" from Cydia. Otherwise go to the appstore and install the app "Funambol". iPhoneSync will let you synchronize contacts calendar and notes. Funambol will only allow Contacts (probably due restrictions in the appstore). Open the app and go to "Settings"->"Account" and enter "http://192.168.1.7:8080/funambol/ds" as server (replace the ip with the local one of your server or it's hostname). For username and password you choose the same credentials, you entered adding a new user to funambol. Leave the settings and tap "Sync All" or "Sync Contacts" depending which app you're using. If everything went fine, the data from your iphone should now be transfered to the funambol server.
Now let's get to the linux client side.
Install thunderbird (a.k.a. icedove). On debian "apt-get install icedove" should do the job.
Now get the Lightning-Plugin and install it. http://www.mozilla.org/projects/calendar/lightning/
Also get the Funambol Mozilla Sync Client and install that too. https://mozilla-plugin.forge.funambol.org/
If you select the Tools menu in thunderbird, you should now find a "Funambol sync..." entry, which opens a small window with another Tools menu, where you can find the Options. Enter the same server location as in your iphone and the same user credentials. Close the options and click "Sync All" in the funambol window. thunderbird should now be synchronized with your iphone data on the funambol server.
If you prefer kontact and got an imap server running and use the buildin kolab imap store, to keep pim data on your boxes synchronized. Installing the kolab plugin for thunderbird, you can now keep kontact in sync with the iphone, using thunderbird just as a middleman in the syncing process. It's not a fancy solution, but it at least it works. The plugin can be found at https://addons.mozilla.org/en-US/thunderbird/addon/519
Syncing Music on Firmware 3.x
Packages have been released and it is possible to use your iPhone over USB without compiling in the following guide: http://www.webupd8.org/2010/01/easy-way-to-sync-your-iphone-with.html.
Also see Syncing with Amarok 1.4 below.
Older posts on iPhone 3.0
A project to enable syncing with iPhone Firmware 3.0 is under way (30 October 2009). See: http://marcansoft.com/blog/2009/10/iphone-syncing-on-linux/
One must install ifuse from the Ubuntu repos. Then, installing the SVN versions (as of November 25th, 2009) of gtkpod, libgpod, usbmuxd and related dependencies (from source - the distro packages MAY NOT work!) enables:
- Syncing Music.
- Syncing Photos.
- Syncing Videos.
Even though the support is alpha/beta in quality, it works well enough for testing purposes. In one user's case, it has operated fine syncing large amounts of Audio and video both to and from the iDevice running firmware 3.1.2. After a short "Updating Library.." setop on the iDevice the next time the Music or Video application was opened, all songs and videos were present, had album art, and played correctly. YAY!
It's possible now (December 28th, 2009), instructions are provided on these sites: http://marcansoft.com/blog/2009/10/iphone-syncing-on-linux-part-2/
Creating and Adding Custom Ringtones to your iPhone
Again, this requires ifuse and associated tools - you can find a comprehensive tutorial/howto here