Skip to content
Snippets Groups Projects
Commit d711684a authored by Peter Gerwinski's avatar Peter Gerwinski
Browse files

README.md: licenses, minimal installation instructions

parent c44ca050
No related branches found
No related tags found
No related merge requests found
......@@ -5,12 +5,11 @@ PULT is the ULTimate Learning/Teaching Tool
Contents
--------
* What is PULT?
* Okay, more technically, what is PULT?
* How does this look like in practice?
* License
Installation: see INSTALL.md (to be written soon)
* [ What is PULT? ](#what-is-pult)
* [ Okay, more technically, what is PULT? ](#okay-more-technically-what-is-pult)
* [ How does this look like in practice? ](#how-does-this-look-like-in-practice)
* [ Licence ](#licence)
* [ Installation ](#installation)
What is PULT?
-------------
......@@ -37,7 +36,7 @@ What is PULT?
You can run it on your own server for best-possible data
protection and privacy. You can study how it works, adapt
it to your needs, and publish your improvements for everyone
to benefit. Also, there are no licensing fees.
to benefit. Also, there are no licencing fees.
* **PULT husbands your CPU power and network bandwidth.**
......@@ -61,15 +60,15 @@ Okay, more technically, what is PULT?
-------------------------------------
PULT is a collection of small programs, mostly Unix shell scripts.
It provides a console (in German: „Pult“:–) where the lecturer can
select which visual content is offered to the audioence via a web
select which visual content is offered to the audience via a web
interface, *noVNC*. These visual contents can be a shared desktop,
a camera view, an uploaded image or screenshot, or some arbitrary
content provided by some other tool via a web interface, for
instance a BigBlueButton presentation or the shared whiteboard of
OpenMeetings.
PULT itself only handles video. For the audio part and chat part
it cooperates with Mumble.
PULT itself only handles video. For the audio part and the chat
part it cooperates with Mumble.
The virtual “meeting rooms” in PULT are called *channels*. For each
channel, there is one instance of noVNC, showing a virtual desktop,
......@@ -270,12 +269,12 @@ How does this look like in practice?
and “VNC stop”. The channel shows a welcome screen again.
To end the session, everyone closes their browser windows.
License
Licence
-------
PULT is Free Software (Open Source) under the
[ GNU Affero General Public License (AGPL) ](https://www.gnu.org/licenses/agpl-3.0.html),
version 3 or higher,
either version 3 of the licence, or, at your option, any later version.
In short this means:
......@@ -286,19 +285,200 @@ In short this means:
To make this possible, you have, as a user of the software,
the right to obtain its source code, *even if the software
runs on a server*, and you only connect to that server.
runs on a server, and you only connect to that server*.
(This “even on a server” clause is what distinguishes the
GNU Affero General Public License (AGPL) from the “normal”
GNU General Public Licnese (GPL).)
GNU Affero GPL from the “normal” GNU GNU GPL.)
* You are free to distribute copies of this software,
gratis or for a fee, *provided that* you don't deny
anyone the rights we gave to you.
* You are free to redistribute copies of this software,
gratis or for a fee, *provided that you don't deny
anyone the rights we gave to you*.
(This “provided that” clause is the *Copyleft*
principle, an essential feature of the GNU licenses.)
principle, an essential feature of the GNU licences.)
* You are free to improve this software and to publish your
improvements, so the whole society benefits from it.
* You are free to improve this software and to redistribute
your improvements, so everyone can benefit from it.
Again, you may do this as a charity service, but you are also
free to found a business providing this kind of service.
* There is NO WARRANTY, unless you are paying someone
to provide a warranty for you.
The GNU AGPL applies to PULT itself. Many components used by PULT
are under different licences. However they are all Free Software,
and their licence conditions are essentially subsets of those of
the GNU AGPL.
A simplified list of the individual licences follows.
For details, please examine the individual software packages.
* *Mumble* (server and client): 3-clause BSD licence
* Mumble web interface *mumble-web*: ISC licence
* Web server: *nginx*: 2-clause BSD licence,
or *Apache*: Apache licence 2.0
* *noVNC*: MPL 2.0
* *yesVNC*: GNU APGL 3+ (part of PULT)
* *websockify*: GNU GPL 3
* *TigerVNC*: GNU GPL 2.0
* *TightVNC*: GNU GPL 2.0+
* *x11vnc*: GNU GPL 2.0
* *ssvnc*: GNU GPL 2.0
* *OpenSSH*: 3-clause BSD licence
* *PuTTY*: MIT/Expat licence
* *Janus WebRTC Gateway*: GNU GPL 3
* *Firefox* web browser and *geckodriver*: MPL 2.0
* *Chromium* web browser and *chromedriver*: 3-clause BSD licence
* *Selenium*: Apache licence 2.0
* *Python*: PSF licence
* *Node.js*: MIT/Expat licence
* *Netcat*: 3-clause BSD licence
* *Bash*: GNU GPL 3+
* *botamusique*: MIT/Expat licence
For an overview about the licences themselves, see
[ https://www.gnu.org/licenses/license-list.html ](https://www.gnu.org/licenses/license-list.html).
Installation
------------
You can find detailed installation instructions in the file
[ doc/pult-install.pdf ](doc/pult-install.pdf) (to be written).
This section gives a brief overview.
The PULT server was desiged to run on GNU/Linux. However it should
not be difficult to make it run on other Unix-like systems.
PULT consists of several parts to be installed separately. You can
choose which ones you want to use. Most of them make use of other
software which is well-established and probably included in your
GNU/Linux distribution for easy installation.
* **Mumble**
PULT itself only handles video. For a useful system you need
something which handles the audio part. We highly recommend
Mumble for its stability and quality. Mumble also provides a
chat function which has proven very useful.
PULT comes with some utilites which are designed to cooperate
with Mumble.
For the audience, the most efficient way to participate in Mumble
is to install a Mumble client. If you want to provide an easier,
albeit less efficient access method, you can install mumble-web,
a web interface for Mumble.
The Mumble server (Murmur) is included in many GNU/Linux
distributions. The Mumble client (for the audience) for
vaious platforms can be downloaded from
[ https://www.mumble.com/ ](https://www.mumble.com/).
The Mumble web interface is available at
[ https://github.com/Johni0702/mumble-web ](https://github.com/Johni0702/mumble-web).
* **VNC**
Almost everything the audience can watch is conveyed via noVNC.
For sharing a desktop via VNC, the most efficient way is to
install a VNC server on the lecturer's computer. If you want
to provide an easier, albeit less efficient method, you can
install yesVNC, a web interface for VNC, developed as part of
PULT.
The VNC server and client software, including the noVNC web
interface, is included in many GNU/Linux distributions.
Lecturers who want to install a VNC server can use TightVNC,
[ https://tightvnc.com/download.php ](https://tightvnc.com/download.php).
Lecturers who want to use an SSH tunnel but cannot easily use
OpenSSH, can use PuTTY, available at
[ https://www.chiark.greenend.org.uk/~sgtatham/putty/ ](https://www.chiark.greenend.org.uk/~sgtatham/putty/).
* **PULT Itself**
PULT itself is a collection of small programs, mostly shell
scripts, to control everything. This includes start/stop scripts
for systemd, HTML files and CGI scripts for web interfaces, and
configuration templates for your web server (*Apache* or *nginx*).
There is a shell script, *pult-install*, in the same directory as
this file. When you run it with root privileges, it will copy
the files which make up PULT to their directories and give them
appropriate permissions. However, this script is incomplete,
leaving important tasks such as creating user accounts and
enabling systemd services as manual tasks.
* **CVH-Camera**
We have developed a native camera subsystem for PULT, CVH-Camera.
It provides a simple web interface to share a camera view and
uses the Janus WebRTC gateway to distribute it to the audience.
That way, CVH-Camera provides high quality at resonably low
consumption of CPU power and network bandwidth.
CVH-Camera is available at
[ https://gitlab.cvh-server.de/sdoering/cvh-camera ](https://gitlab.cvh-server.de/sdoering/cvh-camera).
Parts of it are included in the PULT sources and get installed
via the *pult-install* shell script.
* **Browser-Based Video Contents**
PULT can use Selenium, Python, and the web browsers Chromium and
Firefox for accessing web contents provided by other systems.
In particular, PULT can extract a camera view out of an external
Jitsi Meet or BigBlueButton, as an alternative to CVH-Camera.
The browser method requires more CPU power and network bandwidth
at a lower quality, but it provides the same level of reliability
as CVH-Camera.
The required software, Selenium, Python, Chromium, ChromeDriver,
and Firefox, is included in most GNU/Linux distributions.
One additional component, GecokDriver, can be downloaded from
[ https://github.com/mozilla/geckodriver/releases ](https://github.com/mozilla/geckodriver/releases).
* **External Conference Systems**
If you want to use a shared whiteboard, we recommend to
install OpenMeetings and to import its whiteboard into
PULT as a browser-based content (see above). The same
is possible for BigBlueButton.
It is straightforward to import contents from other external
systems. Just copy and modify one of the existing modules,
for instance *bbb-camera*.
* **Other Useful Stuff**
We also provide *CVH-Bot*, a bot which joins the Mumble chat and
makes it easy to conduct polls. CVH-Bot is available at
[ https://gitlab.cvh-server.de/jvongehr/cvh-bot ](https://gitlab.cvh-server.de/jvongehr/cvh-bot).
Speaking of Mumble bots, we can recommend *botamusique* for
playing music in Mumble – for your events, for fun and for
testing purposes. You can find botamusique at
[ https://github.com/azlux/botamusique ](https://github.com/azlux/botamusique).
At the Bochum University of Applied Sciences, we provide a web
page which allows for quick access to a *virtual room*, i.e. a
combination of a Mumble channel and a VNC channel in PULT. Be
welcome to copy it and to adapt it to your room structure.
File added
!<Kp;3
'M
\ No newline at end of file
topsecret
viewonly
#!/bin/dash
xsetroot -solid white
xpdf -fullscreen "$HOME/vnc-testbild.pdf" 6
../vnc-testbild.pdf
\ No newline at end of file
......@@ -85,6 +85,13 @@ Please install manually:
- etc/nginx/sites-available/fragment.conf in your nginx configuration
- etc/janus/janus.plugin.videoroom.jcfg.fragment in your janus configuration
- www/vnc as your VNC channel web page
- www/virtual-rooms as your quick access interface
- home/pult as the home directory for your "pult" user
- home/pult/vncX as the VNC home directories inside /home/pult
Note: It contains a subdirectory ".vnc".
Replace X by the channel numbers: vnc1, vnc2, ...
The file ".vnc/passwdfile" is plain text. When you change it,
use "cat passwdfile | vncpasswd -f > passwd" to regenerate a "passwd" file.
- adapt cvh-camera-update-credentials to your www directory,
and add a cron job to execute it periodically, for instance:
42 * * * * $sbin_directory/cvh-camera-update-credentials
......
<!doctype html public "-//W3C//DTD HTML 4.0 Strict//EN">
<!--
Web Interface for Virtual Rooms at Campus Velbert/Heiligenhaus,
Bochum University of Applied Sciences
Copyright 2020 Peter Gerwinski <http://www.peter.gerwinski.de>
This program is free software: you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf8">
<title>Virtuelle Räume</title>
<link rel="stylesheet" href="stylesheets/default.css" type="text/css">
</head>
<body>
<img src="logo-hochschule-bochum-cvh-vertikal-v2-128x205.png"
alt="Hochschule Bochum, Campus Velbert/Heiligenhaus"
class="logo" align="right"/>
<p align="right"><small><a href="index.en.html">[more options]<a></small></p>
<h1>Welcome to our Conference!</h1>
<noscript>
<p>
<strong>Please note:</strong>
These web interfaces only work with cookies and JavaScript.
Sorry for that.
</p>
</noscript>
<script type="text/javascript">
function generateUserName ()
{
var userName = document.getElementById ("user_name");
var length = 5;
var result = 'User_';
var characters = '0123456789';
var charactersLength = characters.length;
for (var i = 0; i < length; i++)
result += characters.charAt (Math.floor (Math.random () * charactersLength));
userName.value = result;
}
function enterRoom ()
{
var userName = document.getElementById ("user_name");
userName.value = userName.value.replace (/ /g, "_");
var url = new URL (window.location.href);
var vncChannel = url.searchParams.get ("ch");
var password = url.searchParams.get ("pw");
var mumbleURL = "https://mumble.cvh-server.de"
+ "?channelName=Conference%20Room"
+ "&username=" + userName.value
+ "&matrix=true";
if (!vncChannel)
alert ("Room not selected. The link to this page appears to be broken.");
else if (!password)
alert ("Missing password. The link to this page appears to be broken.");
else if (!userName.value)
alert ("Missing username. If you want to participate anonymously with a random name, press the “Generate” button.");
else if (vncChannel > 0)
{
var halfResolution = document.getElementById ("half_resolution");
window.open (mumbleURL, "_blank");
window.location.href = "https://novnc.cvh-server.de/vnc.html?host=novnc.cvh-server.de&port=443&path=websock/"
+ vncChannel + "/&reconnect=1&resize=scale&autoconnect=true&password=" + password;
}
else
window.location.href = mumbleURL;
return false;
}
</script>
<p>Please enter a name that will be displayed with your contributions.</p>
<form onsubmit="return enterRoom ();">
<p>
Username:
<input type="text" size="20" id="user_name"/>
<button type="button" id="random" onclick="generateUserName ();">Generate</button>
</p>
<p><button type="submit" id="submit">Enter Conference Room</button><p>
</form>
<p>
After pressing the “Enter Conference Room” button you will be forwarded
to our video system (VNC), where you can watch the presentation.
In addition, a second tab will open and connect you to our audio system (Mumble),
where you can listen to the speaker, speak yourself, and exchange text messages.
</p>
<p>
Contact:
<a href="mailto:peter.gerwinski@hs-bochum.de">Prof. Dr. Peter Gerwinski</a>
</p>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Strict//EN">
<!--
Web Interface for Virtual Rooms at Campus Velbert/Heiligenhaus,
Bochum University of Applied Sciences
Copyright 2020 Peter Gerwinski <http://www.peter.gerwinski.de>
This program is free software: you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf8">
<title>Virtuelle Räume</title>
<link rel="stylesheet" href="stylesheets/default.css" type="text/css">
</head>
<body>
<img src="logo-hochschule-bochum-cvh-vertikal-v2-128x205.png"
alt="Hochschule Bochum, Campus Velbert/Heiligenhaus"
class="logo" align="right"/>
<p align="right"><small><a href="index.en.html">[English]<a></small></p>
<h1>Virtuelle Räume</h1>
<noscript>
<p>
<strong>Hinweis:</strong>
Diese Web-Interfaces funktionieren leider nur mit Cookies und JavaScript.
</p>
</noscript>
<script type="text/javascript">
function getVncChannel ()
{
var room = document.getElementById ("room");
var vncChannel = 0;
switch (room.value)
{
case "--- bitte auswählen ---":
vncChannel = -1;
break;
case "Hörsaal%201":
case "Seminarraum%201":
vncChannel = 1;
break;
case "Seminarraum%202":
case "Conference%20Room":
vncChannel = 6;
break;
case "Hörsaal%203":
case "Seminarraum%203":
vncChannel = 3;
break;
case "Hörsaal%204":
case "Seminarraum%204":
vncChannel = 4;
break;
}
return vncChannel;
}
function roomChanged ()
{
var vncChannel = getVncChannel ();
if (vncChannel < 0)
{
document.getElementById ("vnc_only").disabled = true;
document.getElementById ("vnc_and_mumble").disabled = true;
document.getElementById ("vnc_and_mumble").checked = true;
document.getElementById ("mumble_only").disabled = true;
document.getElementById ("full_resolution").disabled = true;
document.getElementById ("half_resolution").disabled = true;
document.getElementById ("password").disabled = true;
document.getElementById ("password_label").style.color = "gray";
document.getElementById ("user_name").disabled = true;
document.getElementById ("user_name_label").style.color = "gray";
document.getElementById ("submit").disabled = true;
}
else if (vncChannel > 0)
{
document.getElementById ("vnc_only").disabled = false;
document.getElementById ("vnc_and_mumble").disabled = false;
document.getElementById ("vnc_and_mumble").checked = true;
document.getElementById ("mumble_only").disabled = false;
document.getElementById ("full_resolution").disabled = false;
document.getElementById ("half_resolution").disabled = false;
document.getElementById ("user_name").disabled = false;
document.getElementById ("user_name_label").style.color = "black";
document.getElementById ("password").disabled = false;
document.getElementById ("password_label").style.color = "black";
document.getElementById ("submit").disabled = false;
}
else
{
document.getElementById ("vnc_only").disabled = true;
document.getElementById ("vnc_and_mumble").disabled = true;
document.getElementById ("mumble_only").disabled = false;
document.getElementById ("mumble_only").checked = true;
document.getElementById ("full_resolution").disabled = true;
document.getElementById ("half_resolution").disabled = true;
document.getElementById ("user_name").disabled = false;
document.getElementById ("user_name_label").style.color = "black";
document.getElementById ("password").disabled = true;
document.getElementById ("password_label").style.color = "gray";
document.getElementById ("submit").disabled = false;
}
}
function vncOrMumbleChanged ()
{
var vncOnly = document.getElementById ("vnc_only");
var mumbleOnly = document.getElementById ("mumble_only");
if (vncOnly.checked)
{
document.getElementById ("full_resolution").disabled = false;
document.getElementById ("half_resolution").disabled = false;
document.getElementById ("user_name").disabled = true;
document.getElementById ("user_name_label").style.color = "gray";
document.getElementById ("password").disabled = false;
document.getElementById ("password_label").style.color = "black";
document.getElementById ("submit").disabled = false;
}
else if (mumbleOnly.checked)
{
document.getElementById ("full_resolution").disabled = true;
document.getElementById ("half_resolution").disabled = true;
document.getElementById ("user_name").disabled = false;
document.getElementById ("user_name_label").style.color = "black";
document.getElementById ("password").disabled = true;
document.getElementById ("password_label").style.color = "gray";
document.getElementById ("submit").disabled = false;
}
else
{
document.getElementById ("full_resolution").disabled = false;
document.getElementById ("half_resolution").disabled = false;
document.getElementById ("user_name").disabled = false;
document.getElementById ("user_name_label").style.color = "black";
document.getElementById ("password").disabled = false;
document.getElementById ("password_label").style.color = "black";
document.getElementById ("submit").disabled = false;
}
}
function enterRoom ()
{
var room = document.getElementById ("room");
var vncChannel = getVncChannel ();
var userName = document.getElementById ("user_name");
var mumbleURL;
if (document.getElementById ("vnc_only").checked)
mumbleURL = "";
else
mumbleURL = "https://mumble.cvh-server.de"
+ "?channelName=" + room.value
+ "&username=" + userName.value
+ "&matrix=true";
if (vncChannel < 0)
alert ("Bitte Raum auswählen.");
else if (vncChannel == 6)
{
var room = "100" + vncChannel;
var halfResolution = document.getElementById ("half_resolution");
var prescale = "";
if (halfResolution.checked)
{
vncChannel += 10;
prescale = "&video_prescale=1/2"
}
if (mumbleURL.length > 0)
window.open (mumbleURL, "_blank");
window.location.href = "https://streaming.cvh-server.de/vnc.html?host=streaming.cvh-server.de&port=443&path=websock/"
+ vncChannel + "/&reconnect=1&resize=scale&autoconnect=true&password=" + password.value
+ "&room=" + room + prescale;
}
else if (vncChannel > 0)
{
var halfResolution = document.getElementById ("half_resolution");
if (halfResolution.checked)
vncChannel += 6;
if (mumbleURL.length > 0)
window.open (mumbleURL, "_blank");
window.location.href = "https://novnc.cvh-server.de/vnc.html?host=novnc.cvh-server.de&port=443&path=websock/"
+ vncChannel + "/&reconnect=1&resize=scale&autoconnect=true&password=" + password.value;
}
else
window.location.href = mumbleURL;
document.getElementById ("clear_room").selected = true;
return false;
}
</script>
<form onsubmit="return enterRoom ();">
Raum:
<select name="room" id="room" onchange="roomChanged ();">
<option selected="selected" value="none" id="clear_room">--- bitte auswählen ---</option>
<option value="Hörsaal%201">Hörsaal 1</option>
<option value="Hörsaal%202">Hörsaal 2</option>
<option value="Hörsaal%203">Hörsaal 3</option>
<option value="Hörsaal%204">Hörsaal 4</option>
<option value="Seminarraum%201">Seminarraum 1</option>
<option value="Seminarraum%202">Seminarraum 2</option>
<option value="Seminarraum%203">Seminarraum 3</option>
<option value="Seminarraum%204">Seminarraum 4</option>
<option value="Seminarraum%205">Seminarraum 5</option>
<option value="Seminarraum%206">Seminarraum 6</option>
<option value="Seminarraum%207">Seminarraum 7</option>
<option value="Besprechungsraum%201">Besprechungsraum 1</option>
<option value="Besprechungsraum%202">Besprechungsraum 2</option>
<option value="Raum%201">Raum 1</option>
<option value="Raum%202">Raum 2</option>
<option value="Raum%203">Raum 3</option>
<option value="Raum%204">Raum 4</option>
<option value="Raum%205">Raum 5</option>
<option value="Raum%206">Raum 6</option>
<option value="Conference%20Room">Conference Room</option>
</select>
<br/>
<table border="0" cellpadding="0" cellspacing="30">
<tr valign="top">
<td>
<input type="radio" name="vnc_or_mumble" id="vnc_only" disabled="true" onchange="vncOrMumbleChanged ();"/>
<label for="vnc_only">nur Bild (Ton separat über Mumble)</label><br/>
<input type="radio" name="vnc_or_mumble" id="vnc_and_mumble" checked="checked" disabled="true" onchange="vncOrMumbleChanged ();"/>
<label for="vnc_and_mumble">Bild und Ton (2 Tabs)</label><br/>
<input type="radio" name="vnc_or_mumble" id="mumble_only" disabled="true" onchange="vncOrMumbleChanged ();"/>
<label for="mumble_only">nur Ton (Mumble-Web-Client)</label>
</td>
<td>
<input type="radio" name="resolution" id="full_resolution" checked="checked" disabled="true"/>
<label for="full_resolution">volle Auflösung</label><br/>
<input type="radio" name="resolution" id="half_resolution" disabled="true"/>
<label for="half_resolution">halbe Auflösung</label><br/>
</td>
</tr>
</table>
<table border="0" cellpadding="0" cellspacing="5">
<tr>
<td id="password_label" style="color: gray;">Passwort für VNC:</td>
<td><input type="password" size="25" id="password" disabled="true"/></td>
</tr>
<tr valign="top">
<td id="user_name_label" style="color: gray;">Benutzername für Mumble: &nbsp;</td>
<td>
<input type="text" size="25" id="user_name" disabled="true"/><br/>
<font size="-3">(z.&thinsp;B.&nbsp;pgerwinski für „Peter Gerwinski“)</font>
</td>
</tr>
</table>
<br/>
<button type="submit" id="submit" disabled="true">Raum betreten</button>
</form>
<p>
Ansprechpartner:
<a href="mailto:peter.gerwinski@hs-bochum.de">Prof. Dr. Peter Gerwinski</a>
</p>
</body>
</html>
<!doctype html public "-//W3C//DTD HTML 4.0 Strict//EN">
<!--
Web Interface for Virtual Rooms at Campus Velbert/Heiligenhaus,
Bochum University of Applied Sciences
Copyright 2020 Peter Gerwinski <http://www.peter.gerwinski.de>
This program is free software: you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf8">
<title>Virtal Rooms</title>
<link rel="stylesheet" href="stylesheets/default.css" type="text/css">
</head>
<body>
<img src="logo-hochschule-bochum-cvh-vertikal-v2-128x205.png"
alt="Hochschule Bochum, Campus Velbert/Heiligenhaus"
class="logo" align="right"/>
<p align="right"><small><a href="index.de.html">[Deutsch]<a></small></p>
<h1>Virtual Rooms</h1>
<noscript>
<p>
<strong>Please note:</strong>
These web interfaces only work with cookies and JavaScript.
Sorry for that.
</p>
</noscript>
<script type="text/javascript">
function getVncChannel ()
{
var room = document.getElementById ("room");
var vncChannel = 0;
switch (room.value)
{
case "--- please select ---":
vncChannel = -1;
break;
case "Hörsaal%201":
case "Seminarraum%201":
vncChannel = 1;
break;
case "Seminarraum%202":
case "Conference%20Room":
vncChannel = 6;
break;
case "Hörsaal%203":
case "Seminarraum%203":
vncChannel = 3;
break;
case "Hörsaal%204":
case "Seminarraum%204":
vncChannel = 4;
break;
}
return vncChannel;
}
function roomChanged ()
{
var vncChannel = getVncChannel ();
if (vncChannel < 0)
{
document.getElementById ("vnc_only").disabled = true;
document.getElementById ("vnc_and_mumble").disabled = true;
document.getElementById ("vnc_and_mumble").checked = true;
document.getElementById ("mumble_only").disabled = true;
document.getElementById ("full_resolution").disabled = true;
document.getElementById ("half_resolution").disabled = true;
document.getElementById ("password").disabled = true;
document.getElementById ("password_label").style.color = "gray";
document.getElementById ("user_name").disabled = true;
document.getElementById ("user_name_label").style.color = "gray";
document.getElementById ("submit").disabled = true;
}
else if (vncChannel > 0)
{
document.getElementById ("vnc_only").disabled = false;
document.getElementById ("vnc_and_mumble").disabled = false;
document.getElementById ("vnc_and_mumble").checked = true;
document.getElementById ("mumble_only").disabled = false;
document.getElementById ("full_resolution").disabled = false;
document.getElementById ("half_resolution").disabled = false;
document.getElementById ("user_name").disabled = false;
document.getElementById ("user_name_label").style.color = "black";
document.getElementById ("password").disabled = false;
document.getElementById ("password_label").style.color = "black";
document.getElementById ("submit").disabled = false;
}
else
{
document.getElementById ("vnc_only").disabled = true;
document.getElementById ("vnc_and_mumble").disabled = true;
document.getElementById ("mumble_only").disabled = false;
document.getElementById ("mumble_only").checked = true;
document.getElementById ("full_resolution").disabled = true;
document.getElementById ("half_resolution").disabled = true;
document.getElementById ("user_name").disabled = false;
document.getElementById ("user_name_label").style.color = "black";
document.getElementById ("password").disabled = true;
document.getElementById ("password_label").style.color = "gray";
document.getElementById ("submit").disabled = false;
}
}
function vncOrMumbleChanged ()
{
var vncOnly = document.getElementById ("vnc_only");
var mumbleOnly = document.getElementById ("mumble_only");
if (vncOnly.checked)
{
document.getElementById ("full_resolution").disabled = false;
document.getElementById ("half_resolution").disabled = false;
document.getElementById ("user_name").disabled = true;
document.getElementById ("user_name_label").style.color = "gray";
document.getElementById ("password").disabled = false;
document.getElementById ("password_label").style.color = "black";
document.getElementById ("submit").disabled = false;
}
else if (mumbleOnly.checked)
{
document.getElementById ("full_resolution").disabled = true;
document.getElementById ("half_resolution").disabled = true;
document.getElementById ("user_name").disabled = false;
document.getElementById ("user_name_label").style.color = "black";
document.getElementById ("password").disabled = true;
document.getElementById ("password_label").style.color = "gray";
document.getElementById ("submit").disabled = false;
}
else
{
document.getElementById ("full_resolution").disabled = false;
document.getElementById ("half_resolution").disabled = false;
document.getElementById ("user_name").disabled = false;
document.getElementById ("user_name_label").style.color = "black";
document.getElementById ("password").disabled = false;
document.getElementById ("password_label").style.color = "black";
document.getElementById ("submit").disabled = false;
}
}
function enterRoom ()
{
var room = document.getElementById ("room");
var vncChannel = getVncChannel ();
var userName = document.getElementById ("user_name");
var mumbleURL;
if (document.getElementById ("vnc_only").checked)
mumbleURL = "";
else
mumbleURL = "https://mumble.cvh-server.de"
+ "?channelName=" + room.value
+ "&username=" + userName.value
+ "&matrix=true";
if (vncChannel < 0)
alert ("Please select a room.");
else if (vncChannel == 6)
{
var room = "100" + vncChannel;
var halfResolution = document.getElementById ("half_resolution");
var prescale = "";
if (halfResolution.checked)
{
vncChannel += 10;
prescale = "&video_prescale=1/2"
}
if (mumbleURL.length > 0)
window.open (mumbleURL, "_blank");
window.location.href = "https://streaming.cvh-server.de/vnc.html?host=streaming.cvh-server.de&port=443&path=websock/"
+ vncChannel + "/&reconnect=1&resize=scale&autoconnect=true&password=" + password.value
+ "&room=" + room + prescale;
}
else if (vncChannel > 0)
{
var halfResolution = document.getElementById ("half_resolution");
if (halfResolution.checked)
vncChannel += 6;
if (mumbleURL.length > 0)
window.open (mumbleURL, "_blank");
window.location.href = "https://novnc.cvh-server.de/vnc.html?host=novnc.cvh-server.de&port=443&path=websock/"
+ vncChannel + "/&reconnect=1&resize=scale&autoconnect=true&password=" + password.value;
}
else
window.location.href = mumbleURL;
document.getElementById ("clear_room").selected = true;
return false;
}
</script>
<form onsubmit="return enterRoom ();">
Room:
<select name="room" id="room" onchange="roomChanged ();">
<option selected="selected" value="none" id="clear_room">--- please select ---</option>
<option value="Conference%20Room">Conference Room</option>
<option value="Hörsaal%201">Hörsaal 1</option>
<option value="Hörsaal%202">Hörsaal 2</option>
<option value="Seminarraum%201">Seminarraum 1</option>
<option value="Seminarraum%202">Seminarraum 2</option>
<option value="Seminarraum%203">Seminarraum 3</option>
<option value="Seminarraum%204">Seminarraum 4</option>
<option value="Seminarraum%205">Seminarraum 5</option>
<option value="Seminarraum%206">Seminarraum 6</option>
<option value="Seminarraum%207">Seminarraum 7</option>
<option value="Besprechungsraum%201">Besprechungsraum 1</option>
<option value="Besprechungsraum%202">Besprechungsraum 2</option>
<option value="Raum%201">Raum 1</option>
<option value="Raum%202">Raum 2</option>
<option value="Raum%203">Raum 3</option>
<option value="Raum%204">Raum 4</option>
<option value="Raum%205">Raum 5</option>
<option value="Raum%206">Raum 6</option>
</select>
<br/>
<table border="0" cellpadding="0" cellspacing="30">
<tr valign="top">
<td>
<input type="radio" name="vnc_or_mumble" id="vnc_only" disabled="true" onchange="vncOrMumbleChanged ();"/>
<label for="vnc_only">video only (audio via Mumble)</label><br/>
<input type="radio" name="vnc_or_mumble" id="vnc_and_mumble" checked="checked" disabled="true" onchange="vncOrMumbleChanged ();"/>
<label for="vnc_and_mumble">video and audio (2 tabs)</label><br/>
<input type="radio" name="vnc_or_mumble" id="mumble_only" disabled="true" onchange="vncOrMumbleChanged ();"/>
<label for="mumble_only">audio only (Mumble web client)</label>
</td>
<td>
<input type="radio" name="resolution" id="full_resolution" checked="checked" disabled="true"/>
<label for="full_resolution">full resolution</label><br/>
<input type="radio" name="resolution" id="half_resolution" disabled="true"/>
<label for="half_resolution">half resolution</label><br/>
</td>
</tr>
</table>
<table border="0" cellpadding="0" cellspacing="5">
<tr>
<td id="password_label" style="color: gray;">Password for VNC:</td>
<td><input type="password" size="25" id="password" disabled="true"/></td>
</tr>
<tr valign="top">
<td id="user_name_label" style="color: gray;">Username for Mumble: &nbsp;</td>
<td>
<input type="text" size="25" id="user_name" disabled="true"/><br/>
<font size="-3">(e.&thinsp;g.&nbsp;pgerwinski for “Peter Gerwinski”)</font>
</td>
</tr>
</table>
<br/>
<button type="submit" id="submit" disabled="true">Enter Room</button>
</form>
<p>
Contact:
<a href="mailto:peter.gerwinski@hs-bochum.de">Prof. Dr. Peter Gerwinski</a>
</p>
</body>
</html>
index.de.html
\ No newline at end of file
www/virtual-rooms/logo-hochschule-bochum-cvh-vertikal-v2-128x205.png

14.7 KiB

/*
Web Interface for Virtual Rooms at Campus Velbert/Heiligenhaus,
Bochum University of Applied Sciences
Copyright 2020 Peter Gerwinski <http://www.peter.gerwinski.de>
This program is free software: you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
body
{
font-family: sans-serif;
max-width: 50em;
}
img.logo
{
margin-left: 2em;
margin-bottom: 2em;
}
input, select, button
{
font-size: 90%;
}
input:disabled+label
{
color: #c0c0c0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment