Initial Librem5/Nexdock360 impression

Could be this kind: TUTORIAL: Add a Custom Background in Phosh

1 Like

I’m using it as my bluetooth mouse isn’t working atm, I’ve got to complaints:

  • The lack of middle mouse emulation using triple tap, in android it opens the app menu and here it just writes the letter q.

  • The touchpad doesn’t get disabled while typing so it can be a mess if you don’t do it carefully.

Maybe both can be fixed by software but I’ve been busy to try this.

1 Like

This can be changed with Gnome Settings now I just tried it, but there is no option to set different backgrounds per monitor.

I hate all touchpads, but this is really awful. It triggers multiple times while writing (no palm detection) and in the software there’s still no way to disable touchpad while writing, so you need to be extra careful. Some of the multi-finger gestures are working (Alt-tab on 3 fingers up). I rarely use the touchpad, so for me it would be ok just to press the touchscreen when I need to (there’s a fn key disabling the touchpad) but the touchscreen is not working correctly yet (when both screen are enabled, the lower-right part of the ND touchscreen moves things on the L5 display, so it’s technically working, but unsupported in phosh).


Something I’d really like to add is the automatic switch of the keyboard layout from my location to US Intl. Please, tell me if you know a command for changing it.

Edit: there’s Super-space, but that’s one keystroke more

Yes, I being using this but I found a way to do it in the squeekboard repository:
gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'us'), ('xkb', 'es')]"

The first one is the one you’ll choose so to come back to my personal layout I use:

gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'es'), ('xkb', 'us')]"

Can this be added to Kanshi?

Oh yes, here you go:

profile nexdock {
	output DSI-1 disable
	output DP-1 enable
	exec gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'us+intl'), ('xkb', 'it')]"
	exec gsettings set org.gtk.Settings.Purism is-phone false

profile default { 
	output DSI-1 enable scale 2
	exec gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'it'), ('xkb', 'us+intl')]"
	exec gsettings set org.gtk.Settings.Purism is-phone true

I also added the switch between docked-undocked mode because sometimes phosh stays in docked mode (when the switch happens with kanshi) and I’m left with an unusable phone (even by rebooting it, I can’t have access to the keyboard). This might (but I’ve not tested it enough) fix this.

1 Like

Yes, that happens to me before and I forgot how I got it fixed, how do you enable Kanshi? I installed it from the repositories and created the config file, it is something else required like a systemd service or so?

Ohhhh yeah. Totally forgot about that! :crazy_face: Thanks.

right now I’m running it manually (as I discovered it few days ago, I’ve not looked at the systemd service yet. I noticed the arch package has one, but I don’t think it will work as it is, probably it does require some changes)

Just got a Nexdock360, too. I bought it as a replacement for my secondary screen, which is larger, needs some extra keyboard and a lot of space and cabelling, as a front end for small devices.

My very first impressions are:

  • small and light, looks and feels good
  • for a 13.3" device it has pretty large keys, same size as a normal keyboard.
  • glare display (!)
  • connection with Librem5 was smooth and simple

Unfortunately, there are some features, that do not yet work out of the box here at all, yet:

  • Touch screen. While i can control the nexdock settings using the touch screen, it is not recognized by the L5, yet. Hmm, i can confirm @nico202 findings. Touching the right side of the screen has some scrolling effect on the L5, while the cursor stays where it is, meaning that both geometry and buttons are messed up in some way. Most likely a problem with the usbhid driver and/or the nexdock’s usb descriptors.

  • Speaker. The nexdock’s speakers are not recognized by L5.

Random notes:

  • Screen blanking, power management, convergence still has some software and usability glitches with funny effects. Anyway, it is almost there. Using “Display > Single Display” properly blanks L5’s screen and let the nexdock appear as a notebook. I could control everything from the nexdock. When L5 sends a blank, the nexdock shows a bright white screen announcing to be “ready to connect”. Pressing a key then wakes the L5 up to show the login screen on the nexdock. Very nice! But letting the nexdock be “ready to connect” for a while (2-3 min), it switches off (saying “power saving”). By this, the L5 and nexdock get disconnected, so the login screen then appears on the L5 and the nexdock needs to be configured again as the primary screen. Perhaps, something along the kanshi material above, i.e. a more persistent configuration would improve usability on L5’s side, but the nexdock does also not behave optimal here, showing a white screen, while a black one was intended. The only alternative is to disable screen blanking completely. So that works, but is not fully usable in practice. Hmm, i think this needs to be fixed on both sides.

  • Touchpad. I do have the same problem with touchpads as @nico202 does. One can deactivate it by a function key. My palm rest preferences aside, it seems to work well.

  • The L5’s battery appears to be very slowly charging (1-2%/h) when connected to the nexdock with varying (shrinking and growing) estimates. I’m not sure how loading the L5 via nexdock will interact with the nexdock’s power saving and blanking when the screen is turned off.

  • The nexdock’s USB-C “data” port works well with a docking station. I tried at least a mouse and wired network. Hmm, wifi 5.3 GHz works quite well now in Byzantium and the nexdock has a micro-SD slot. So i guess, an extra dock will normally not be needed.

  • The keyboard has a back light.

  • Since video playback was a question: it appears to be smooth for me in a quick test.

Hope it helps. For me, the most interesting point is to get the nexdock’s touch screen going with L5.


