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 (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.