Initial Librem5/Nexdock360 impression

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.

4 Likes

I’d assume touchscreen not working is the lack of input-output mapping in phoc (https://gitlab.gnome.org/World/Phosh/phoc/-/issues/6). We have some MRs inflight though that do the groundwork so we can wire that up afterwards.

2 Likes

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

https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/310 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.

2 Likes

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 (https://source.puri.sm/Librem5/linux-next/-/issues/338#note_178030) 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: https://gitlab.gnome.org/World/Phosh/phoc/-/merge_requests/310#note_1307102 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 wch.cn 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
Direction-X
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
Direction-Y

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

G_MESSAGES_DEBUG=phoc-seat,phoc-input-device
export G_MESSAGES_DEBUG

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

wlr-randr gives you the information too:

e.g.:

DP-1 "Dell Inc. DELL U3219Q H1FH413 (DP-1)"

Dell Inc. is the vendor DELL U3219Q the model and H1FH413 the serial.

I get

DP-1 “Unknown NexDock 8R33926O00Q (DP-1)”
Physical size: 290x170 mm
Enabled: yes
Modes:
1920x1080 px, 60.042000 Hz (preferred)
1920x1080 px, 60.000000 Hz
1920x1080 px, 59.939999 Hz (current)
1920x1080 px, 50.000000 Hz
1920x1080 px, 30.000000 Hz
1920x1080 px, 29.969999 Hz
1920x1080 px, 25.000000 Hz
1920x1080 px, 24.000000 Hz
1920x1080 px, 23.976000 Hz
1280x1024 px, 60.020000 Hz
1280x720 px, 60.000000 Hz
1280x720 px, 59.939999 Hz
1024x768 px, 60.004002 Hz
Position: 720,0
Transform: normal
Scale: 1.000000

which looks good for me with respect to the display modes you were concerned about.

Not concerned. It’s actually broken with older NexDock devices - good that it works for you.

So here we go. I tried to compile the phoc master branch on the L5 which was not difficult thanks to good readmes, but decided to install phoc_0.9.0+librem5ci332127.678a37b_arm64.deb for simplicity instead. After a reboot, this gives:

phoc[639]: Mapping touch device WingCoolTouch WingCoolTouch to DSI-1

But we want this to be on DP-1:

gsettings set org.gnome.desktop.peripherals.touchscreen:/org/gnome/desktop/peripherals/touchscreens/27c0:0819/ output "['Unknown', 'NexDock', '8R33926O00Q']"

… reboot (i could have better simply unplugged the NexDock perhaps) … and it works! Log says:

phoc[638]: Tracking config path /org/gnome/desktop/peripherals/touchscreens/27c0:0819/ for WingCoolTouch WingCoolTouch
phoc[638]: Input output mappings changed, reloading settings
phoc[638]: Looking up output Unknown/NexDock/8R33926O00Q
phoc[638]: Mapping touch device WingCoolTouch WingCoolTouch to DP-1

Thanks Guido!

3 Likes

I’ve bumped the logging message about new outputs to info level so they show up in the logs by default now:

Nov 11 11:55:20 nn106 phoc[2755]: Output 'DP-1' added ('Unknown'/'Linux FHD'/'Linux #0'), 500mm x 280mm

so they’re easy to grab.

1 Like