Simple iPhone connection monitor for Linux with GLib/Gio.

A very simple Gio iPhone connection monitor in Python 3. I wrote a crappier version of this awhile ago and revamped it. Hope it’s helpful to someone.

#!/usr/bin/env python3

Simple iPhone connection monitor for Linux.
Requires Gtk (GLib, Gio) along with the Python 3 bindings.
Author: C. Nichols <>

from gi.repository import Gio, GLib
import os

def notify(appname, message):
    '''Gnome notification.'''
    cmd = 'zenity --name="{0}" --notification --text="{1}" "$THREAT\n$STRING"'.format(appname, message)
def on_iphone_added(monitor, volume):
    '''List iPhone Document contents when connected.'''
    #notify("Simple iPhone Monitor", "{0} connected.".format(volume.get_name()))
    print("{0} connected.".format(volume.get_name()))
    gvfs_path = "/run/user/1000/gvfs/afc:host={0},port=3/".format(volume.get_uuid())
    not_ready = True
    while not_ready:
        if os.path.exists(gvfs_path):
            for doc_contents in os.listdir(gvfs_path):
            not_ready = False

def on_iphone_removed(monitor, volume):
    '''Display disconnected message.'''
    #notify("Simple iPhone Monitor", "iPhone disconnected.")
def monitor():

    '''Uses GTK Gio to access Gnome virtual filesystem and determine the 
    path to iPhone Documents. Return a path we can use to push files 
    connection_loop = GLib.MainLoop()
    monitor_iphone = Gio.VolumeMonitor.get()
    monitor_iphone.connect("volume-added", on_iphone_added)
    monitor_iphone.connect("volume-removed", on_iphone_removed)
    for volume in monitor_iphone.get_volumes():
            activation_root = volume.get_activation_root()
            if activation_root:
                if activation_root.get_uri_scheme() == 'afc':
            pass # Something went wrong.

# Main :: Start monitoring
def main():
main() # Run program.