Subject: Ctrl-Alt-T doesn't terminate connection in "local desktop" sessions

From: Alexey Nemov <[email-masked]>
Date: Thu, 26 Oct 2017 02:32:26 -0400

Package: x2goserver
Version: 4.0.1.20

Summary:
As stated in the wiki https://wiki.x2go.org/doku.php/wiki:advanced:nx-keyboard-shortcuts
The action "close_session" should terminate the session.
But, pressing Ctrl-Alt-t in a "local desktop" session does not "terminate" the session.

Steps to reproduce:
0. Create a new session profile in x2goclient with session type "Connect to local desktop";
1. Connect to remote computer using this session profile;
2. Press Ctrl-Alt-t at the client.

Expected behaviour:
The remote desktop window on the client should close, the connection should be terminated.

Actual behaviour:
The remote desktop window on the client does not close, the connection is not terminated.
The following log entries appears in the server's system journal:

```
Oct 26 13:50:39 localhost /usr/bin/x2gosuspend-session[31790]: session with ID alex-50-1508997021_stS1XSHADalexXSHADPP0_dp24 has been suspended successfully
Oct 26 13:50:45 localhost su[31900]: Successful su for alex by root
Oct 26 13:50:45 localhost su[31900]: + ??? root:alex
Oct 26 13:50:45 localhost su[31900]: pam_unix(su:session): session opened for user alex by (uid=0)
Oct 26 13:50:45 localhost systemd-logind[508]: New session c99 of user alex.
Oct 26 13:50:45 localhost systemd[1]: Started Session c99 of user alex.
Oct 26 13:50:46 localhost su[31900]: pam_unix(su:session): session closed for user alex
Oct 26 13:50:46 localhost su[31923]: Successful su for alex by root
Oct 26 13:50:46 localhost su[31923]: + ??? root:alex
Oct 26 13:50:46 localhost su[31923]: pam_unix(su:session): session opened for user alex by (uid=0)
Oct 26 13:50:46 localhost systemd-logind[508]: Removed session c99.
Oct 26 13:50:46 localhost systemd-logind[508]: New session c100 of user alex.
Oct 26 13:50:46 localhost systemd[1]: Started Session c100 of user alex.
Oct 26 13:50:49 localhost /usr/bin/x2gosuspend-session[32026]: session with ID alex-50-1508997021_stS1XSHADalexXSHADPP0_dp24 has been suspended successfully
Oct 26 13:50:50 localhost su[31923]: pam_unix(su:session): session closed for user alex
Oct 26 13:50:50 localhost systemd-logind[508]: Removed session c100.
Oct 26 13:50:53 localhost /usr/sbin/x2gocleansessions[12745]: alex-50-1508997021_stS1XSHADalexXSHADPP0_dp24: session status S desynchronized with current status (R) and session suspend already tried unsuccessfully
```

Other infomation:
0. Executing x2gosuspend-session <ID> on the server has the same effect as pressing C-A-t at the client.
1. Execuitng x2goterminate-session <ID> on the server does terminates the session and closes the client window.
3. Server-side /etc/x2go/keystrokes.cfg: http://paste.debian.net/plain/992795

-- System Information (server and client):
Debian Release: 9.2
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'stable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.9.0-4-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_US.utf8, LC_CTYPE=en_US.utf8 (charmap=UTF-8), LANGUAGE=en_US:en (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

---

From: Mihai Moldovan <[email-masked]>
Date: Thu, 26 Oct 2017 09:17:28 +0200

Control: retitle -1 Implement basic dialog handling in X2Go Server

> But, pressing Ctrl-Alt-t in a "local desktop" session does not "terminate" the session.

This is caused by the way we handle dialogs from nxagent. Currently, every
dialog (wrongly) spawns x2gosuspend-session for every message the agent wants to
show.

nxagent sends a KILL SESSION dialog when close_session is executed for
non-persistent sessions (like shadow sessions), but the default handler
x2gosuspend-session that is set via NX_CLIENT is x2gosuspend-session, which is
called and fails to suspend the session (since session suspension doesn't make
sense or works with non-persistent sessions.)

While the general goal should be to relay messages to the client side one day,
currently I want a small wrapper script on the server side which handles
server-side events in a better way.

Thus retitling this bug report.

Mihai

---

From: Ulrich Sibiller <[email-masked]>
Date: Thu, 26 Oct 2017 10:07:48 +0200

> Thus retitling this bug report.

I have not tested the following, but could it work?

1. download opennx client. It brings a matching nxclient binary IIRC
2. edit /usr/bin/x2gostartagent: find the line defining NX_CLIENT and
let the varible point to opennx nxclient.

If the nxclient is not working you have two further options:
1. use nxcl from the google neatx project
2. find a copy of the original nxclient 3.x package and use the
nxclient contained within like described above.

Uli

---

From: Mihai Moldovan <[email-masked]>
Date: Thu, 26 Oct 2017 10:13:31 +0200

> nxclient contained within like described above.
I don't think this will work.

The client must wrap around our X2Go scripts (which handle session management
via the database etc.), and we currently don't have something like this. I'll
have to implement it some day.

The workaround for the user currently is to use the buttons in X2Go Client,
which do what they are supposed to do.

Mihai

---

From: Mihai Moldovan <[email-masked]>
Date: Mon, 19 Apr 2021 20:28:43 +0200 (CEST)

tag #1228 pending
fixed #1228 4.1.0.4
thanks

Hi!

X2Go issue #1228 (src:x2goserver) reported by you has been
fixed in X2Go Git. You can see the changelog below, and you can
check the diff of the fix at:

    https://code.x2go.org/gitweb?p=x2goserver.git;a=commitdiff;h=51e1da1312245accbfcb6f2fa360c5bef3d99588

The issue will most likely be fixed in src:x2goserver (4.1.0.4).

light+love
X2Go Git Admin (on behalf of the sender of this mail)

---
commit 51e1da1312245accbfcb6f2fa360c5bef3d99588
Author: Ulrich Sibiller <[email-masked]>
Date:   Fri Mar 12 11:48:19 2021 +0100

    x2gostartsession: let x2godialog handle events via NX_CLIENT.
    
    Previously, any action that should have displayed a dialog did instead
    suspend x2goagent, since NX_CLIENT was set to x2gosuspend-session.
    
    Fixes: #1228.
    Fixes: #1540.

diff --git a/debian/changelog b/debian/changelog
index 5fde4817..102e58c8 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -458,6 +458,10 @@ x2goserver (4.1.0.4-0x2go1.2) UNRELEASED; urgency=medium
       Previous version was incomplete. Note that this will only work correctly
       once we actually update to 3.5.99.26 within X2Go, but it doesn't hurt to
       have the new definitions until then. Fixes: #1538.
+    - x2gostartsession: let x2godialog handle events via NX_CLIENT.
+      Previously, any action that should have displayed a dialog did instead
+      suspend x2goagent, since NX_CLIENT was set to x2gosuspend-session.
+      Fixes: #1228. Fixes: #1540.
 
  -- Mike Gabriel <[email-masked]>  Fri, 19 Jul 2019 20:55:11 +0200

---

From: Mihai Moldovan <[email-masked]>
Date: Mon, 19 Apr 2021 21:13:37 +0200

Control: notfixed -1 4.1.0.4

> thanks

Sorry for the noise, this should have not made it to the master branch yet.

It requires nx-libs to be updated first and a round of cleanup in the commits.

It'll eventually be pushed correctly, but not just now.

Mihai