mirror of
https://github.com/Ylianst/MeshCentral.git
synced 2025-04-15 08:36:05 -04:00
Added Intel AMT watchdog presence in MeshCmd
This commit is contained in:
parent
72c14d9d5f
commit
024023247d
Binary file not shown.
Binary file not shown.
@ -91,7 +91,7 @@ function run(argv) {
|
|||||||
//console.log('addedModules = ' + JSON.stringify(addedModules));
|
//console.log('addedModules = ' + JSON.stringify(addedModules));
|
||||||
var actionpath = 'meshaction.txt';
|
var actionpath = 'meshaction.txt';
|
||||||
if (args.actionfile != null) { actionpath = args.actionfile; }
|
if (args.actionfile != null) { actionpath = args.actionfile; }
|
||||||
var actions = ['HELP', 'ROUTE', 'MICROLMS', 'AMTLOADWEBAPP', 'AMTLOADSMALLWEBAPP', 'AMTLOADLARGEWEBAPP', 'AMTCLEARWEBAPP', 'AMTSTORAGESTATE', 'AMTINFO', 'AMTVERSIONS', 'AMTHASHES', 'AMTSAVESTATE', 'AMTSCRIPT', 'AMTUUID', 'AMTCCM', 'AMTDEACTIVATE', 'SMBIOS', 'RAWSMBIOS', 'MESHCOMMANDER', 'AMTAUDITLOG'];
|
var actions = ['HELP', 'ROUTE', 'MICROLMS', 'AMTLOADWEBAPP', 'AMTLOADSMALLWEBAPP', 'AMTLOADLARGEWEBAPP', 'AMTCLEARWEBAPP', 'AMTSTORAGESTATE', 'AMTINFO', 'AMTVERSIONS', 'AMTHASHES', 'AMTSAVESTATE', 'AMTSCRIPT', 'AMTUUID', 'AMTCCM', 'AMTDEACTIVATE', 'SMBIOS', 'RAWSMBIOS', 'MESHCOMMANDER', 'AMTAUDITLOG', 'AMTPRESENCE'];
|
||||||
|
|
||||||
// Load the action file
|
// Load the action file
|
||||||
var actionfile = null;
|
var actionfile = null;
|
||||||
@ -117,6 +117,7 @@ function run(argv) {
|
|||||||
if ((typeof args.output) == 'string') { settings.output = args.output; }
|
if ((typeof args.output) == 'string') { settings.output = args.output; }
|
||||||
if ((typeof args.debug) == 'string') { settings.debugLevel = parseInt(args.debug); }
|
if ((typeof args.debug) == 'string') { settings.debugLevel = parseInt(args.debug); }
|
||||||
if ((typeof args.script) == 'string') { settings.script = args.script; }
|
if ((typeof args.script) == 'string') { settings.script = args.script; }
|
||||||
|
if ((typeof args.agent) == 'string') { settings.agent = args.agent; }
|
||||||
if (args.noconsole) { settings.noconsole = true; }
|
if (args.noconsole) { settings.noconsole = true; }
|
||||||
if (args.nocommander) { settings.noconsole = true; }
|
if (args.nocommander) { settings.noconsole = true; }
|
||||||
if (args.lmsdebug) { settings.lmsdebug = true; }
|
if (args.lmsdebug) { settings.lmsdebug = true; }
|
||||||
@ -147,6 +148,7 @@ function run(argv) {
|
|||||||
console.log(' AmtClearWebApp - Clear everything from Intel AMT web storage.');
|
console.log(' AmtClearWebApp - Clear everything from Intel AMT web storage.');
|
||||||
console.log(' AmtStorageState - Show contents of the Intel AMT web storage.');
|
console.log(' AmtStorageState - Show contents of the Intel AMT web storage.');
|
||||||
console.log(' AmtSaveState - Save all Intel AMT WSMAN object to file.');
|
console.log(' AmtSaveState - Save all Intel AMT WSMAN object to file.');
|
||||||
|
console.log(' AmtPresence - Heartbeat a local Intel AMT watchdog agent.');
|
||||||
console.log(' AmtScript - Run .mescript on Intel AMT.');
|
console.log(' AmtScript - Run .mescript on Intel AMT.');
|
||||||
console.log('\r\nHelp on a specific action using:\r\n');
|
console.log('\r\nHelp on a specific action using:\r\n');
|
||||||
console.log(' meshcmd help [action]');
|
console.log(' meshcmd help [action]');
|
||||||
@ -221,6 +223,12 @@ function run(argv) {
|
|||||||
console.log(' --user [username] The Intel AMT login username, admin is default.');
|
console.log(' --user [username] The Intel AMT login username, admin is default.');
|
||||||
console.log(' --pass [password] The Intel AMT login password.');
|
console.log(' --pass [password] The Intel AMT login password.');
|
||||||
console.log(' --tls Specifies that TLS must be used.');
|
console.log(' --tls Specifies that TLS must be used.');
|
||||||
|
} else if (action == 'amtpresence') {
|
||||||
|
console.log('AmtPresence will heartbeat a local Intel AMT watchdog agent. Example usage:\r\n\r\n meshcmd amtpresence --agent B4B6A24C-255E-A75C-F5E8-B00B4D946AA7');
|
||||||
|
console.log('\r\nPossible arguments:\r\n');
|
||||||
|
console.log(' --user [username] The Intel AMT login username, admin is default.');
|
||||||
|
console.log(' --pass [password] The Intel AMT login password.');
|
||||||
|
console.log(' --agent [uuid] The unique identifier of the watchdog agent.');
|
||||||
} else if (action == 'amtscript') {
|
} else if (action == 'amtscript') {
|
||||||
console.log('AmtScript will run a .mescript file on the local or remote Intel AMT. Script files can be built using the MeshCommander script editor and be used to setup or perform actions on Intel AMT. Example usage:\r\n\r\n meshcmd amtscript --script myscript.mescript --host 1.2.3.4 --user admin --pass mypassword --tls');
|
console.log('AmtScript will run a .mescript file on the local or remote Intel AMT. Script files can be built using the MeshCommander script editor and be used to setup or perform actions on Intel AMT. Example usage:\r\n\r\n meshcmd amtscript --script myscript.mescript --host 1.2.3.4 --user admin --pass mypassword --tls');
|
||||||
console.log('\r\nPossible arguments:\r\n');
|
console.log('\r\nPossible arguments:\r\n');
|
||||||
@ -373,6 +381,12 @@ function run(argv) {
|
|||||||
startLms(function (state) {
|
startLms(function (state) {
|
||||||
console.log(['MicroLMS did not start. Must run as administrator or LMS already active.', 'MicroLMS started.', 'MicroLMS started, MeshCommander on HTTP/16994.', 'MEI error'][state]); console.log('Press ctrl-c to exit.'); if (state == 0) { exit(0); }
|
console.log(['MicroLMS did not start. Must run as administrator or LMS already active.', 'MicroLMS started.', 'MicroLMS started, MeshCommander on HTTP/16994.', 'MEI error'][state]); console.log('Press ctrl-c to exit.'); if (state == 0) { exit(0); }
|
||||||
});
|
});
|
||||||
|
} else if (settings.action == 'amtpresence') {
|
||||||
|
// Heartbeat a Intel AMT watchdog
|
||||||
|
if ((settings.password == null) || (typeof settings.password != 'string') || (settings.password == '')) { console.log('No or invalid \"password\" specified, use --password [password].'); exit(1); return; }
|
||||||
|
if ((settings.username == null) || (typeof settings.username != 'string') || (settings.username == '')) { settings.username = 'admin'; }
|
||||||
|
if ((settings.agent == null) || (typeof settings.agent != 'string') || (settings.agent == '')) { console.log('No or invalid \"agent\" specified, use --agent [agent].'); exit(1); return; }
|
||||||
|
performAmtAgentPresence();
|
||||||
} else if (settings.action == 'amtscript') {
|
} else if (settings.action == 'amtscript') {
|
||||||
// Start running a MEScript
|
// Start running a MEScript
|
||||||
if ((settings.password == null) || (typeof settings.password != 'string') || (settings.password == '')) { console.log('No or invalid \"password\" specified, use --password [password].'); exit(1); return; }
|
if ((settings.password == null) || (typeof settings.password != 'string') || (settings.password == '')) { console.log('No or invalid \"password\" specified, use --password [password].'); exit(1); return; }
|
||||||
@ -414,6 +428,84 @@ function run(argv) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Intel AMT Agent Presence
|
||||||
|
//
|
||||||
|
|
||||||
|
function performAmtAgentPresence() { startLms(function () { tempWatchdogTimer = setTimeout(performAmtAgentPresenceRegister, 3000); }); }
|
||||||
|
|
||||||
|
function performAmtAgentPresenceRegister() {
|
||||||
|
// Setup the Intel AMT WSMAN stack
|
||||||
|
tempWatchdogTimer = null;
|
||||||
|
var transport = require('amt-wsman-duk');
|
||||||
|
var wsman = require('amt-wsman');
|
||||||
|
var amt = require('amt');
|
||||||
|
wsstack = new wsman(transport, '127.0.0.1', settings.tls ? 16993 : 16992, settings.username, settings.password, settings.tls);
|
||||||
|
amtstack = new amt(wsstack);
|
||||||
|
|
||||||
|
// Register the watchdog
|
||||||
|
watchdog = { DeviceID: Buffer.from(guidToStr(settings.agent.split('-').join('')).split('-').join(''), 'hex').toString('base64'), Retry: 0 };
|
||||||
|
amtstack.AMT_AgentPresenceWatchdog_RegisterAgent(performAmtAgentPresenceRegisterRetry, watchdog, watchdog.Seq, { 'DeviceID': watchdog.DeviceID });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called after the agent is registered
|
||||||
|
function performAmtAgentPresenceRegisterRetry(stack, name, response, status, watchdog) {
|
||||||
|
if ((status == 200) && (response.Body.SessionSequenceNumber) && (response.Body.TimeoutInterval)) {
|
||||||
|
console.log('Asserting presence of the watchdog...');
|
||||||
|
watchdog.Seq = response.Body.SessionSequenceNumber;
|
||||||
|
watchdog.Interval = response.Body.TimeoutInterval * 800;
|
||||||
|
watchdog.Retry = 0;
|
||||||
|
tempWatchdogTimer = setTimeout(performAmtAgentPresenceAssert, watchdog.Interval);
|
||||||
|
} else {
|
||||||
|
debug(1, 'Failed to register, status = ' + status);
|
||||||
|
watchdog.Retry++;
|
||||||
|
if (watchdog.Retry < 5) {
|
||||||
|
tempWatchdogTimer = setTimeout(function () { amtstack.AMT_AgentPresenceWatchdog_RegisterAgent(performAmtAgentPresenceRegisterRetry, watchdog, watchdog.Seq, { 'DeviceID': watchdog.DeviceID }); }, 1000);
|
||||||
|
} else {
|
||||||
|
console.log('Failed to register this watchdog.');
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start a new agent assert
|
||||||
|
function performAmtAgentPresenceAssert() {
|
||||||
|
watchdog.Seq++;
|
||||||
|
amtstack.AMT_AgentPresenceWatchdog_AssertPresence(watchdog.Seq, performAmtAgentPresenceAssertRetry, watchdog, 0, { 'DeviceID': watchdog.DeviceID });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called after the agent is asserted
|
||||||
|
function performAmtAgentPresenceAssertRetry(stack, name, response, status, watchdog) {
|
||||||
|
if (status == 200) {
|
||||||
|
debug(1, 'Succesful assert, sequence = ' + watchdog.Seq);
|
||||||
|
watchdog.Retry = 0;
|
||||||
|
tempWatchdogTimer = setTimeout(performAmtAgentPresenceAssert, watchdog.Interval);
|
||||||
|
} else {
|
||||||
|
debug(1, 'Failed to assert, status = ' + status);
|
||||||
|
watchdog.Retry++;
|
||||||
|
if (watchdog.Retry < 5) {
|
||||||
|
amtstack.AMT_AgentPresenceWatchdog_AssertPresence(watchdog.Seq, performAmtAgentPresenceAssertRetry, watchdog, 0, { 'DeviceID': watchdog.DeviceID });
|
||||||
|
} else {
|
||||||
|
console.log('Failed to assert presence on this watchdog.');
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function performAmtAgentPresenceEx5(stack, name, response, status, watchdog) {
|
||||||
|
console.log('b', status, watchdog);
|
||||||
|
if (status == 200) {
|
||||||
|
watchdog.Retry = 0;
|
||||||
|
} else {
|
||||||
|
watchdog.Retry++;
|
||||||
|
if (watchdog.Retry < 5) {
|
||||||
|
amtstack.AMT_AgentPresenceWatchdog_AssertPresence(watchdog.Seq, performAmtAgentPresenceEx4, watchdog, 0, { 'DeviceID': watchdog.DeviceID });
|
||||||
|
} else {
|
||||||
|
console.log('Failed to assert presence on this watchdog.');
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Intel AMT Audit Log
|
// Intel AMT Audit Log
|
||||||
@ -868,9 +960,10 @@ function setupMeiOsAdmin(func, state) {
|
|||||||
//var AllWsman = "CIM_SoftwareIdentity,IPS_SecIOService,IPS_ScreenSettingData,IPS_ProvisioningRecordLog,IPS_HostBasedSetupService,IPS_HostIPSettings,IPS_IPv6PortSettings".split(',');
|
//var AllWsman = "CIM_SoftwareIdentity,IPS_SecIOService,IPS_ScreenSettingData,IPS_ProvisioningRecordLog,IPS_HostBasedSetupService,IPS_HostIPSettings,IPS_IPv6PortSettings".split(',');
|
||||||
//osamtstack.BatchEnum(null, AllWsman, startLmsWsmanResponse, null, true);
|
//osamtstack.BatchEnum(null, AllWsman, startLmsWsmanResponse, null, true);
|
||||||
|
|
||||||
tempTimer = setInterval(function () { kvmGetData(true); }, 2000);
|
//*************************************
|
||||||
kvmGetData(false);
|
//tempTimer = setInterval(function () { kvmGetData(true); }, 2000);
|
||||||
kvmSetData(JSON.stringify({ action: 'restart', ver: 1 }));
|
//kvmGetData(false);
|
||||||
|
//kvmSetData(JSON.stringify({ action: 'restart', ver: 1 }));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -199,9 +199,12 @@ function AmtStackCreateService(wsmanStack) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Auto generated methods
|
// Auto generated methods
|
||||||
obj.AMT_AgentPresenceWatchdog_RegisterAgent = function (callback_func) { obj.Exec("AMT_AgentPresenceWatchdog", "RegisterAgent", {}, callback_func); }
|
obj.AMT_AgentPresenceWatchdog_RegisterAgent = function (callback_func, tag, pri, selectors) { obj.Exec("AMT_AgentPresenceWatchdog", "RegisterAgent", {}, callback_func, tag, pri, selectors); }
|
||||||
obj.AMT_AgentPresenceWatchdog_AssertPresence = function (SequenceNumber, callback_func) { obj.Exec("AMT_AgentPresenceWatchdog", "AssertPresence", { "SequenceNumber": SequenceNumber }, callback_func); }
|
obj.AMT_AgentPresenceWatchdog_AssertPresence = function (SequenceNumber, callback_func, tag, pri, selectors) { obj.Exec("AMT_AgentPresenceWatchdog", "AssertPresence", { "SequenceNumber": SequenceNumber }, callback_func, tag, pri, selectors); }
|
||||||
obj.AMT_AgentPresenceWatchdog_AssertShutdown = function (SequenceNumber, callback_func) { obj.Exec("AMT_AgentPresenceWatchdog", "AssertShutdown", { "SequenceNumber": SequenceNumber }, callback_func); }
|
obj.AMT_AgentPresenceWatchdog_AssertShutdown = function (SequenceNumber, callback_func, tag, pri, selectors) { obj.Exec("AMT_AgentPresenceWatchdog", "AssertShutdown", { "SequenceNumber": SequenceNumber }, callback_func, tag, pri, selectors); }
|
||||||
|
//obj.AMT_AgentPresenceWatchdog_RegisterAgent = function (callback_func) { obj.Exec("AMT_AgentPresenceWatchdog", "RegisterAgent", {}, callback_func); }
|
||||||
|
//obj.AMT_AgentPresenceWatchdog_AssertPresence = function (SequenceNumber, callback_func) { obj.Exec("AMT_AgentPresenceWatchdog", "AssertPresence", { "SequenceNumber": SequenceNumber }, callback_func); }
|
||||||
|
//obj.AMT_AgentPresenceWatchdog_AssertShutdown = function (SequenceNumber, callback_func) { obj.Exec("AMT_AgentPresenceWatchdog", "AssertShutdown", { "SequenceNumber": SequenceNumber }, callback_func); }
|
||||||
obj.AMT_AgentPresenceWatchdog_AddAction = function (OldState, NewState, EventOnTransition, ActionSd, ActionEac, callback_func, tag, pri, selectors) { obj.Exec("AMT_AgentPresenceWatchdog", "AddAction", { "OldState": OldState, "NewState": NewState, "EventOnTransition": EventOnTransition, "ActionSd": ActionSd, "ActionEac": ActionEac }, callback_func, tag, pri, selectors); }
|
obj.AMT_AgentPresenceWatchdog_AddAction = function (OldState, NewState, EventOnTransition, ActionSd, ActionEac, callback_func, tag, pri, selectors) { obj.Exec("AMT_AgentPresenceWatchdog", "AddAction", { "OldState": OldState, "NewState": NewState, "EventOnTransition": EventOnTransition, "ActionSd": ActionSd, "ActionEac": ActionEac }, callback_func, tag, pri, selectors); }
|
||||||
obj.AMT_AgentPresenceWatchdog_DeleteAllActions = function (callback_func, tag, pri, selectors) { obj.Exec("AMT_AgentPresenceWatchdog", "DeleteAllActions", {}, callback_func, tag, pri, selectors); }
|
obj.AMT_AgentPresenceWatchdog_DeleteAllActions = function (callback_func, tag, pri, selectors) { obj.Exec("AMT_AgentPresenceWatchdog", "DeleteAllActions", {}, callback_func, tag, pri, selectors); }
|
||||||
obj.AMT_AgentPresenceWatchdogAction_GetActionEac = function (callback_func) { obj.Exec("AMT_AgentPresenceWatchdogAction", "GetActionEac", {}, callback_func); }
|
obj.AMT_AgentPresenceWatchdogAction_GetActionEac = function (callback_func) { obj.Exec("AMT_AgentPresenceWatchdogAction", "GetActionEac", {}, callback_func); }
|
||||||
|
@ -216,6 +216,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) {
|
|||||||
passwordLen = common.ReadInt(data, 14 + usernameLen + serviceNameLen + methodNameLen);
|
passwordLen = common.ReadInt(data, 14 + usernameLen + serviceNameLen + methodNameLen);
|
||||||
password = data.substring(18 + usernameLen + serviceNameLen + methodNameLen, 18 + usernameLen + serviceNameLen + methodNameLen + passwordLen);
|
password = data.substring(18 + usernameLen + serviceNameLen + methodNameLen, 18 + usernameLen + serviceNameLen + methodNameLen + passwordLen);
|
||||||
}
|
}
|
||||||
|
//console.log('MPS:USERAUTH_REQUEST user=' + username + ', service=' + serviceName + ', method=' + methodName + ', password=' + password);
|
||||||
Debug(3, 'MPS:USERAUTH_REQUEST user=' + username + ', service=' + serviceName + ', method=' + methodName + ', password=' + password);
|
Debug(3, 'MPS:USERAUTH_REQUEST user=' + username + ', service=' + serviceName + ', method=' + methodName + ', password=' + password);
|
||||||
|
|
||||||
// Check the CIRA password
|
// Check the CIRA password
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "meshcentral",
|
"name": "meshcentral",
|
||||||
"version": "0.1.6-y",
|
"version": "0.1.7-a",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"Remote Management",
|
"Remote Management",
|
||||||
"Intel AMT",
|
"Intel AMT",
|
||||||
|
@ -272,7 +272,9 @@ var CreateAgentRemoteDesktop = function (canvasid, scrolldiv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
obj.SendKeyMsgKC = function (action, kc) {
|
obj.SendKeyMsgKC = function (action, kc) {
|
||||||
if (obj.State == 3) obj.send(String.fromCharCode(0x00, obj.InputType.KEY, 0x00, 0x06, (action - 1), kc));
|
if (obj.State != 3) return;
|
||||||
|
if (typeof action == 'object') { for (var i in action) { obj.SendKeyMsgKC(action[i][0], action[i][1]); } }
|
||||||
|
else { obj.send(String.fromCharCode(0x00, obj.InputType.KEY, 0x00, 0x06, (action - 1), kc)); }
|
||||||
}
|
}
|
||||||
|
|
||||||
obj.sendcad = function() { obj.SendCtrlAltDelMsg(); }
|
obj.sendcad = function() { obj.SendCtrlAltDelMsg(); }
|
||||||
|
@ -550,17 +550,13 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) {
|
|||||||
return obj.haltEvent(e);
|
return obj.haltEvent(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
obj.sendkey = function (k, d) { obj.send(String.fromCharCode(4, d, 0, 0) + IntToStr(k)); }
|
obj.sendkey = function (k, d) {
|
||||||
|
if (typeof k == 'object') { for (var i in k) { obj.sendkey(k[i][0], k[i][1]); } }
|
||||||
|
else { obj.send(String.fromCharCode(4, d, 0, 0) + IntToStr(k)); }
|
||||||
|
}
|
||||||
|
|
||||||
obj.SendCtrlAltDelMsg = function () { obj.sendcad(); }
|
obj.SendCtrlAltDelMsg = function () { obj.sendcad(); }
|
||||||
obj.sendcad = function () {
|
obj.sendcad = function () { obj.sendkey([[0xFFE3, 1], [0xFFE9, 1], [0xFFFF, 1], [0xFFFF, 0], [0xFFE9, 0], [0xFFE3, 0]]); } // Control down, Alt down, Delete down, Delete up , Alt up , Control up
|
||||||
obj.sendkey(0xFFE3, 1); // Control
|
|
||||||
obj.sendkey(0xFFE9, 1); // Alt
|
|
||||||
obj.sendkey(0xFFFF, 1); // Delete
|
|
||||||
obj.sendkey(0xFFFF, 0); // Delete
|
|
||||||
obj.sendkey(0xFFE9, 0); // Alt
|
|
||||||
obj.sendkey(0xFFE3, 0); // Control
|
|
||||||
}
|
|
||||||
|
|
||||||
var _MouseInputGrab = false;
|
var _MouseInputGrab = false;
|
||||||
var _KeyInputGrab = false;
|
var _KeyInputGrab = false;
|
||||||
|
@ -389,9 +389,16 @@
|
|||||||
<input id=DeskToolsButton type=button value=Tools title="Toggle tools view" onkeypress="return false" onkeydown="return false" onclick="toggleDeskTools()">
|
<input id=DeskToolsButton type=button value=Tools title="Toggle tools view" onkeypress="return false" onkeydown="return false" onclick="toggleDeskTools()">
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
|
<select style="margin-left:6px" id="deskkeys">
|
||||||
<input id="DeskCAD" type="button" value="Ctrl-Alt-Del" onkeypress="return false" onkeydown="return false" onclick="sendCAD()">
|
<option value=0>Win+Down</option>
|
||||||
<span title="Toggle mouse and keyboard input"><input id="DeskControl" type="checkbox" onkeypress="return false" onkeydown="return false" onclick="toggleKvmControl()">Input</span>
|
<option value=1>Win+Up</option>
|
||||||
|
<option value=2>Win+L</option>
|
||||||
|
<option value=3>Win+M</option>
|
||||||
|
<option value=4>Shift+Win+M</option>
|
||||||
|
</select>
|
||||||
|
<input id="DeskWD" type=button value="Send" onkeypress="return false" onkeydown="return false" onclick="deskSendKeys()">
|
||||||
|
<input id="DeskCAD" style="margin-left:6px" type="button" value="Ctrl-Alt-Del" onkeypress="return false" onkeydown="return false" onclick="sendCAD()">
|
||||||
|
<span style="margin-left:6px" title="Toggle mouse and keyboard input"><input id="DeskControl" type="checkbox" onkeypress="return false" onkeydown="return false" onclick="toggleKvmControl()">Input</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -1094,7 +1101,8 @@
|
|||||||
if (message.current == message.latest) {
|
if (message.current == message.latest) {
|
||||||
setDialogMode(2, "MeshCentral Version", 1, null, x);
|
setDialogMode(2, "MeshCentral Version", 1, null, x);
|
||||||
} else {
|
} else {
|
||||||
setDialogMode(2, "MeshCentral Version", 3, server_showVersionDlgEx, x + '<br />Select OK to start server self-update.');
|
setDialogMode(2, "MeshCentral Version", 3, server_showVersionDlgEx, x + '<br /><input id=d2updateCheck type=checkbox onclick=server_showVersionDlgUpdate() /> Check and click OK to start server self-update.');
|
||||||
|
server_showVersionDlgUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -3318,6 +3326,10 @@
|
|||||||
QE('deskSaveBtn', deskState == 3);
|
QE('deskSaveBtn', deskState == 3);
|
||||||
QV('deskFocusBtn', (desktop != null) && (desktop.contype == 2) && (deskState != 0) && (desktopsettings.showfocus));
|
QV('deskFocusBtn', (desktop != null) && (desktop.contype == 2) && (deskState != 0) && (desktopsettings.showfocus));
|
||||||
QE('DeskCAD', deskState == 3);
|
QE('DeskCAD', deskState == 3);
|
||||||
|
QE('DeskWD', deskState == 3);
|
||||||
|
QE('deskkeys', deskState == 3);
|
||||||
|
QV('DeskWD', (currentNode.agent) && (currentNode.agent.id < 5));
|
||||||
|
QV('deskkeys', (currentNode.agent) && (currentNode.agent.id < 5));
|
||||||
QE('DeskToolsButton', online);
|
QE('DeskToolsButton', online);
|
||||||
QV('DeskToastButton', (currentNode.agent) && (currentNode.agent.id < 5));
|
QV('DeskToastButton', (currentNode.agent) && (currentNode.agent.id < 5));
|
||||||
QE('DeskToastButton', online);
|
QE('DeskToastButton', online);
|
||||||
@ -3493,6 +3505,43 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remote desktop special key combos for Windows
|
||||||
|
function deskSendKeys() {
|
||||||
|
if (xxdialogMode || desktop == null || desktop.State != 3) return;
|
||||||
|
var ks = Q('deskkeys').value;
|
||||||
|
if (ks == 0) { // WIN+Down arrow
|
||||||
|
if (desktop.contype == 2) {
|
||||||
|
desktop.m.sendkey([[0xffe7,1],[0xff54,1],[0xff54,0],[0xffe7,0]]); // Intel AMT: Meta-left down, Down arrow press, Down arrow release, Meta-left release
|
||||||
|
} else {
|
||||||
|
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,0x5B],[desktop.m.KeyAction.DOWN,40],[desktop.m.KeyAction.UP,40],[desktop.m.KeyAction.EXUP,0x5B]]); // Agent: L-Winkey press, Down arrow press, Down arrow release, L-Winkey release
|
||||||
|
}
|
||||||
|
} else if (ks == 1) { // WIN+Up arrow
|
||||||
|
if (desktop.contype == 2) {
|
||||||
|
desktop.m.sendkey([[0xffe7,1],[0xff52,1],[0xff52,0],[0xffe7,0]]); // Intel AMT: Meta-left down, Up arrow press, Up arrow release, Meta-left release
|
||||||
|
} else {
|
||||||
|
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,0x5B],[desktop.m.KeyAction.DOWN,38],[desktop.m.KeyAction.UP,38],[desktop.m.KeyAction.EXUP,0x5B]]); // MeshAgent: L-Winkey press, Up arrow press, Up arrow release, L-Winkey release
|
||||||
|
}
|
||||||
|
} else if (ks == 2) { // WIN+L arrow
|
||||||
|
if (desktop.contype == 2) {
|
||||||
|
desktop.m.sendkey([[0xffe7,1],[0x6c,1],[0x6c,0],[0xffe7,0]]); // Intel AMT: Meta-left down, 'l' press, 'l' release, Meta-left release
|
||||||
|
} else {
|
||||||
|
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,0x5B],[desktop.m.KeyAction.DOWN,76],[desktop.m.KeyAction.UP,76],[desktop.m.KeyAction.EXUP,0x5B]]); // MeshAgent: L-Winkey press, 'L' press, 'L' release, L-Winkey release
|
||||||
|
}
|
||||||
|
} else if (ks == 3) { // WIN+M arrow
|
||||||
|
if (desktop.contype == 2) {
|
||||||
|
desktop.m.sendkey([[0xffe7,1],[0x6d,1],[0x6d,0],[0xffe7,0]]); // Intel AMT: Meta-left down, 'm' press, 'm' release, Meta-left release
|
||||||
|
} else {
|
||||||
|
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,0x5B],[desktop.m.KeyAction.DOWN,77],[desktop.m.KeyAction.UP,77],[desktop.m.KeyAction.EXUP,0x5B]]); // MeshAgent: L-Winkey press, 'M' press, 'M' release, L-Winkey release
|
||||||
|
}
|
||||||
|
} else if (ks == 4) { // Shift+WIN+M arrow
|
||||||
|
if (desktop.contype == 2) {
|
||||||
|
desktop.m.sendkey([[0xffe1,1],[0xffe7,1],[0x6d,1],[0x6d,0],[0xffe7,0],[0xffe1,0]]); // Intel AMT: Shift-left down, Meta-left down, 'm' press, 'm' release, Meta-left release, Shift-left release
|
||||||
|
} else {
|
||||||
|
desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.DOWN,16],[desktop.m.KeyAction.EXDOWN,0x5B],[desktop.m.KeyAction.DOWN,77],[desktop.m.KeyAction.UP,77],[desktop.m.KeyAction.EXUP,0x5B],[desktop.m.KeyAction.UP, 16]]); // MeshAgent: L-shift press, L-Winkey press, 'M' press, 'M' release, L-Winkey release, L-shift release
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Send CTRL-ALT-DEL
|
// Send CTRL-ALT-DEL
|
||||||
function sendCAD() {
|
function sendCAD() {
|
||||||
if (xxdialogMode || desktop == null || desktop.State != 3) return;
|
if (xxdialogMode || desktop == null || desktop.State != 3) return;
|
||||||
@ -4538,9 +4587,8 @@
|
|||||||
meshserver.send({ action: 'serverversion' });
|
meshserver.send({ action: 'serverversion' });
|
||||||
}
|
}
|
||||||
|
|
||||||
function server_showVersionDlgEx() {
|
function server_showVersionDlgUpdate() { QE('idx_dlgOkButton', Q('d2updateCheck').checked); }
|
||||||
meshserver.send({ action: 'serverupdate' });
|
function server_showVersionDlgEx() { meshserver.send({ action: 'serverupdate' }); }
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// MY MESHS
|
// MY MESHS
|
||||||
|
Loading…
x
Reference in New Issue
Block a user