RemoteViewerProject
From Wsms
A VNC-based suite of applications optimized for classroom use.
Contents |
Deliverables
UDP Sample Code
UDP doesn't really do what we want. If the vncserver were to broadcast everything over UDP, the viewers would have to have a particular port open to receive the packets. What we want is to use a tcp multicast group with sign up through a web interface.
tcp multicast with web signup
Anonymous login VNC Reflector variant
In this scenario, a Windows box (the "teacher") will run vncserver, a Linux box ("ws05") will run a modified version of vncreflector, and n puppies ("students") will run a modified version of VNC viewer. The goal of this project will be to see what fraction of the LAN's bandwidth are consumed by n VNC viewers.
For initial testing the vncserver will run on ws05 under Windows; the modified vncreflector will run on VMWare with Fedora on ws05. The student workstations are called puppies because they will be booted from a modified version of puppy linux.
Windows "teacher" configuration
The Windows ("teacher") will run on XP Pro and use an unmodified VNC server from realvnc.com.
It will be set up to allow shared, read-only access.
Configure authorization with a password:

Configure the connection for VNC.
28800 seconds is eight hours.
We just do the normal VNC server on port 5800 and skip the Java server on port 5900:

Don't accept any input from the viewers:

Configure all connections as shared:
An aside, how to connect directly from Linux vncviewer
This might be useful for testing. This is for my home network.
$ vncviewer -Shared -ViewOnly 192.168.2.7:0
reflector "ws05" configuration
The modified vncreflector will run on a VMWare Player install of Fedora Core 5. This virtual machine will be known as "ws05". The main difference between the vncreflector that we will run and the vncreflector that can be installed on Fedora via yum is that our version has a few modifications to facilitate automatic logon.
One problem with the scheme is that the machine the reflector runs on, ws05, does not have a fixed IP address. To allow anonymous logon, the reflector will have to
An aside, how to run the unmodified vncreflector
This is for my home network. First, start vncserver on a windows machine. On a linux machine make the a HOST_INFO_FILE file and and a PASSWD_FILE as described in /usr/share/doc/vnc-reflector-1.2.4/README. For example:
[ggeller@arthur vncreflector]$ cat host lincoln:0 friend [ggeller@arthur vncreflector]$ cat passwd friend friend
Then start vncreflector:
[ggeller@arthur vncreflector]$ vncreflector host ...
You might want to keep an eye on vncreflector's log file:
[ggeller@arthur vncreflector]$ tail -f reflector.log 19/12/06 16:05:13 + Starting VNC Reflector 1.2.4 19/12/06 16:05:13 - Switched to the background mode 19/12/06 16:05:13 + Connecting to lincoln, port 5900 19/12/06 16:05:13 + Connection established ...
Next you can open a vncviewer session in a from another shell window:
[ggeller@arthur vncreflector]$ vncviewer -Shared -FullColor localhost:99 ...
Or you can run vncviewer on a windows machine by pointing it to port 99 on your Linux box. Hint: the password is "friend".
Open Questions
Get the IP address in C++
Need something like ifconfig eth0. It is easy enough to look at the code for ifconfig. It is part of the nettools package.
UDP broadcast in C++
This is a very simple prototype that just sends out UDP packets from the "teacher" to the "students" on the LAN.
The main purpose of this program is to learn how to talk by UDP.
Hello World in C++:
#include <iostream>
int main()
{
std::cout << "Hello, world!\n";
}
Linux-only, automate connection
The first deliverable is a linux-only applicaiton that automates authorization and connection.
DITL
The teacher and the students boot their machines to the gnome desktop Linux.
On the tescher's machine a VNC server starts on :0. The server announces it presence on the LAN using UDP broadcast.
On each of the student's machines, a service starts that listens for the UDP broadcast. When the announcement is received, the service pops up an "invitation" dialog announcing the fact.
Design
Which ports need to be opened for the teacher and students?
Specification
DITL
Design
Maybe the way to do it is to have run the stock vncserver and vncviewer applications and put in a bolt-on that would convert the TCP to UDP broadcast? The chapter on sockets in the Perl Cookbook looks interesting. Also see http://perldoc.perl.org/IO/Socket/INET.html They show how to set up a udp socket:
$sock = IO::Socket::INET->new(PeerPort => 9999,
PeerAddr => inet_ntoa(INADDR_BROADCAST),
Proto => udp,
LocalAddr => 'localhost',
Broadcast => 1 )
or die "Can't bind : $@\n"
That's just like the information from perldoc IO::Socket::INET.
See Also (possibly useful links)
http://search.cpan.org/~njh/IO-Socket-Multicast6-0.02/lib/IO/Socket/Multicast6.pm - perl module for multicast sockets.
http://www.vmware.com/vmtn/appliances/directory/174 - virtual classroom applicance with remote instructional features. It is bassed on FC5 and uses VMWare, VNC and DrawTop.
See also http://ttt.uni-trier.de/ttt.en.html TTT teleteachingtool tele teaching tool TTT
More
Set up wsms wiki with notes about the project.
Title: I. Overview of Software for Remote Learning II. An Enhanced VNC for Education
I.
Web-share apps and Content Management Systems SharePoint Citidel Wikis (mediawiki, ...)
Specialize Learning Management Systems: Blackboard WebCT Moodle
Remote viewers: ekiga (GnomeMeeting) NetMeeting TTT VNC and friends
Where does schooltool.org fit in?
google second life virtual campus to see what people are setting up.