I’d assume touchscreen not working is the lack of input-output mapping in phoc ( We have some MRs inflight though that do the groundwork so we can wire that up afterwards.


I just tried the nexdock with mobian (bullseye) with a pinephone. While it basically has the same issue, it sometimes gets into states where the touchscreen works as it should. Unfortunately i was not able to find a way to trigger a switch to that state reliably. In the moment i think, a lock-screen event (or coming out of it) could cause it, but i am not sure.

Anyway, it is good to see it working, and when it works, it works very well. Contrary to my expectation, the touch events are not related to the mouse cursor, but go directly to the controls. As this is all more or less the same code basis, chances are, that it might work with L5 under some circumstances, too.

1 Like allows to map tablets and touch to specific screens. I’ve only tested tablet so far but touch should work the same - given that libinput reports some sensible vendor/product ids and the output provides vendor/product/serial via EDID. The MR has details how to configure things.


Thank you for making phoc and writing the note pointed to. As good as i understand, some mapping might be needed to be configured for the touch screen. As i have the device here, I’ll dig through the logs and/or try to find the missing information.

I only have an older NexDock model here for which I also need an EDID override ( and with that it looks like:

gsettings set org.gnome.desktop.peripherals.touchscreen:/org/gnome/desktop/peripherals/touchscreens/1a86:e2e4/ output "['Unknown', 'Linux FHD', 'Linux #0']"

If you run that merge request and enable debugging via G_MESSAGES_DEBUG=phoc-output,phoc-seat it will print something like this: in the journal and you can grab the information from there.

For my HP monitor I used:

gsettings set org.gnome.desktop.peripherals.tablet:/org/gnome/desktop/peripherals/touchscreens/1b96:0f01/ output "['Hewlett Packard', 'HP w2207', 'CZD74909W7']"

You can also fetch the information via edid decode:

edid-decode /sys/devices/platform/soc@0/32c00000.bus/32e00000.display-controller/drm/card2/card2-DP-1/edid

If it worked you’ll see something like

Mapping touch device USB2IIC_CTP_CONTROL to DP-1

in the logs.

1 Like

Thank you. My NexDock360 has model# NDK2113. This can be found in the OSD menu under “info”.

The touch device has USB ID 27c0:0819 Cadwell Laboratories, Inc. WingCoolTouch.

$ libinput list-devices
Device: WingCoolTouch WingCoolTouch
Kernel: /dev/input/event12
Group: 5
Seat: seat0, default
Size: 216x91mm
Capabilities: touch
Tap-to-click: n/a
Tap-and-drag: n/a
Tap drag lock: n/a
Left-handed: n/a
Nat.scrolling: n/a
Middle emulation: n/a
Calibration: identity matrix
Scroll methods: none
Click methods: none
Disable-w-typing: n/a
Accel profiles: n/a
Rotation: n/a

Not exactly, more 294x175mm. But it nevertheless is the right device. I validated this by listing its events.

I could not spot EDID issues in the log. Beside, perhaps:

colord[990]: failed to get edid data: EDID length is too small
pureos gsd-color[873]: unable to get EDID for xrandr-DP-1: unable to get EDID for output
pureos gsd-color[873]: unable to get EDID for xrandr-DSI-1: unable to get EDID for output

but i believe, that might be a very different issue.

I tried edid-decode and got some proper list. A touch device is not mentioned there.

To proceed further, i guess, i need to translate your MR first. I have no build environment set up, yet, but i’ll give it a shot. Thx, again.

216x91mm maybe this is the little square that triggers the options in the nexdock?

@uzanto Unlikely, the square is about 80x50mm. Not even sure where libinput got these values from. I listed the usb device using usb -v but the report descriptors are blocked while the driver (usbhid) sits on it…

echo -n 3-1.2:1.0 >/sys/bus/usb/drivers/usbhid/unbind
echo -n 3-1.2:1.1 >/sys/bus/usb/drivers/usbhid/unbind

Then, finally lsusb -v -d 27c0:0819 reports:

Item(Global): Unit, data= [ 0x11 ] 17
System: SI Linear, Unit: Centimeter
Item(Local ): Usage, data= [ 0x30 ] 48
Item(Global): Physical Minimum, data= [ 0x00 ] 0
Item(Global): Physical Maximum, data= [ 0x79 0x08 ] 2169
Item(Main ): Input, data= [ 0x02 ] 2
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Non_Volatile Bitfield
Item(Global): Logical Maximum, data= [ 0x7f 0x25 ] 9599
Item(Global): Physical Maximum, data= [ 0x8a 0x03 ] 906
Item(Local ): Usage, data= [ 0x31 ] 49

So the geometry info appears to come from the USB descriptor, which is simply wrong at that point. As long as the physical size is not used, it does not matter, though.

What does matter, and so i understand @guido.gunther’s idea, is how the touch screen device is seen by the L5. From the USB-descriptors it is just a digitizer on USB, which delivers absolute positions but yet unrelated to any display.

Now where is the origin? Because the USB descriptors do not describe this, L5 has to guess, and it guesses it must the origin of its own screen causing the effect first described here as:

But contrary to the first impression, the touches are not erratically, but proportionally mapped to the L5 screen. E.g. left-upper and right-lower corner of the NexDock’s touch screen map to the respective corner of L5’s screen. Because the touches do not affect the cursor, this effect is not immediately visible, but one can validate this with a bit care and i did. The touches affect the controls and the windows boarders.

For me, this establishes, that @guido.gunther’s suspicion is right. Thus all, L5 has to know, is that the digitizer’s (touch screen) positions are to be interpreted as related to the NexDock’s screen. And that is the semantic of the setting Guido describes in his MR.

This leave to actually try it…

1 Like

Debugging is not on by default. You need to enable that by e.g. adding this


to /usr/bin/phosh (you can also do that via unit override but this is usually quickest). If someone wants to do a script that fetches the information from edid-info and generates the proper gsettings command that would be welcome.

1 Like