# AV share
## Problem

Schools are hanging big flat screens on walls for students to share. Open source hardware and software can be used to share monitors, LCD projection systems, web cams and speakers in the room. How can this be done?

## Conceive

For Profit Solutions
Classroom management software such as NetSchool, NetOp, are all centralized. They involve the teacher in any monitor sharing.
Monitor sharing in a project environment needed to be ad-hoc. Any student should be able to grab one or all screens in the room, disconnecting everyone else at any moment.
Remote Control Solutions
Different operating systems have different remote control software features. For example, vista had meeting space and Windows 7 had shared view. There are web based tools that were explored. The trouble with all these is that authentication becomes an issue or two people are involved in the setup.
Hardware Switch Boxes
At one point, testing was done with KVM switches that are usually used in computer rooms to enable one monitor, keyboard and mouse combination to control any compute in the room. Cross switches could hook multiple KVM sets to multiple monitors. These were hacked, installed and worked. But nobody used them.
The system was limited with four or five KVM sets sharing one monitor. Not all the monitors were accessible.
There were massive numbers of cables going down the desks and up the walls. It looked ugly. The more cables, the unstable a system is in a classroom.
Dedicated Computer
The fundamental problem in most classes is that students have to gain control of the instructors workstation in order to use the LCD panel. If a student has to bump another student off the computer connected to a big monitor, the problems are still the same. Privacy, and moving book bags get in the way of sharing both a computer and a monitor.
A cheap, dedicated computer is need for each LCD project and monitor. :

## Design

Final Design
msconfig of windows 7 showing setup to use TightVNC to display screen on shared monitors
msconfig screen shot of windows 7 showing TightVNC services running
Board with Raspberry, power strip, power cord, TV HDMI cable and Ethernet.
Raspberry boots Raspian, which is a type of Debian Linux distribution.
Raspberry gets stable DHCP lease, and runs TightVNC client in listening mode.
PC's boot VNC as a service at boot time, then run a batch file to operate. :

## Implement

Implemented using Raspberry Tinyvnc using Raspian
Raspbian “wheezy” OS was put onto SD cards with Win32DiskImager software as shown on the Raspberry Pi site. Here is an outline:
Format SD card of any data (We used Fat32 file system)
Download Raspberian image from Raspbian Download Site
Copy Raspbian image to SD card using dd for Linux/Unix or Win32DiscImager for Windows.
On first boot run these commands:
Set SD card to expand file system to whole SD card.
Reconfigure locale settings with "sudo dpkg-reconfigure locales" and set to "en_US.UTF-8"
Reconfigure keyboard with "sudo nano /etc/default/keyboard/" and change "gb" to "us"
Set time zone with "sudo dpkg-reconfigure tzdata"
Start GUI with "startx"
raspi-config was run to expand the partition, set the time zone, enable SSH, and to change the boot behavior so as not to boot straight to desktop.
The Raspberry Pi's max ethernet speed is 100mbs, and so needs a slower switch than the rest of the computers which are at 1000mbs.
The etherent ports that are connected to the slow switch are:
158-K47
158-K29
158-N47
158-N48
159-L11
159-L12
158-L01 to 158-L08
These ports have static IP addresses, and can be accessed from throughout the college.
VNC (Virtual Network Control) software was then installed onto the Pi's with the command:
sudo apt-get install vncviewer
vim and proftpd were also installed, although not necessary for VNC.
To run the viewer with on startx, ~/.xinitrc was edited to read as follows:
nice -9 vncviewer -listen 1 -quality 7 -compresslevel 9 -nocusorshape
To disable the screen saver, x11-xserver-utils was installed, and the following lines were added to ~/.xinitrc:
xset s off
xset s noblank
xset -dpms
TightVNC was then installed on all of the computers in the room.
Bat files were placed on each desktop that connect the computer with one or more of the raspberry pi's. An example connection bat file is:
"c:\Program Files\TightVNC\tvnserver.exe" -controlservice -connect 10.10.22.31:5501
"c:\Program Files\TightVNC\tvnserver.exe" -controlservice -shareprimary
Where 10.10.22.31 is an example IP address of the Pi you want to connect to, and 5501 is the port number the connection is through.
The disconnect bat file is as follows:
"c:\Program Files\TightVNC\tvnserver.exe" -controlservice -disconnectall :

