# iPhone Synchronization under Arch Linux ## Wired synchronization with libimobiledevice and ifuse ### Installation ``` sudo pacman -S libimobiledevice ifuse ``` **Install the necessary tools:** On your Linux system, install libimobiledevice and ifuse. The installation command depends on your distribution (e.g., sudo apt-get install libimobiledevice-utils on Debian/Ubuntu or use the AUR for Arch-based systems). **Connect your iPhone:** Plug your iPhone into your computer with a USB cable. **Trust the computer:** On your iPhone, tap "Trust" when the prompt appears and enter your passcode. Mount the device: Open a terminal and create a mount point, for example, mkdir ~/iPhone. Then, mount the device with the command ifuse ~/iPhone. **Access files:** Your iPhone should now appear as a mounted device, typically with a DCIM folder containing your photos and videos. You can browse and copy files from this folder to your computer. ### Script to synchronize the iPhone data to the Linux PC Create a new file, e.g. `sync-iPhone.sh` with the content: ``` #!/bin/sh program_list=("ifuse" "ldconfig" "rsync") library_list=("libimobiledevice") sync_folder="$HOME/iPhone" sync_mount="${sync_folder}/.mnt" sync_data="${sync_folder}/data" # iteration thru list of programs for program in "${program_list[@]}" do if command -v "${program}" >/dev/null 2>&1 then echo "OK, ${program} exists." else echo "Sorry, ${program} does not exists," echo "you have to install all of these programs first: ${program_list[@]}" exit 1 fi done # iteration thru list of libraries for library in "${library_list[@]}" do if ldconfig -p | grep ${library} >/dev/null 2>&1 then echo "OK, ${library} exists." else echo "Sorry, the library ${library} is not installed." echo "You have to install the libraries first: ${library_list[@]}" exit 2 fi done echo "Create the folder ${sync_mount} ..." if mkdir -p ${sync_mount} >/dev/null 2>&1 then echo "done." else echo "Folder ${sync_mount} already exists." fi echo "Mount the iPhone into that folder using ifuse ..." if ifuse ${sync_mount} then echo "ok." else echo "did not work. Check your connection to the iPhone." exit 3 fi echo "RSYNC the iPhone ..." FROM="$sync_mount"/ TO="$sync_data"/ while true do echo "** Synchronization from ${FROM} to ${TO} **" read -n 1 -p"Sync iPhone and delete old files (y)es/(n)o/(c)ancel? " response echo case ${response} in [Nn]* ) rsync -avP "${FROM}" "${TO}"; break;; [YyJj]* ) rsync -avP --delete "${FROM}" "${TO}"; break;; [Cc]* ) break;; * ) echo "Please answer yes, no or cancel.";; esac done echo "Memory usage on the iPhone:" && du -hs ${sync_mount} echo "Unmount the iPhone ..." if umount ${sync_mount} then echo "done." else echo "The umounting procedure did not work." fi echo "Remove temporary mount point ..." rmdir ${sync_mount} echo "done." echo "Disk usage:" && du -hs ${sync_folder} ``` You have to set the executable flag to this file `sync-iPhone.sh` with ``` chmod +x sync-iPhone.sh ``` Now you can execute that script using ``` ./sync-iPhone.sh ```