NAME
   Net::VNC - A simple VNC client

SYNOPSIS
     use Net::VNC;

     my $vnc = Net::VNC->new({hostname => $hostname, password => $password});
     $vnc->depth(24);
     $vnc->login;

     print $vnc->name . ": " . $vnc->width . ' x ' . $vnc->height . "\n";

     my $image = $vnc->capture;
     $image->save("out.png");

DESCRIPTION
   Virtual Network Computing (VNC) is a desktop sharing system which uses
   the RFB (Remote FrameBuffer) protocol to remotely control another
   computer. This module acts as a VNC client and communicates to a VNC
   server using the RFB protocol, allowing you to capture the screen of the
   remote computer.

   This module dies upon connection errors (with a timeout of 15 seconds)
   and protocol errors.

   This implementation is based largely on the RFB Protocol Specification,
   <http://www.realvnc.com/docs/rfbproto.pdf>. That document has an error
   in the DES encryption description, which is clarified via
   <http://www.vidarholen.net/contents/junk/vnc.html>.

METHODS
 new
   The constructor. Given a hostname and a password returns a Net::VNC
   object:

     my $vnc = Net::VNC->new({hostname => $hostname, password => $password});

   Optionally, you can also specify a port, which defaults to 5900. For ARD
   (Apple Remote Desktop) authentication you must also specify a username.
   You must also install Crypt::GCrypt::MPI and Crypt::Random.

 login
   Logs into the remote computer:

     $vnc->login;

 name
   Returns the name of the remote computer:

     print $vnc->name . ": " . $vnc->width . ' x ' . $vnc->height . "\n";

 width
   Returns the width of the remote screen:

     print $vnc->name . ": " . $vnc->width . ' x ' . $vnc->height . "\n";

 height
   Returns the height of the remote screen:

     print $vnc->name . ": " . $vnc->width . ' x ' . $vnc->height . "\n";

 capture
   Captures the screen of the remote computer, returning an Image::Imlib2
   object:

     my $image = $vnc->capture;
     $image->save("out.png");

   You may call capture() multiple times. Each time, the $image buffer is
   overwritten with the updated screen. So, to create a series of ten
   screen shots:

     for my $n (1..10) {
       my $filename = sprintf 'snapshot%02d.png', $n++;
       $vnc->capture()->save($filename);
       print "Wrote $filename\n";
     }

 depth
   Specify the bit depth for the screen. The supported choices are 24, 16
   or 8. If unspecified, the server's default value is used. This property
   should be set before the call to login().

 save_bandwidth
   Accepts a boolean, defaults to false. Specifies whether to use more
   CPU-intensive algorithms to compress the VNC datastream. LAN or
   localhost connections may prefer to leave this false. This property
   should be set before the call to login().

 list_encodings
   Returns a list of encoding number/encoding name pairs. This can be used
   as a class method like so:

      my %encodings = Net::VNC->list_encodings();

 send_key_event_down
   Send a key down event. The keys are the same as the corresponding ASCII
   value. Other common keys:

     BackSpace 0xff08
     Tab 0xff09
     Return or Enter 0xff0d
     Escape 0xff1b
     Insert 0xff63
     Delete 0xffff
     Home 0xff50
     End 0xff57
     Page Up 0xff55
     Page Down 0xff56
     Left 0xff51
     Up 0xff52
     Right 0xff53
     Down 0xff54
     F1 0xffbe
     F2 0xffbf
     F3 0xffc0
     F4 0xffc1
     ... ...
     F12 0xffc9
     Shift (left) 0xffe1
     Shift (right) 0xffe2
     Control (left) 0xffe3
     Control (right) 0xffe4
     Meta (left) 0xffe7
     Meta (right) 0xffe8
     Alt (left) 0xffe9
     Alt (right) 0xffea

     $vnc->send_key_event_down('A');

 send_key_event_up
   Send a key up event:

     $vnc->send_key_event_up('A');

 send_key_event
   Send a key down event followed by a key up event:

     $vnc->send_key_event('A');

 send_key_event_string
   Send key events for every character in a string:

     $vnc->send_key_event_string('Hello');

BUGS AND LIMITATIONS
 Bit depth
   We do not yet support 8-bit true-colour mode, which is commonly
   supported by servers but is rarely employed by clients.

 Byte order
   We have currently tested this package against servers with the same byte
   order as the client. This might break with a little-endian
   server/big-endian client or vice versa. We're working on tests for those
   latter cases. Testing and patching help would be appreciated.

 Efficiency
   We've implemented a subset of the data compression algorithms supported
   by most VNC servers. We hope to add more of the high-compression
   transfer encodings in the future.

AUTHORS
   Leon Brocard [email protected]

   Chris Dolan [email protected]

   Apple Remote Desktop authentication based on LibVNCServer

   Maurice Castro [email protected]

   Many thanks for Foxtons Ltd for giving Leon the opportunity to write the
   original version of this module.

   Copyright (C) 2006, Leon Brocard

   This module is free software; you can redistribute it or modify it under
   the same terms as Perl itself.