Release of nx-libs 3.5.99.22 (Call for Testing: Keyboard auto-grab Support)

Long time not blogged about, however, there is a new release of nx-libs: nx-libs 3.5.99.22.

What is nx-libs?

The nx-libs team maintains a software originally developed by NoMachine under the name nx-X11 (version 3) or shorter: NXv3. For years now, a small team of volunteers is continually improving, fixing and maintaining the code base (after some major and radical cleanups) of NXv3. NXv3 aka x2goagent has been the only graphical backend in X2Go [0], a remote desktop framework for Linux terminal servers, over the past years.

(Spoiler: in the near future, there will be two graphical backends for X2Go sessions, if you got curious... stay tuned...).

Credits

You may have noticed, that I skipped announcing several releases of nx-libs. All interim releases should have had their own announcements, indeed, as each of them deserved it. So I am sorry and I dearly apologize for not mentioning all the details of each individual release. I am sorry for not giving credits to the team of developers around me who do pretty hard work on keeping this beast intact.

The more, let me here here and now especially give credits to Ulrich Sibiller, Mihai Moldovan and Mario Trangoni for keeping the torch burning and for actually having achieved awesome results in each of the recent nx-libs releases over the past year or so. Thanks, folks!!!

Luckily, Mihai Moldovan (X2Go Release Manager) wrote regular release announcements for every version of nx-libs that he pulled over to the X2Go Git site and the X2Go upstream-DEBs archive site [1]. Also a big thanks for this!

Changes for nx-libs 3.5.99.21 and 3.5.99.22

3.5.99.21

  • Ulrich Sibiller did a major memory leak, double-free, etc. hunt all over the code and fixed several of such issues. Most of them will be in nx-libs shipped with Debian 10.1. (The one that is not yet in there has only recently been discovered).
  • There was also work done on the reparenting code when switching between fullscreen and windowed desktop session mode.
  • Ulrich Sibiller also reworked the NX-specific part of the XKB integration and cleaned up Font path handling.

For a complete list of changes, see the 3.5.99.21 upstream release commit [2].

3.5.99.22

  • The nxagent DDX code now uses the SAFE_Xfree and SAFE_free macros recently introduced everywhere.
  • The NX splash screen code had been tidied up entirely, plus: with nxagent option "-wr" you can now create a root window with white background.
  • Keyboard Auto-Grab support (see below)
  • Fix a double-free situation in the RandR implementation that occurred on NX session resumption

For a complete list of changes, see the 3.5.99.22 upstream release commit [3].

The new Feature: Keyboard auto-grab Support ( call for testing )

There is a new feature in nx-libs (aka nxagent, aka x2goagent) that people may find interesting. Ulrich Sibiller and I have been working on and off on a keyboard auto-grab feature for NX. See various discussions on nx-libs's issue tracker [4, 5, 6].

With keyboard auto-grab enabled (toggle switch is CTRL+ALT+G, configurable via /etc/{nxagent,x2goagent}/keystrokes.cfg), you can now run e.g. an "i3" [7] (or "awesome" [8]) window manager nested inside X2Go sessions with the local desktop environment also being an "i3" (or "awesome") window manager. I hear some of you cheering up now, in fact. Yes, it has become possible, finally.

Before we had this keyboard auto-grab feature in NX, it was not possible to connect to an X2Go session running i3 desktop from within an i3 window manager running on the local $DISPLAY. Keyboard input would never really end up in the X2Go session.

With keyboard auto-grab enabled, you can now nest "i3" (or "awesome") based desktops (local + remote via X2Go). If keyboard auto-grab is enabled, nearly all keyboard events (except the NX keystrokes) end up in the X2Go session window. With auto-grab disabled, all keyboard events end up in the local $DISPLAY's i3 (or "awesome") desktop.

Here is a little command line LOVE, to play with:

Log into a local desktop session, running the i3 window manager (if you have never touch i3, use awesome). If you don't know what tiling window managers are and how to use them... Try them out first.

If you are in a local i3wm session, do this from one terminal:

sudo apt-get install nxagent
nxagent -ac :1

And from another terminal:

export DISPLAY=:1
STARTUP=i3 dbus-run-session /etc/X11/Xsession

(You could do this more than once... You can use STARTUP=awesome instead of STARTUP=i3, too. ).

Have fun with nested tiling desktop environments tiled all over your screen. Use CTRL-ALT-G to toggle keyboard auto-grabbing for each NX session window individually. By default, auto-grab is disabled on startup of nxagent, so the local i3wm gets all the keyboard attention. Move the mouse over an nxagent + i3 window / tile and hit CTRL-ALT-G. Now the NX session window has all keyboard attention as long as the mouse pointer hovers above it.

And: please report any special and unexpected effects to the nx-libs issue tracker [9]. Thanks!

Have fun!!! Mike Gabriel (aka sunweaver)

References