Nothing in the code actually loads the plugins; the executable is linked 
against them (!!!), relying on ELF to cause the plugins to be 
automatically loaded by starting the program, at which time their ctors 
are run which register the plugins.  But this is highly unportable, and
even on Linux this might not work if built with -Wl,--as-needed.

Instead, just compile the plugin code into the executable and run their
ctors in main().

--- origsrc/vinagre-3.2.2/Makefile.am	2011-09-25 04:15:35.000000000 -0500
+++ src/vinagre-3.2.2/Makefile.am	2011-11-16 23:08:03.420347800 -0600
@@ -203,7 +203,7 @@ libssh_la_LDFLAGS = $(PLUGIN_LIBTOOL_FLA
 libssh_la_LIBADD = $(VINAGRE_LIBS)
 endif
 
-plugin_LTLIBRARIES = \
+noinst_LTLIBRARIES += \
 	$(rdp_plugin) \
 	$(spice_plugin) \
 	$(ssh_plugin) \
--- origsrc/vinagre-3.2.2/vinagre/vinagre-main.c	2011-08-14 14:59:38.000000000 -0500
+++ src/vinagre-3.2.2/vinagre/vinagre-main.c	2011-11-16 21:15:28.233973300 -0600
@@ -42,6 +42,11 @@
 #include "vinagre-mdns.h"
 #endif
 
+void rdp_register_types (void);
+void spice_register_types (void);
+void ssh_register_types (void);
+void vnc_register_types (void);
+
 static gboolean startup_called = FALSE;
 static GtkWindow *window = NULL;
 static GOptionContext *context = NULL;
@@ -135,6 +140,17 @@ int main (int argc, char **argv) {
   g_option_context_set_translation_domain(context, GETTEXT_PACKAGE);
   g_option_context_add_group (context, gtk_get_option_group (TRUE));
 
+#ifdef VINAGRE_ENABLE_RDP
+  rdp_register_types ();
+#endif
+#ifdef VINAGRE_ENABLE_SPICE
+  spice_register_types ();
+#endif
+#ifdef VINAGRE_ENABLE_SSH
+  ssh_register_types ();
+#endif
+  vnc_register_types ();
+
   extensions = vinagre_plugins_engine_get_plugins_by_protocol (vinagre_plugins_engine_get_default ());
 
   g_hash_table_iter_init (&iter, extensions);
