[pve-devel] [PATCH pve-xtermjs 1/1] xtermjs: add support for remote node shells via PDM

Dominik Csapak d.csapak at proxmox.com
Thu Nov 6 13:39:39 CET 2025


some nits inline, no hard feelings for any of them

On 11/5/25 3:13 PM, Fabian Grünbichler wrote:
> if a remote name and type is specified, adapt the API endpoint base url
> accordingly, and do not send the authentication line, since there is no PDM
> termproxy that handles it. instead, PDM will generate and inject the
> authentication line when proxying the websocket connection to the termproxy on
> the remote.
> 
> Signed-off-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
> ---
>   xterm.js/src/main.js | 13 +++++++++++--
>   1 file changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/xterm.js/src/main.js b/xterm.js/src/main.js
> index 902a1c3..897540f 100644
> --- a/xterm.js/src/main.js
> +++ b/xterm.js/src/main.js
> @@ -19,6 +19,8 @@ var term,
>       state = states.start,
>       starttime = new Date();
>   
> +var remote = getQueryParameter('remote');
> +var remote_type = getQueryParameter('remote-type');

nit: we probably should const/let here instead of var
(does not make a difference but it's a nicer behavior
in js)

>   var type = getQueryParameter('console');
>   var vmid = getQueryParameter('vmid');
>   var vmname = getQueryParameter('vmname');
> @@ -175,7 +177,11 @@ function createTerminal() {
>       protocol = (location.protocol === 'https:') ? 'wss://' : 'ws://';
>   
>       var params = {};
> -    var url = '/nodes/' + nodename;
> +    var url = '';
> +    if (remote !== undefined && remote !== "") {

nit: this would probably be more correct and shorter by doing

if (remote) {

(e.g. remote === null would be valid here)

if we *really* want to be safe about the contents it should be

if (typeof remote === 'string' && remote)

> +        url += '/' + remote_type + '/remotes/' + remote;

nit: i'd prefer interpolated strings in new code

url += `/${remote_type}/remotes/${remote}`;

> +    }
> +    url += '/nodes/' + nodename;

same here

>       switch (type) {
>   	case 'kvm':
>   	    url += '/qemu/' + vmid;
> @@ -252,7 +258,10 @@ function runTerminal() {
>   	}, 250);
>       });
>   
> -    socket.send(PVE.UserName + ':' + ticket + "\n");
> +    // for remote sessions, this line needs to be sent by PDM
> +    if (remote === undefined || remote === "") {

same hint as above should probably be

if (!remote) {

or

if (typeof remote !== 'string' || !remote) {

> +        socket.send(PVE.UserName + ':' + ticket + "\n");
> +    }
>   }
>   
>   function getLxcStatus(callback) {





More information about the pve-devel mailing list