def METHOD_NAME(self):
    """Start the monitoring process.
    Once this gets called the "changed" signal will be emitted.
    """
    NULL = open(os.devnull, 'wb')
    try:
        self._process = subprocess.Popen(
            ["pactl", "subscribe"], stdout=subprocess.PIPE, stderr=NULL)
    except OSError:
        self._status = False
        return
    f = self._process.stdout
    fcntl.fcntl(f, fcntl.F_SETFL, os.O_NONBLOCK)
    def can_read_cb(fd, flags):
        if flags & (GLib.IOCondition.HUP | GLib.IOCondition.ERR):
            f.close()
            self._subscribe_id = None
            return False
        data = f.read()
        if not data:
            f.close()
            self._subscribe_id = None
            return False
        # querying the status also results in client events which would
        # lead us into an endless loop. Instead just something if there
        # is a sink event
        if b" on sink " in data:
            self._update_status()
        return True
    self._status = get_headphone_status()
    self._subscribe_id = GLib.io_add_watch(
        f, GLib.PRIORITY_HIGH,
        GLib.IOCondition.IN | GLib.IOCondition.ERR | GLib.IOCondition.HUP,
        can_read_cb)