Merge branch 'main' of https://git.bh.ttx.sk/jaro/remotesupport into main
This commit is contained in:
73
README.md
73
README.md
@@ -1,7 +1,7 @@
|
|||||||
# RemoteSupport
|
# RemoteSupport
|
||||||
GLPI Plugin for direct VNC connection inside ticket
|
GLPI Plugin for direct VNC connection from browser inside computer from server
|
||||||
|
|
||||||
This Plugin add a simple button inside tickets:
|
This Plugin add a simple button inside computer:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -10,35 +10,60 @@ If user is correctly connected to one or more computer it will launch a VNC conn
|
|||||||
|
|
||||||
- Prerequisites
|
- Prerequisites
|
||||||
1) VNC Must be installed in the destination PC
|
1) VNC Must be installed in the destination PC
|
||||||
2) PC Name must me correct and resolved inside your DNS Server
|
2) Fusion inventory must be installed on server with GLPI
|
||||||
3) Add a script in your pc and add a node inside regedit
|
3) Agent must be installed on remote PC
|
||||||
|
4) Easy noVNC must be installed on server with GLPI
|
||||||
|
|
||||||
|
|
||||||
1) write a script (you will find inside resources) like this (let's assume in c:\startVNC.bat)
|
clone it and build binnary with make, edit Makefile in remotesupport plugin and build with make
|
||||||
> SET S=%1
|
|
||||||
>
|
|
||||||
> SET S=%S:~7,-2%
|
|
||||||
>
|
|
||||||
> call "C:\Program Files\TightVNC\tvnviewer.exe" %S%
|
|
||||||
>
|
|
||||||
> quit 0
|
|
||||||
|
|
||||||
2) Open regedit and add
|
Create systemd unit file:
|
||||||
Windows Registry Editor Version 5.00
|
|
||||||
```
|
```
|
||||||
[HKEY_CLASSES_ROOT\vnc]
|
[Unit]
|
||||||
@="URL:vnc Protocol"
|
Description=Easy NoVNC
|
||||||
"URL Protocol"=""
|
|
||||||
|
|
||||||
[HKEY_CLASSES_ROOT\vnc\shell]
|
[Service]
|
||||||
|
ExecStart=/usr/local/bin/easy-novnc -a :8888 -H -P
|
||||||
|
|
||||||
[HKEY_CLASSES_ROOT\vnc\shell\open]
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
[HKEY_CLASSES_ROOT\vnc\shell\open\command]
|
|
||||||
@="\"c:\\startVNC.bat\" \"%1\""
|
|
||||||
```
|
```
|
||||||
3) Download and install the plugin as usual
|
|
||||||
|
It will listen on 8888 port on local host.
|
||||||
|
|
||||||
|
|
||||||
TODO: a lot of documentation
|
Secure connection to server if you want, some ports are hardcoded in current status of plugin
|
||||||
|
```
|
||||||
|
<IfModule mod_ssl.c>
|
||||||
|
<VirtualHost *:443>
|
||||||
|
RewriteEngine On
|
||||||
|
ProxyPreserveHost On
|
||||||
|
ProxyRequests Off
|
||||||
|
|
||||||
|
# allow for upgrading to websockets
|
||||||
|
RewriteEngine On
|
||||||
|
RewriteCond %{HTTP:Upgrade} =websocket [NC]
|
||||||
|
RewriteRule /(.*) ws://localhost:8888/$1 [P,L]
|
||||||
|
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
|
||||||
|
RewriteRule /glpi/(.*) http://localhost/glpi/$1 [P,L]
|
||||||
|
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
|
||||||
|
RewriteRule /(.*) http://localhost:8888/$1 [P,L]
|
||||||
|
|
||||||
|
ProxyPass "/" "http://localhost:8888/"
|
||||||
|
ProxyPassReverse "/" "http://localhost:8888/"
|
||||||
|
|
||||||
|
ProxyPass "/glpi/" "http://localhost/glpi/"
|
||||||
|
ProxyPassReverse "/glpi/" "http://localhost/glpi/"
|
||||||
|
|
||||||
|
ProxyPass "/vnc" "ws://localhost:8888/vnc"
|
||||||
|
ProxyPassReverse "/vnc" "ws://localhost:8888/vnc
|
||||||
|
|
||||||
|
|
||||||
|
ServerName server.name.lan
|
||||||
|
|
||||||
|
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
|
||||||
|
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
|
||||||
|
|
||||||
|
</VirtualHost>
|
||||||
|
</IfModule>
|
||||||
|
```
|
||||||
|
|||||||
7
hook.php
7
hook.php
@@ -69,7 +69,8 @@ function plugin_remotesupport_install()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function plugin_remotesupport_uninstall(){
|
function plugin_remotesupport_uninstall()
|
||||||
|
{
|
||||||
global $DB;
|
global $DB;
|
||||||
|
|
||||||
Toolbox::logInFile("remotsupport", "Uninstalling plugin");
|
Toolbox::logInFile("remotsupport", "Uninstalling plugin");
|
||||||
@@ -90,7 +91,8 @@ function plugin_remotesupport_uninstall(){
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function plugin_remotesupport_postinit() {
|
function plugin_remotesupport_postinit()
|
||||||
|
{
|
||||||
global $CFG_GLPI, $DB;
|
global $CFG_GLPI, $DB;
|
||||||
|
|
||||||
if (isset($_GET['id']) && $_GET['id'] != 0 && isset($_GET['_itemtype']) && $_GET['_itemtype'] == "Ticket") {
|
if (isset($_GET['id']) && $_GET['id'] != 0 && isset($_GET['_itemtype']) && $_GET['_itemtype'] == "Ticket") {
|
||||||
@@ -121,4 +123,3 @@ function plugin_remotesupport_postinit() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
|
||||||
|
|||||||
@@ -1,50 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
include "../../../inc/includes.php";
|
||||||
------------------------------------------------------------------------
|
|
||||||
FusionInventory
|
|
||||||
Copyright (C) 2010-2011 by the FusionInventory Development Team.
|
|
||||||
|
|
||||||
http://www.fusioninventory.org/ http://forge.fusioninventory.org/
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
LICENSE
|
|
||||||
|
|
||||||
This file is part of FusionInventory project.
|
|
||||||
|
|
||||||
FusionInventory is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Affero General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
FusionInventory 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 Affero General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with FusionInventory. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
@package FusionInventory
|
|
||||||
@author Walid Nouh
|
|
||||||
@co-author
|
|
||||||
@copyright Copyright (c) 2010-2011 FusionInventory team
|
|
||||||
@license AGPL License 3.0 or (at your option) any later version
|
|
||||||
http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
|
||||||
@link http://www.fusioninventory.org/
|
|
||||||
@link http://forge.fusioninventory.org/projects/fusioninventory-for-glpi/
|
|
||||||
@since 2010
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
include ("../../../inc/includes.php");
|
|
||||||
|
|
||||||
declare (ticks = 1);
|
declare (ticks = 1);
|
||||||
|
|
||||||
|
|
||||||
global $DB, $agents;
|
global $DB, $agents;
|
||||||
|
|
||||||
$check_arr = [];
|
$check_arr = [];
|
||||||
@@ -65,11 +24,10 @@ global $DB,$agents;
|
|||||||
//print_r($agent->getAgentStatusURLs());
|
//print_r($agent->getAgentStatusURLs());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$descriptorspec = array(
|
$descriptorspec = array(
|
||||||
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
|
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
|
||||||
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
|
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
|
||||||
2 => array("file", "/tmp/error-output.txt", "a") // stderr is a file to write to
|
2 => array("file", "/tmp/error-output.txt", "a"), // stderr is a file to write to
|
||||||
);
|
);
|
||||||
|
|
||||||
$cwd = '/tmp';
|
$cwd = '/tmp';
|
||||||
@@ -104,8 +62,6 @@ $ret = $req->next();
|
|||||||
$states_ids[$ret['name']] = $ret['id'];
|
$states_ids[$ret['name']] = $ret['id'];
|
||||||
print_r($states_ids);
|
print_r($states_ids);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$DB->update("glpi_computers", [
|
$DB->update("glpi_computers", [
|
||||||
'states_id' => $states_ids["Offline"] ] ,
|
'states_id' => $states_ids["Offline"] ] ,
|
||||||
[ '1' => '1' ]
|
[ '1' => '1' ]
|
||||||
@@ -122,6 +78,5 @@ $DB->update("glpi_computers", [
|
|||||||
[ 'id' => $ids ]
|
[ 'id' => $ids ]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// print_r($a_computerextend);
|
// print_r($a_computerextend);
|
||||||
exit(0);
|
exit(0);
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ if (!defined('GLPI_ROOT')) {
|
|||||||
die("Sorry. You can't access directly to this file");
|
die("Sorry. You can't access directly to this file");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class PluginRemotesupportRemotesupport extends CommonDBTM
|
||||||
|
{
|
||||||
class PluginRemotesupportRemotesupport extends CommonDBTM {
|
public static function showInfo($item)
|
||||||
static function showInfo($item) {
|
{
|
||||||
|
|
||||||
$fi_path = Plugin::getWebDir('fusioninventory');
|
$fi_path = Plugin::getWebDir('fusioninventory');
|
||||||
|
|
||||||
@@ -40,7 +40,8 @@ class PluginRemotesupportRemotesupport extends CommonDBTM {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static function getStatesIds() {
|
public static function getStatesIds()
|
||||||
|
{
|
||||||
global $DB;
|
global $DB;
|
||||||
|
|
||||||
$states_ids = [];
|
$states_ids = [];
|
||||||
@@ -55,12 +56,12 @@ class PluginRemotesupportRemotesupport extends CommonDBTM {
|
|||||||
return $states_ids;
|
return $states_ids;
|
||||||
}
|
}
|
||||||
|
|
||||||
static function cronRemotesupport($task) {
|
public static function cronRemotesupport($task)
|
||||||
|
{
|
||||||
global $DB;
|
global $DB;
|
||||||
|
|
||||||
Toolbox::logInFile("remotsupport", "Starting search of agents\n");
|
Toolbox::logInFile("remotsupport", "Starting search of agents\n");
|
||||||
|
|
||||||
|
|
||||||
$check_arr = [];
|
$check_arr = [];
|
||||||
$comps = [];
|
$comps = [];
|
||||||
$pfInventoryComputerComputer = new PluginFusioninventoryInventoryComputerComputer();
|
$pfInventoryComputerComputer = new PluginFusioninventoryInventoryComputerComputer();
|
||||||
@@ -82,7 +83,7 @@ class PluginRemotesupportRemotesupport extends CommonDBTM {
|
|||||||
$descriptorspec = array(
|
$descriptorspec = array(
|
||||||
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
|
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
|
||||||
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
|
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
|
||||||
2 => array("file", "/tmp/error-output.txt", "a") // stderr is a file to write to
|
2 => array("file", "/tmp/error-output.txt", "a"), // stderr is a file to write to
|
||||||
);
|
);
|
||||||
|
|
||||||
$cwd = '/tmp';
|
$cwd = '/tmp';
|
||||||
@@ -116,7 +117,6 @@ class PluginRemotesupportRemotesupport extends CommonDBTM {
|
|||||||
['1' => '1']
|
['1' => '1']
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
foreach ($checked as $s) {
|
foreach ($checked as $s) {
|
||||||
|
|
||||||
$comp = new Computer();
|
$comp = new Computer();
|
||||||
@@ -133,7 +133,8 @@ class PluginRemotesupportRemotesupport extends CommonDBTM {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static function cronInfo($name) {
|
public static function cronInfo($name)
|
||||||
|
{
|
||||||
return [
|
return [
|
||||||
'description' => "Agent search remotesupport"];
|
'description' => "Agent search remotesupport"];
|
||||||
}
|
}
|
||||||
|
|||||||
18
setup.php
18
setup.php
@@ -33,26 +33,17 @@ function plugin_init_remotesupport()
|
|||||||
|
|
||||||
if (Plugin::isPluginActive('remotesupport')) {
|
if (Plugin::isPluginActive('remotesupport')) {
|
||||||
|
|
||||||
// $PLUGIN_HOOKS['add_javascript']['remotesupport'][] = 'js/support.js';
|
|
||||||
|
|
||||||
$PLUGIN_HOOKS['autoinventory_information']['remotesupport'] = array(
|
$PLUGIN_HOOKS['autoinventory_information']['remotesupport'] = array(
|
||||||
'Computer' => array('PluginRemotesupportRemotesupport', 'showInfo')
|
'Computer' => array('PluginRemotesupportRemotesupport', 'showInfo'),
|
||||||
);
|
);
|
||||||
|
|
||||||
CronTask::Register('PluginRemotesupportRemotesupport', 'remotesupport', 300,
|
CronTask::Register('PluginRemotesupportRemotesupport', 'remotesupport', 300,
|
||||||
['mode' => 2, 'allowmode' => 3, 'logs_lifetime' => 30,
|
['mode' => 2, 'allowmode' => 3, 'logs_lifetime' => 30,
|
||||||
'comment' => 'Remotesupport crontab search agents']);
|
'comment' => 'Remotesupport crontab search agents']);
|
||||||
|
|
||||||
|
|
||||||
// Add Config Page
|
|
||||||
// Plugin::registerClass('PluginRemotesupportConfig', ['addtabon' => 'Config']);
|
|
||||||
|
|
||||||
// $PLUGIN_HOOKS["menu_toadd"]['remotesupport'] = ['tools' => 'PluginRemotesupportMenu'];
|
|
||||||
// $PLUGIN_HOOKS['config_page']['remotesupport'] = 'front/index.php';
|
|
||||||
$PLUGIN_HOOKS['menu']['remotesupport'] = true;
|
$PLUGIN_HOOKS['menu']['remotesupport'] = true;
|
||||||
$PLUGIN_HOOKS['post_init']['remotesupport'] = 'plugin_remotesupport_postinit';
|
$PLUGIN_HOOKS['post_init']['remotesupport'] = 'plugin_remotesupport_postinit';
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,9 +58,8 @@ function plugin_version_remotesupport()
|
|||||||
'requirements' => [
|
'requirements' => [
|
||||||
'glpi' => [
|
'glpi' => [
|
||||||
'min' => PLUGIN_REMOTESUPPORT_MIN_GLPI,
|
'min' => PLUGIN_REMOTESUPPORT_MIN_GLPI,
|
||||||
'max' => PLUGIN_REMOTESUPPORT_MAX_GLPI
|
'max' => PLUGIN_REMOTESUPPORT_MAX_GLPI,
|
||||||
]
|
],
|
||||||
]
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user