## Operate

Click on Batch Files
Screen shot of what user sees to switch monitors
To display your computer screen on one of the Pi's, double click one of the bat files one the desktop labeled:
Individual Monitor A
"c:\Program Files\TightVNC\tvnserver.exe" -controlservice -connect 10.10.22.31:5501
"c:\Program Files\TightVNC\tvnserver.exe" -controlservice -shareprimary
Individual Monitor B
"c:\Program Files\TightVNC\tvnserver.exe" -controlservice -connect 10.10.22.14:5501
"c:\Program Files\TightVNC\tvnserver.exe" -controlservice -shareprimary
Individual Monitor C
"c:\Program Files\TightVNC\tvnserver.exe" -controlservice -connect 10.10.22.26:5501
"c:\Program Files\TightVNC\tvnserver.exe" -controlservice -shareprimary
LCD Projector
"c:\Program Files\TightVNC\tvnserver.exe" -controlservice -connect 10.10.22.15:5501
"c:\Program Files\TightVNC\tvnserver.exe" -controlservice -shareprimary
All Monitors Simultaneously
"c:\Program Files\TightVNC\tvnserver.exe" -controlservice -connect 10.10.22.31:5501
"c:\Program Files\TightVNC\tvnserver.exe" -controlservice -shareprimary
"c:\Program Files\TightVNC\tvnserver.exe" -controlservice -connect 10.10.22.14:5501
"c:\Program Files\TightVNC\tvnserver.exe" -controlservice -shareprimary
"c:\Program Files\TightVNC\tvnserver.exe" -controlservice -connect 10.10.22.26:5501
"c:\Program Files\TightVNC\tvnserver.exe" -controlservice -shareprimary
"c:\Program Files\TightVNC\tvnserver.exe" -controlservice -connect 10.10.22.15:5501
"c:\Program Files\TightVNC\tvnserver.exe" -controlservice -shareprimary
Disconnect All
"c:\Program Files\TightVNC\tvnserver.exe" -controlservice -disconnectall
To start up the Raspberry Pi's VNC client after being powered off, you can connect to the targeted Pi via ssh (pi username raspberry password), run startx &, and then end the ssh connection. The "&" symbol is necessary to keep the client running after closing the ssh session.
Universal Remote Setup Instructions
Remote Setup Instructions
This is for Dell Monitors controlled by a PM-RC26 universal remote.
To search for a device follow these steps:
hold s button down for more than 3 seconds
CODE SETUP should appear in the LCD menu ... press OK
DEV SEARCH should appear in the LCD menu ... press OK
Then press TV ... then press OK
Point to a monitor that is on. About ever second the remote will try to turn off the monitor. When it does so successfully, press anykey. The Dell Monitors appear to be code 323 or 325.
Operation
Walk under monitors, get 3 to 4 feet from the bottom, aim at the left corner. Press the button and wait a second. Monitors should turn off or on.
Changing Batteries
The manual says that these settings will be remembered while changing batteries.
The batteries were removed and not replaced for over 3 months. Eventually it does forget the settings. :

## Demo

* video

## Next Steps

* Can not display video ... video plays so slow, looks like a slide show. Need to isolate the problem to the network (did have problems with raspberry negotiating hard wired ethernet connection speeds with schools gigabit ethernet hubs) or to the raspberry.
* Can not see the mouse ... have to get out of seat and wave a stick at the monitor or use laser pointer on one monitor (not all of them) to point
* Can not hear anything .. possibly use PBX software asterisk to share sound ... raspberries have sound ports that could be connected to speakers
* Can possibly hook usb web cameras to the raspberrys to enable display on any monitor