def add_signal_receiver(self, callback_fn, signal, user_arg):
        """
        Add a signal receiver callback with user argument

        See also :py:meth:`remove_signal_receiver`,
        :py:exc:`.ConnSignalNameNotRecognisedException`

        :param func callback_fn:
            User-defined callback function to call when signal triggers
        :param str signal:
            Signal name e.g., :py:attr:`.ConnInterface.SIGNAL_PROPERTY_CHANGED`
        :param user_arg:
            User-defined callback argument to be passed with callback function
        :return:
        :raises ConnSignalNameNotRecognisedException:
            if the signal name is not registered
        """
        if (signal in self._signal_names):
            s = Signal(signal, callback_fn, user_arg)
            self._signals[signal] = s
            self._bus.add_signal_receiver(s.signal_handler,
                                          signal,
                                          dbus_interface=self._dbus_addr)
        else:
            raise ConnSignalNameNotRecognisedException