mirror of
https://github.com/kasmtech/KasmVNC.git
synced 2024-11-22 16:13:13 +01:00
updated readme and vncserver
This commit is contained in:
parent
80513c8616
commit
0a68500ee3
28
README.md
28
README.md
@ -26,11 +26,9 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Future Goals:
|
Future Goals:
|
||||||
|
|
||||||
- Support uploads and downloads
|
- Support uploads and downloads
|
||||||
- Json configuration file
|
|
||||||
- Pre-build Packages for all major Linux distributions
|
- Pre-build Packages for all major Linux distributions
|
||||||
- CI pipelines to create releases
|
- CI pipelines to create releases
|
||||||
|
|
||||||
@ -40,36 +38,38 @@ We are currently developing releasable packages for major operating sytems. The
|
|||||||
This installer assumes you already have a desktop environment installed, but have never configured a VNC server. Use the install script found in this project under builder/install/install.sh, currently Ubuntu 18.04LTS is the only operating system with pre-compiled binaries.
|
This installer assumes you already have a desktop environment installed, but have never configured a VNC server. Use the install script found in this project under builder/install/install.sh, currently Ubuntu 18.04LTS is the only operating system with pre-compiled binaries.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# use install script from builder/install/install.sh
|
# install dependencies
|
||||||
sudo ./install.sh
|
sudo apt-get -y install libjpeg-dev
|
||||||
|
|
||||||
# change owner of pre-installed cert to your user
|
# install KasmVNC
|
||||||
|
wget https://github.com/kasmtech/KasmVNC/releases/download/v0.9.1-beta/KasmVNC_0.9.1-beta_Ubuntu_18.04.tar.gz | sudo tar xz --strip 1 -C /
|
||||||
|
|
||||||
|
# Generate an SSL Cert and change owner
|
||||||
|
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /usr/local/share/kasmvnc/certs/self.pem -out /usr/local/share/kasmvnc/certs/self.pem -subj "/C=US/ST=VA/L=None/O=None/OU=DoFu/CN=kasm/emailAddress=none@none.none"
|
||||||
sudo chown $USER /usr/local/share/kasmvnc/certs/self.pem
|
sudo chown $USER /usr/local/share/kasmvnc/certs/self.pem
|
||||||
|
|
||||||
# create required files
|
# start kasmvnc and set password for remote access
|
||||||
touch ~/.Xresources
|
|
||||||
# start kasmvnc to generate the required files and then kill it
|
|
||||||
# it will prompt to set the vnc password
|
|
||||||
vncserver :1 -interface 0.0.0.0
|
vncserver :1 -interface 0.0.0.0
|
||||||
vncserver -kill :1
|
vncserver -kill :1
|
||||||
|
|
||||||
# overwrite the VNC password to nothing. KasmVNC uses HTTPS basic authentication
|
|
||||||
echo '' | vncpasswd -f > $HOME/.vnc/passwd
|
|
||||||
|
|
||||||
# modify vncstartup to launch your environment of choice, in this example LXDE
|
# modify vncstartup to launch your environment of choice, in this example LXDE
|
||||||
echo '/usr/bin/lxsession -s LXDE &' >> ~/.vnc/xstartup
|
echo '/usr/bin/lxsession -s LXDE &' >> ~/.vnc/xstartup
|
||||||
|
|
||||||
|
# The KasmVNC username is automatically set to your system username, you can mofify it if you wish
|
||||||
|
vi ~/.vnc/config
|
||||||
|
|
||||||
# launch KasmVNC
|
# launch KasmVNC
|
||||||
vncserver $DISPLAY -depth 24 -geometry 1280x1050 -basicAuth kasm_user:password -websocketPort 8443 -cert /usr/local/share/kasmvnc/certs/self.pem -sslOnly -FrameRate=24 -interface 0.0.0.0
|
vncserver $DISPLAY -depth 24 -geometry 1280x1050 -websocketPort 8443 -cert /usr/local/share/kasmvnc/certs/self.pem -sslOnly -FrameRate=24 -interface 0.0.0.0
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Now navigate to your system at https://[ip-address]:8443/vnc.html
|
||||||
|
|
||||||
The options for vncserver in the example above:
|
The options for vncserver in the example above:
|
||||||
|
|
||||||
| Argument | Description |
|
| Argument | Description |
|
||||||
| -------- | ----------- |
|
| -------- | ----------- |
|
||||||
| depth | Color depth, for jpeg/webp should be 24bit |
|
| depth | Color depth, for jpeg/webp should be 24bit |
|
||||||
| geometry | Screensize, this will automatically be adjusted when the client connects. |
|
| geometry | Screensize, this will automatically be adjusted when the client connects. |
|
||||||
| basicAuth | Username and password seperated by a semi-colon. |
|
|
||||||
| websocketPort | The port to use for the web socket. Use a high port to avoid having to run as root. |
|
| websocketPort | The port to use for the web socket. Use a high port to avoid having to run as root. |
|
||||||
| cert | SSL cert to use for HTTPS |
|
| cert | SSL cert to use for HTTPS |
|
||||||
| sslOnly | Disable HTTP |
|
| sslOnly | Disable HTTP |
|
||||||
|
@ -1,79 +0,0 @@
|
|||||||
set -e
|
|
||||||
|
|
||||||
OS_ID='unknown'
|
|
||||||
OS_VERSION_ID='unknown'
|
|
||||||
SUPPORTED='false'
|
|
||||||
|
|
||||||
if [[ $EUID -ne 0 ]]; then
|
|
||||||
echo "This script must ran with sudo"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
function install_deps_ubuntu_18(){
|
|
||||||
# install deps and build tools
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get -y install libjpeg-dev libpng-dev libtiff-dev libgif-dev build-essential cmake libxfont-dev
|
|
||||||
|
|
||||||
wget http://launchpadlibrarian.net/347526424/libxfont1-dev_1.5.2-4ubuntu2_amd64.deb
|
|
||||||
wget http://launchpadlibrarian.net/347526425/libxfont1_1.5.2-4ubuntu2_amd64.deb
|
|
||||||
sudo dpkg -i libxfont1*.deb
|
|
||||||
rm /tmp/libxfont1*.deb
|
|
||||||
}
|
|
||||||
|
|
||||||
function build_webp(){
|
|
||||||
# build webp
|
|
||||||
wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz
|
|
||||||
tar -xzvf /tmp/libwebp-*
|
|
||||||
cd /tmp/libwebp-1.0.2
|
|
||||||
./configure
|
|
||||||
make
|
|
||||||
sudo make install
|
|
||||||
cd /
|
|
||||||
rm -rf /tmp/libwebp*
|
|
||||||
sudo ldconfig
|
|
||||||
}
|
|
||||||
|
|
||||||
function install_kasmvnc(){
|
|
||||||
# install kasmvnc
|
|
||||||
wget -qO- https://github.com/kasmtech/KasmVNC/releases/download/v0.9.0-beta/KasmVNC_0.9.0-beta_Ubuntu_18.04.tar.gz | sudo tar xz --strip 1 -C /
|
|
||||||
#install cert
|
|
||||||
sudo mkdir /usr/local/share/kasmvnc/certs
|
|
||||||
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /usr/local/share/kasmvnc/certs/self.pem -out /usr/local/share/kasmvnc/certs/self.pem -subj "/C=US/ST=VA/L=None/O=None/OU=DoFu/CN=kasm/emailAddress=none@none.none"
|
|
||||||
}
|
|
||||||
|
|
||||||
cd /tmp
|
|
||||||
|
|
||||||
# Get the OS and version
|
|
||||||
if [ -f /etc/os-release ] ; then
|
|
||||||
OS_ID="$(awk -F= '/^ID=/{print $2}' /etc/os-release)"
|
|
||||||
OS_VERSION_ID="$(awk -F= '/^VERSION_ID/{print $2}' /etc/os-release)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if [ "${OS_ID}" == "ubuntu" ] && ( [ "${OS_VERSION_ID}" == '"16.04"' ] || [ "${OS_VERSION_ID}" == '"18.04"' ] || [ "${OS_VERSION_ID}" == '"20.04"' ]) ; then
|
|
||||||
|
|
||||||
if [ "${OS_VERSION_ID}" == '"18.04"' ] ; then
|
|
||||||
SUPPORTED='true'
|
|
||||||
install_deps_ubuntu_18
|
|
||||||
build_webp
|
|
||||||
install_kasmvnc
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${OS_ID}" == "debian" ] && ( [ "${OS_VERSION_ID}" == '"9"' ] || [ "${OS_VERSION_ID}" == '"10"' ] ) ; then
|
|
||||||
#TODO: Add support for debian
|
|
||||||
echo 'Debian is currently not supported'
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${OS_ID}" == '"centos"' ] && ( [ "${OS_VERSION_ID}" == '"7"' ] || [ "${OS_VERSION_ID}" == '"8"' ] ) ; then
|
|
||||||
#TODO: Add support for Centos
|
|
||||||
echo 'CentOS is currently not supported'
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${SUPPORTED}" == "false" ] ; then
|
|
||||||
echo "Installation Not Supported for this Operating System. You must compile KasmVNC from source."
|
|
||||||
exit -1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Installation is complete"
|
|
||||||
echo "Follow the instructions to complete setup"
|
|
@ -1006,7 +1006,8 @@ const UI = {
|
|||||||
|
|
||||||
//recieved bottleneck stats
|
//recieved bottleneck stats
|
||||||
bottleneckStatsRecieve(e) {
|
bottleneckStatsRecieve(e) {
|
||||||
document.getElementById("noVNC_connection_stats").innerHTML = e.detail.text;
|
var obj = JSON.parse(e.detail.text);
|
||||||
|
document.getElementById("noVNC_connection_stats").innerHTML = "CPU: " + obj[0] + "/" + obj[1] + " | Network: " + obj[2] + "/" + obj[3];
|
||||||
console.log(e.detail.text);
|
console.log(e.detail.text);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
86
unix/vncserver
Executable file → Normal file
86
unix/vncserver
Executable file → Normal file
@ -45,6 +45,8 @@ $geometry = "1024x768";
|
|||||||
|
|
||||||
$vncUserDir = "$ENV{HOME}/.vnc";
|
$vncUserDir = "$ENV{HOME}/.vnc";
|
||||||
$vncUserConfig = "$vncUserDir/config";
|
$vncUserConfig = "$vncUserDir/config";
|
||||||
|
$vncUserName = `id -u -n`;
|
||||||
|
$vncUserName =~ s/^\s+|\s+$//g;
|
||||||
|
|
||||||
$vncSystemConfigDir = "/etc/kasmvnc";
|
$vncSystemConfigDir = "/etc/kasmvnc";
|
||||||
$vncSystemConfigDefaultsFile = "$vncSystemConfigDir/vncserver-config-defaults";
|
$vncSystemConfigDefaultsFile = "$vncSystemConfigDir/vncserver-config-defaults";
|
||||||
@ -89,7 +91,8 @@ $defaultConfig
|
|||||||
"# desktop=sandbox\n".
|
"# desktop=sandbox\n".
|
||||||
"# geometry=2000x1200\n".
|
"# geometry=2000x1200\n".
|
||||||
"# localhost\n".
|
"# localhost\n".
|
||||||
"# alwaysshared\n");
|
"# alwaysshared\n".
|
||||||
|
"username=$vncUserName");
|
||||||
|
|
||||||
chop($host = `uname -n`);
|
chop($host = `uname -n`);
|
||||||
|
|
||||||
@ -237,46 +240,50 @@ $passwordArgSpecified = 0;
|
|||||||
@vncAuthStrings = ("vncauth", "tlsvnc", "x509vnc");
|
@vncAuthStrings = ("vncauth", "tlsvnc", "x509vnc");
|
||||||
|
|
||||||
# ...first we check our configuration files' settings
|
# ...first we check our configuration files' settings
|
||||||
if ($config{'securitytypes'}) {
|
#if ($config{'securitytypes'}) {
|
||||||
$securityTypeArgSpecified = 1;
|
# $securityTypeArgSpecified = 1;
|
||||||
foreach $arg2 (split(',', $config{'securitytypes'})) {
|
# foreach $arg2 (split(',', $config{'securitytypes'})) {
|
||||||
if (grep {$_ eq lc($arg2)} @vncAuthStrings) {
|
# if (grep {$_ eq lc($arg2)} @vncAuthStrings) {
|
||||||
$vncAuthEnabled = 1;
|
# $vncAuthEnabled = 1;
|
||||||
}
|
# }
|
||||||
}
|
# }
|
||||||
}
|
#}
|
||||||
|
|
||||||
# ...and finally we check CLI args, which in the case of the topic at
|
# ...and finally we check CLI args, which in the case of the topic at
|
||||||
# hand (VNC auth or not), override anything found in configuration files
|
# hand (VNC auth or not), override anything found in configuration files
|
||||||
# (even so-called "mandatory" settings).
|
# (even so-called "mandatory" settings).
|
||||||
for ($i = 0; $i < @ARGV; ++$i) {
|
#for ($i = 0; $i < @ARGV; ++$i) {
|
||||||
# -SecurityTypes can be followed by a space or "="
|
# # -SecurityTypes can be followed by a space or "="
|
||||||
my @splitargs = split('=', $ARGV[$i]);
|
# my @splitargs = split('=', $ARGV[$i]);
|
||||||
if (@splitargs <= 1 && $i < @ARGV - 1) {
|
# if (@splitargs <= 1 && $i < @ARGV - 1) {
|
||||||
push(@splitargs, $ARGV[$i + 1]);
|
# push(@splitargs, $ARGV[$i + 1]);
|
||||||
}
|
# }
|
||||||
if (lc(@splitargs[0]) eq "-securitytypes") {
|
# if (lc(@splitargs[0]) eq "-securitytypes") {
|
||||||
if (@splitargs > 1) {
|
# if (@splitargs > 1) {
|
||||||
$securityTypeArgSpecified = 1;
|
# $securityTypeArgSpecified = 1;
|
||||||
}
|
# }
|
||||||
foreach $arg2 (split(',', @splitargs[1])) {
|
# foreach $arg2 (split(',', @splitargs[1])) {
|
||||||
if (grep {$_ eq lc($arg2)} @vncAuthStrings) {
|
# if (grep {$_ eq lc($arg2)} @vncAuthStrings) {
|
||||||
$vncAuthEnabled = 1;
|
# $vncAuthEnabled = 1;
|
||||||
}
|
# }
|
||||||
}
|
# }
|
||||||
}
|
# }
|
||||||
if ((lc(@splitargs[0]) eq "-password")
|
# if ((lc(@splitargs[0]) eq "-password")
|
||||||
|| (lc(@splitargs[0]) eq "-passwordfile"
|
# || (lc(@splitargs[0]) eq "-passwordfile"
|
||||||
|| (lc(@splitargs[0]) eq "-rfbauth"))) {
|
# || (lc(@splitargs[0]) eq "-rfbauth"))) {
|
||||||
$passwordArgSpecified = 1;
|
# $passwordArgSpecified = 1;
|
||||||
}
|
# }
|
||||||
}
|
#}
|
||||||
|
|
||||||
if ((!$securityTypeArgSpecified || $vncAuthEnabled) && !$passwordArgSpecified) {
|
# Disable vnc auth, kasmvnc uses https basic auth
|
||||||
($z,$z,$mode) = stat("$vncUserDir/passwd");
|
system("echo '' | ".$exedir."vncpasswd -f > $vncUserDir/passwd");
|
||||||
if (!(-e "$vncUserDir/passwd") || ($mode & 077)) {
|
|
||||||
|
$kasmAuthEnabled = 1;
|
||||||
|
|
||||||
|
if ($kasmAuthEnabled) {
|
||||||
|
if (!(-e "$ENV{HOME}/.kasmpasswd")) {
|
||||||
warn "\nYou will require a password to access your desktops.\n\n";
|
warn "\nYou will require a password to access your desktops.\n\n";
|
||||||
system($exedir."vncpasswd -q $vncUserDir/passwd");
|
system($exedir."kasmvncpasswd $ENV{HOME}/.kasmpasswd");
|
||||||
if (($? >> 8) != 0) {
|
if (($? >> 8) != 0) {
|
||||||
exit 1;
|
exit 1;
|
||||||
}
|
}
|
||||||
@ -367,7 +374,8 @@ unless (kill 0, `cat $pidFile`) {
|
|||||||
die "\n";
|
die "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
warn "\nNew '$desktopName' desktop is $host:$displayNumber\n\n";
|
warn "\nNew '$desktopName' desktop is $host:$displayNumber\n";
|
||||||
|
warn "\nUsername: $vncUserName\n\n";
|
||||||
|
|
||||||
# Create the user's xstartup script if necessary.
|
# Create the user's xstartup script if necessary.
|
||||||
if (! $skipxstartup) {
|
if (! $skipxstartup) {
|
||||||
@ -456,7 +464,13 @@ sub LoadConfig {
|
|||||||
if ($warnoverride && $config{$k}) {
|
if ($warnoverride && $config{$k}) {
|
||||||
print("Warning: $configFile is overriding previously defined '$k' to be '$v'\n");
|
print("Warning: $configFile is overriding previously defined '$k' to be '$v'\n");
|
||||||
}
|
}
|
||||||
|
# change username option to basicAuth and add colon as required by Xvnc, password will be taken from file
|
||||||
|
if ($k = "username") {
|
||||||
|
$config{"basicauth"} = "$v:";
|
||||||
|
$vncUserName = $v;
|
||||||
|
} else {
|
||||||
$config{$k} = $v;
|
$config{$k} = $v;
|
||||||
|
}
|
||||||
} elsif ($_ =~ m/^\s*(\S+)/) {
|
} elsif ($_ =~ m/^\s*(\S+)/) {
|
||||||
# We can't reasonably warn on override of toggles (e.g. AlwaysShared)
|
# We can't reasonably warn on override of toggles (e.g. AlwaysShared)
|
||||||
# because it would get crazy to do so. We'd have to check if the
|
# because it would get crazy to do so. We'd have to check if the
|
||||||
|
Loading…
Reference in New Issue
Block a user