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');

  send_pointer_event( $button_mask, $x, $y )
    Send pointer event (usually a mouse). This is used to move the pointer
    or make clicks or drags.

    It is easier to call the "mouse_move" or <mouse_click> methods instead.

  mouse_move_to($x, $y)
    Send the pointer to the given position. The cursor instantly jumps there
    instead of smoothly moving to there.

  mouse_click
    Click on current pointer position.

  mouse_right_click
    Right-click on current pointer position.

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 acme@astray.com

    Chris Dolan clotho@cpan.org

    Apple Remote Desktop authentication based on LibVNCServer

    Maurice Castro maurice@ipexchange.com.au

    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.

