You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@guacamole.apache.org by "Kalki Nethaji (JIRA)" <ji...@apache.org> on 2018/04/20 12:46:00 UTC

[jira] [Created] (GUACAMOLE-552) Allow Guacamole client to directly paste the clipboard data to the remote machine

Kalki Nethaji created GUACAMOLE-552:
---------------------------------------

             Summary: Allow Guacamole client to directly paste the clipboard data to the remote machine
                 Key: GUACAMOLE-552
                 URL: https://issues.apache.org/jira/browse/GUACAMOLE-552
             Project: Guacamole
          Issue Type: Improvement
          Components: guacamole-client
    Affects Versions: 0.9.14
            Reporter: Kalki Nethaji


Now we need to open the sidebar and paste our clipboard content and then close the sidebar and then we need to do paste command to paste the clipboard data in the remote machine.

Instead of these four steps, A simple CTRL-V to paste the local machines clipboard data on the server will be really great.

 

I've made upto this part, but facing an unknown issue.

I need to open the sidebar initially and do a CTRL-V before using CTRL-V directly on the terminal. Else the paste ClipboardEvent is not generated by the browser.

 

In "guacamole-client\guacamole\src\main\webapp\app\client\controllers\clientController.js":
{code:java}
var PASTE_KEYS   = angular.extend({}, CTRL_KEYS, {0x0076: true});
function checkPaste() {
    for(var keysym in keysCurrentlyPressed) {
        if(!PASTE_KEYS[keysym]) {
            return false;
        }
    }
    return true;
}

document.addEventListener('paste', function (event) {
    console.log('Pasted text event: ', event.clipboardData.getData('text'));
    $scope.client.clipboardData.data = event.clipboardData.getData('text');
    $scope.$broadcast('guacClipboard', $scope.client.clipboardData);
    $scope.client.clientProperties.keyboardEnabled = true;
    $scope.client.client.sendKeyEvent(1, 0xFFE3);
    $scope.client.client.sendKeyEvent(1, 0xFFE1);
    $scope.client.client.sendKeyEvent(1, 0x0056);
    $scope.client.client.sendKeyEvent(0, 0x0056);
    $scope.client.client.sendKeyEvent(0, 0xFFE1);
    $scope.client.client.sendKeyEvent(0, 0xFFE3);
});

// Track pressed keys, opening the Guacamole menu after Ctrl+Alt+Shift
$scope.$on('guacKeydown', function keydownListener(event, keysym, keyboard) {

    // Record key as pressed
    keysCurrentlyPressed[keysym] = true;   
    
    /* 
     * If only menu keys are pressed, and we have one keysym from each group,
     * and one of the keys is being released, show the menu. 
     */
    if(checkMenuModeActive()) {
        var currentKeysPressedKeys = Object.keys(keysCurrentlyPressed);
        
        // Check that there is a key pressed for each of the required key classes
        if(!_.isEmpty(_.pick(SHIFT_KEYS, currentKeysPressedKeys)) &&
           !_.isEmpty(_.pick(ALT_KEYS, currentKeysPressedKeys)) &&
           !_.isEmpty(_.pick(CTRL_KEYS, currentKeysPressedKeys))
        ) {
    
            // Don't send this key event through to the client
            event.preventDefault();
            
            // Reset the keys pressed
            keysCurrentlyPressed = {};
            keyboard.reset();
            
            // Toggle the menu
            $scope.$apply(function() {
                $scope.menu.shown = !$scope.menu.shown;
            });
        }
    } else if (checkPaste()) {
        $scope.client.clientProperties.keyboardEnabled = false;
        console.log('catched by paste trigger & setting keyboardEnabled to false');
    }

});

});{code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)