iOS
The purpose of this article is to demonstrate the use of iOS devices with Arch Linux.
Installation
Install the libimobiledevice libraries and optionally ifuse the mounting utility
Connecting to a device
Usbmux daemon
usbmuxd
is required to make connections to iOS devices all. systemd comes with udev rule to automatically start and stop this daemon so no user interaction is required.
Insert the iOS device and verify that usbmuxd.service
automatically started.
systemctl status usbmuxd.service
... Active: active (running) since Sun 2020-01-19 19:23:18 UTC; 22s ago ...
Pairing
In order to be able to connect to the iOS device, it must be connected via USB to the computer.
idevicepair pair
SUCCESS: Paired with device d8e8fca2dc0f896fd7cb4cb0031ba249
If you have multiple iOS devices connected --udid ios_udid
parameter can be passed to target specific device.
Application integration
Applications which use GVFS, such as some file managers (GNOME Files, Thunar) or media players (Rhythmbox) can interact with iOS devices after installing the gvfs-afc and gvfs-gphoto2 packages. Restarting the file manager or application might be needed.
Manual mounting
Mounting the media directory
The simplest way to mount your iPhone's filesystem to your mount folder, is using the following:
# ifuse -o allow_other mountpoint
If you do not use the allow_other option, you will not be able to access the mountpoint folder, even if you attempt to sudo into it.
Application documents are not included in the iPhone's media directory and are mounted separately.
Mounting application documents
To list all available applications (and their APPIDs), run the following:
# ifuse --list-apps
For example, if VLC is installed on device, you can mount VLC's files:
# ifuse --documents org.videolan.vlc-ios mountpoint
org.videolan.vlc-ios
is the APPID listed in the output of the previous command.
The mountpoint field is where you want to have it mounted.
Changing iPod mountpoint
Traditional iPods are accessed just like a normal USB storage device containing a vfat file system (in rare cases hfsplus), and can be accessed as such. See the USB storage devices article for detailed instructions.
If udisks2 is installed, it will mount an attached iPod to /run/media/$USER/iPod_name
.
If the volume label of the iPod is long, or contains a mixture of spaces, and/or lower-case and capital letters, it may present an inconvenience. You may easily change the volume label for more expedient access using dosfslabel
from the dosfstools package:
- Get and confirm the current volume label:
# dosfslabel /dev/sdXY
- Set the new volume label:
# dosfslabel /dev/sdXY ArchPod
- Unmount the device:
$ udisksctl unmount -b /dev/sdXY
- Mount it again:
$ udisksctl mount -b /dev/sdXY
where /dev/sdxx
is the current device node of your iPod.
Importing videos and pictures
Both videos and photos can be found in typically in <mountpoint>/DCIM/100APPLE
.
HTML5 videos
Typically you want to convert MOV files to a HTML5 video format like OGV using ffmpeg2theora. Note that the creation date metadata is not in the converted video, so you need to use a script like:
#!/usr/bin/sh find -name "*.MOV" | while read mov do d=$(gst-discoverer-1.0 -v $mov | awk '/datetime:/{print $2}' | tr -d \") base=${mov%.*} if test -f $base.ogv then touch -d${d} $base.ogv ls -l $base.ogv else echo $base.ogv missing fi done
And use cp -a
or rsync -t
in order to preserve the file's date & time.
Importing pictures and deleting them
You can move photos and videos out of <mountpoint>/DCIM/100APPLE
, however you need to trigger a rebuild of the "Camera Roll" database by deleting the old databases.
# cd <mountpoint>/PhotoData # rm Photos* com.apple.photos.caches_metadata.plist
Converting video for devices
Handbrake
Handbrake is a nifty tool with presets for a variety of iPod versions. CLI and GTK versions are available with the handbrake-cli and handbrake packages respectively.
If you do decide to take the CLI way, a good guide is available at https://handbrake.fr/docs/en/latest/cli/command-line-reference.html.
Avidemux
Install the avidemux-qt package.
This can convert to mp4 files. If you enforce a hard max of bit rate @ 700ish and keep the video size to 720x480 or 320x240 than it works fine for video file exporting.
Mencoder
Has extremely comprehensive configuration support, which will be able to spit out iPod-compatible video files. Check out mencoder(1); a lot of MPlayer opts will also affect encoding.
A basic guide is also available at MEncoder.
An example command to encode iPhone/iPod Touch-compatible video:
mencoder INPUT -o output.mp4 \ -vf scale=480:-10,harddup \ -oac faac -faacopts mpeg=4:object=2:raw:br=128 \ -of lavf -lavfopts format=mp4 \ -ovc x264 -x264encopts nocabac:level_idc=30:bframes=0
FFmpeg
Another encoder with comprehensive configuration support. Example command to encode for 5G iPod:
$ ffmpeg -vcodec xvid -b 300 -qmin 3 -qmax 5 -bufsize 4096 \ -g 300 -acodec aac -ab 96 -i INPUT -s 320x240 \ -aspect 4:3 output.mp4
or iPod Touch/iPhone compatible video output:
$ ffmpeg -f mp4 -vcodec mpeg4 -maxrate 1000 -b 700 -qmin 3 -qmax 5\ -bufsize 4096 -g 300 -acodec aac -ab 192 -s 480×320 -aspect 4:3 -i INPUT output.mp4
Device specific
iPhone/iPod Touch
By default, neither the iPhone nor the iPod Touch present mass storage capability over USB, though there is a solution for accessing your files.
The proposed solution is to use a FUSE file system called ifuse, which allows you to mount your device through USB, as you normally would. After installing ifuse, for instance, you should see your iPhone appear in the left navigation of Gnome Files and other supporting file managers.
Refer to this page:[1]
The iFuse Way
Now make sure that you have the fuse module loaded by doing modprobe fuse
, assuming that you do not have it in /etc/modules-load.d/
already.
You can now mount your device. Make sure it is unlocked before you plug it in, or it will not be recognized.
# ifuse <mountpoint>
The mountpoint field is where you want to have it mounted.
And you are done! You should be able to point your syncing software of choice to the mount point and be able to transfer files.
To unmount your device:
# umount <mountpoint>
Members of group fuse
can mount devices as regular user:
$ ifuse <mountpoint>
To unmount:
$ fusermount -u <mountpoint>
Generating HashInfo file
If you have never synced your device using iTunes, you will get error messages telling you that the HashInfo file is missing. This can be fixed by syncing once with iTunes in order to create it.
Alternatively one can create this file using the site http://ihash.marcansoft.com/. Enter the serial number of the iPod on the website. It will generate a file named HashInfo
which you will place under the /mnt/ipod/iPod_Control/Device/
directory. Unplug the iPod device and plug it back.
Unobfuscating the Database
Since firmware version 2.0, Apple has obfuscated the music database. If you are using recent firmware, the file /System/Library/Lockdown/Checkpoint.xml
can be modified to enable use of the older, non-obfuscated database. If that file does not exist then try to copy from /System/Library/CoreServices/Checkpoint.xml
to /System/Library/Lockdown/Checkpoint.xml
then replace:
<key>DBVersion</key> <integer>4</integer>
with:
<key>DBVersion</key> <integer>2</integer>
Then reboot your device.
If syncing fails with "ERROR: Unsupported checksum type '0' in cbk file generation!", you may need to leave this at 4. libgpod seems to expect a hashed database.
iPod Classic/Nano (3rd generation)
You need to set up the iPod to make libgpod able to find its Firewire ID. For this, you will need to get your FireWire ID manually
1) Mount the iPod as a rw mount point. In the following example, use /mnt/ipod
.
2 ) Find the serial number by typing
# lsusb -v | grep -i Serial
this should print a 16 character long string like 00A1234567891231 (it will have no colons or hyphens)
3) Once you have that number, create or edit /mnt/ipod/iPod_Control/Device/SysInfo
. Add to that file the line below:
FirewireGuid: 0xffffffffffffffff
(replace ffffffffffffffff with the 16 digit string you obtained at the previous step and do not forget the leading 0x before the string)
Your iPod can now be managed with Amarok or gtkpod.
iPod Nano 5th generation
Follow the instructions above #Generating HashInfo file in order to set up the hash file, it is needed to write into the device music library.
To be able to use the iPod Nano with libgpod, a SysInfoExtended
file is also needed to be placed in the directory /mnt/ipod/iPod_Control/Device/
. It can be generated using:
# ipod-read-sysinfo-extended bus device mountpoint
for example:
# ipod-read-sysinfo-extended 001 011 /mnt/ipod/
iPod Nano 6th generation
By default libgpod does not seem to be able to syncronize on a iPod Nano 6th generation. It copies data, but as soon as USB is disconnected, everything is as before. The package libhashab-gitAUR fix this.
iPod Shuffle 1st and 2nd generation
Due to the simple structure of the Shuffle (compared to the "big" iPods), it is possible to use the player almost like any other USB flash MP3 player. What is necessary is rebuild_db.py file stored in the iPod's root directory. Simply copy MP3 files onto the iPod Shuffle (sub-folders are allowed too) and run:
$ python2 /path/to/rebuild_db.py
iPod Shuffle 4th generation
In order to use this version of the iPod Shuffle under linux, you can use the python based command line tool ipod-shuffle-4gAUR. It also provides advanced voiceover and (auto)playlist generation support.
iPod Video (5th and 5.5th generation)
iPods in the mainline series up to and including this model do not support the AAC PNS feature, and will display audible artifacts when encountering it. Disable the feature in ffmpeg when encoding AAC files for these devices.
$ ffmpeg -i input.ogg -c:a aac -b:a 256k -aac_pns 0 -movflags +faststart -vn output.m4a
The -movflags +faststart
options place the moov atom at the start of the file, which helps the iPod parse the file faster.
iPod management apps
These tools use the libgpod library:
- Strawberry — Fork of Clementine aimed at audio enthusiasts and music collectors.
- Rhythmbox — GTK clone of iTunes, used by default in GNOME.
- gtkpod — GUI for Apple's iPod using GTK. It allows you to import your existing iTunes database, add songs, podcasts, videos and cover art, and to edit ID3 tags.
- Amarok — Mature Qt-based player known for its plethora of features.
- Yamipod — Lightweight application for managing ONLY music on your iPod (not on your computer)
These tools use their own implementation to communicate with the iPod:
- Floola — GTK interface
- qpod — KDE/qt front end for GNUpod
- jakpod — JakPod is based on Java and allows to copy music and video files to your iPod