You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libtdevnc/VisualNaCro
Christian Beier bf2470cec6
Check rfbGetScreen() return value everywhere.
12 years ago
..
.gitignore VisualNaCro: add .gitignore file 15 years ago
AUTHORS VisualNacro, a visual macro recorder for VNC. Alpha version 18 years ago
ChangeLog VisualNaCro: add 'i', 'c' and 'r' menu keys 17 years ago
Makefile.am complain when SWIG is not present, but needed 16 years ago
NEWS VisualNaCro: add magic key 'd' to display the current reference image 17 years ago
README fix typo 17 years ago
autogen.sh VisualNacro, a visual macro recorder for VNC. Alpha version 18 years ago
configure.ac VisualNaCro: fix configure.ac 15 years ago
default8x16.h ANSIfy, fix some warnings from Linus' sparse 18 years ago
nacro.c Check rfbGetScreen() return value everywhere. 12 years ago
nacro.h VisualNaCro: add sendascii 17 years ago
recorder.pl VisualNaCro: add 'i', 'c' and 'r' menu keys 17 years ago

README

This is VisualNaCro.


DISCLAIMER: recorder.pl is not yet functional.

What does it?

It is a Perl module meant to remote control a VNC server.

It includes a recorder (written in Perl) to make it easy to
record a macro, which is just a Perl script, and which you can
modify to your heart's content.

The most important feature, however, is that you can mark a
rectangle which the Perl script will try to find again when you
run it. Thus when you play a game and want to hit a certain button,
you just hit the Ctrl key twice, mark the button, and from then on,
all mouse movements will be repeated relative to that button, even
if the button is somewhere else when you run the script the next
time.

If you know Tcl Expect, you will recognize this approach. Only this
time, it is not text, but an image which is expected.

How does it work?

It acts as a VNC proxy: your Perl script starts its own VNC server.
The script now can intercept inputs and outputs, and act upon them.
In order to write a macro, start

recorder.pl --script my-macro.pl --timing host:port

connect with a vncviewer of your choice to <host2>:23, where <host2>
is the computer on which recorder.pl was started (not necessarily the
same as the VNC server!). Now your actions are recorded into
my_macro.pl, and the images you want to grep for will be saved as
my_macro-1.pnm, my_macro-2.pnm, ...

In order to finish the script, hit Ctrl twice and say "q".

Why did I do it?

Because I could ;-)

No really, I needed a way to write automated tests. While there
exist a lot of OpenSource programs for web testing, I found none
of them easy to use, and for GUI testing I found xautomation.

Xautomation has this "visual grep" (or "graphical expect") feature:
given an image it tries to find it on the desktop and returns the
coordinates. Unfortunately, there is no easy way to record macros
with it, and it only works on X11.

As I know VNC pretty well, and there are VNC servers for every OS
and gadget, I thought it might be cool to have this feature to
control a VNC server.

Actually, it makes it even easier: with plain X11, for example, you
can not know where on the screen the action is if you don't check
the whole screen. This complex problem is beautifully addressed
in Karl Runge's x11vnc.

My main purpose is to run regression tests on different browsers,
which I can easily do by starting Xvnc and using VisualNaCro.

How did I do it?

I wondered long about how to do it. I couldn't take the same approach
as xautomation: I cannot connect to the VNC server thousand times
per second. So I decided to create an interface of LibVNCServer/
LibVNCClient for use in a script language.

Fortunately, this task is made very, very easy by SWIG. As Perl
is one of my favorite script languages, I decided to use this.
But SWIG makes it easy to use the very same interface for other
popular languages, so you are welcome to port VisualNaCro to
the language of your choice!

Isn't it pronounced "Visual Macro"?

Yes. But I liked the Visual Na Cro play of acronyms. I'm sorry if
you don't find it funny.

What's the license?

GPL. It is based on LibVNCServer/LibVNCClient, so it has to be.
If you want to port this package to use vncreflector, which has a
BSD license, go ahead.