On 02/11/2010 12:20 PM, Guido Günther wrote:
> On Thu, Feb 11, 2010 at 12:05:06PM -0500, Cole Robinson wrote:
>> I've got something working at the moment which basically passes a shell
>> script as the 'ssh' command that tries to detect the nc -q option and
>> use it if necc. Working on cleaning it up a bit. I'll post back here
>> when the patch is in good shape, for further testing.
> That sounds great! We have the same issue in libvirt though so in order
> to make connecting work again we'll need something similar in libvirt.
> It's slightly more trick since we share the same with trans_ext.
> Cheers,
> -- Guido
>
Okay, I've attached the patch that seems to be working so far:
connecting to fedora, rhel, and debian all work, no hanging nc instances
(spawned by virt-manager at least). Probably only applies against upstream.
I'll take a look at making a similar change in libvirt. Will also help
to detect the nc '-U' option for libvirt which has been a user annoyance
for quite a while.
diff -r dfcf2a86ca24 src/virtManager/console.py
--- a/src/virtManager/console.py Thu Feb 11 15:25:41 2010 -0500
+++ b/src/virtManager/console.py Thu Feb 11 15:32:12 2010 -0500
@@ -503,7 +503,26 @@
argv += [ server ]
# Build 'nc' command run on the remote host
- nc_cmd = [ "nc", vncaddr, str(vncport) ]
+ #
+ # This ugly thing is a shell script to detect availability of
+ # the -q option for 'nc': debian and suse based distros need this
+ # flag to ensure the remote nc will exit on EOF, so it will go away
+ # when we close the VNC tunnel. If it doesn't go away, subsequent
+ # VNC connection attempts will hang.
+ #
+ # Fedora's 'nc' doesn't have this option, and apparently defaults
+ # to the desired behavior.
+ #
+ nc_params = "%s %s" % (vncaddr, str(vncport))
+ nc_cmd = [\
+ "nc -q 2>&1 | grep -q 'requires an argument';"
+ "if [ $? -eq 0 ] ; then"
+ " CMD='nc -q 0 %(nc_params)s';"
+ "else"
+ " CMD='nc %(nc_params)s';"
+ "fi;"
+ "$CMD;" % {'nc_params': nc_params}
+ ]
argv += nc_cmd