Jump to content

Lenovo IdeaPad Duet 3 (google-wormdingler)

From postmarketOS Wiki
Note This device is supported as part of a generic port. Refer to Google Trogdor Chromebook (google-trogdor) for installation instructions and more information.
Lenovo IdeaPad Duet 3
Duet 3 running postmarketOS with the GNOME interface
Duet 3 running postmarketOS with the GNOME interface
Manufacturer Lenovo
Name IdeaPad Duet 3
Codename google-wormdingler
Released 2021
Type detachable
Hardware
Chipset Qualcomm Snapdragon 7c Gen 2 (SC7180P)
CPU 2x Kryo 468 Gold + 6x Kryo 468 Silver
GPU Adreno 618
Display 2000x1200 IPS
Storage 64/128 GB
Memory 4/8 GB
Architecture aarch64
Software
Original software ChromeOS
postmarketOS
Category testing
Pre-built images no
Mainline yes
Generic port Google Trogdor Chromebook (google-trogdor)
Features
USB Networking
Works
Internal storage
Works
SD card
Battery
Works
Screen
Works
Touchscreen
Works
Keyboard
Works
Touchpad
Works
Stylus
Works
Multimedia
3D Acceleration
Works
Audio
Works
Camera
Broken
Connectivity
WiFi
Works
Bluetooth
Works
Miscellaneous
FDE
Works
USB OTG
Works
HDMI/DP
Works
Sensors
Accelerometer
Works
Hall Effect
Works


Users owning this device

  • Connorplayer123 (Notes: Using pmOS with GNOME, 8GB RAM, 128GB eMMC, and its my daily driver!)
  • Diogotavc (Notes: 8+128 variant imported from the UK, running pmos w/gnome-shell)
  • Geofferey (Notes: Testing device port)
  • Jasedxyz (Notes: Running pmOS)


Audio

Audio defaults to a non-existent headset due to mismatched alsa UCM configs. You can simply switch to the speakers and ignore the headset, as this does not break functionality.

Screen Rotation

Screen rotation works via accelerometer but is stuck +/- 90 degrees.

You might be able to offset it, by creating an udev rule (/etc/udev/rules.d/61-cros-ec-accel.rules). To get it working properly, you have to swap the x and y values, as well as inverting the x-axis:

Create the following file:

# nano /etc/udev/rules.d/61-cros-ec-accel.rules

Insert the following text:

ACTION=="remove", GOTO="sensor_end"
 
SUBSYSTEM=="iio", KERNEL=="iio*", SUBSYSTEMS=="platform", 
  ATTRS{modalias}=="platform:cros-ec-accel", 
  ENV{ACCEL_MOUNT_MATRIX}="0, 1, 0; -1, 0, 0; 0, 0, -1", 
  GOTO="sensor_end"

LABEL="sensor_end"

Touchpad

The touchpad requires a large amount of pressure in order to detect cursor movement. To increase its sensitivity, you can add the following libinput quirk:

Create the following file:

# mkdir /etc/libinput
# nano /etc/libinput/local-overrides.quirks

Insert the following text:

[Touchpad pressure override]
MatchUdevType=touchpad
MatchName=Google Inc. Hammer
AttrPressureRange=20:10

Stylus

The cursor position is correctly displayed only in portrait orientation. To make the USI-pen work correctly in any orientation, do the following (source):

Create the following file:

# mkdir /etc/libwacom
# nano /etc/libwacom/google-wormdingler.tablet

Insert the following text:

[Device]
Name=hid-over-i2c 0603:604A Stylus
ModelName=
DeviceMatch=i2c:0603:604a
Class=ISDV4
Width=5.35433
Height=8.54331
IntegratedIn=Display;System
Styli=@generic-no-eraser

[Features]
Stylus=true
Touch=false

And also supplement or create a file:

# nano /etc/libinput/local-overrides.quirks
[Google Chromebook Wormdingler Stylus Digitizer]
MatchUdevType=tablet
MatchDeviceTree=*wormdingler*
MatchBus=i2c
ModelChromebook=1
AttrPressureRange=1100:1000

Small note: The stylus can feel a bit unresponsive, and the palm rejection pretty bad. For that, feel free to tweak or remove values to your liking, as follows:

[Google Chromebook Wormdingler Touch Digitizer]
MatchName=hid-over-i2c 0603:604A
AttrPalmSizeThreshold=14

[Google Chromebook Wormdingler Stylus Digitizer]
MatchUdevType=tablet
MatchDeviceTree=*wormdingler*
MatchBus=i2c
ModelChromebook=1
AttrTabletSmoothing=0

After all this is done, execute this and reboot:

# libwacom-update-db

After that, the digitizer should take into account the screen rotation, and also, the digitizer settings menu will appear in the Gnome settings. Other USI styli may not work (remembering that USI 1.0 pens are completely unsupported for this model due to the in-cell display technology).

Bluetooth

Bluetooth seems to work well overall. Gamepads, earbuds and phone connections seem to work out of the box without issues. However:

Previous versions of this page noted problems with gamepads, as well as keyboards and mice.

Some devices such as gamepads do not work out of box with the default kernel Bluetooth configuration. Required inlining of rfkill + core Bluetooth features instead of modules, even with modules loaded gamepad did not work.

For Bluetooth keyboard and mice to work you must manually load the uhid kernel module via modprobe/insmod or add it to the /etc/modules file.

Keyboard

If you're unhappy with the current keyboard layout or need a special key, you can disable the cros-keyboard-map service (as it overrides the configuration on each boot) and manually edit the keyd configuration file:

# rc-update del cros-keyboard-map boot
# nano /etc/keyd/default.conf

The configuration file is very readable and easy to digest, although you may want to use keyd monitor and keyd list-keys to facilitate the process. Note that you may have to stop and start the keyd service manually for changes to take effect without a reboot.

An example of a keyd configuration file for the Duet 3:

[ids]
k:0000:0000
k:0001:0001
k:18d1:503c
k:18d1:5050
k:18d1:504c
k:18d1:5052
k:18d1:5057
k:18d1:505b
k:18d1:5030
k:18d1:503d
k:18d1:5044
k:18d1:5061
k:18d1:592b

[main]
back = back
refresh = forward
zoom = f11
scale = scale
brightnessdown = brightnessdown
brightnessup = brightnessup
micmute = micmute
mute = mute
volumedown = volumedown
volumeup = volumeup
sleep = delete
backspace = backspace

[meta]
back = f1
refresh = f2
zoom = f3
scale = f4
brightnessdown = f5
brightnessup = f6
micmute = f7
mute = f8
volumedown = f9
volumeup = f10
sleep = f12

[alt]
up = pageup
down = pagedown
left = home
right = end
leftmeta = capslock

[control]
scale = print

[control+alt]
sleep = C-A-delete
back = C-A-f1
refresh = C-A-f2
zoom = C-A-f3
scale = C-A-f4
brightnessdown = C-A-f5
brightnessup = C-A-f6
micmute = C-A-f7
mute = C-A-f8
volumedown = C-A-f9
volumeup = C-A-f10

Desktop Environment-specific tweaks

GNOME

In the latest versions of gnome-shell, you can set screen scaling values to multiples of 25% by enabling experimental fractional scaling support:

$ gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"

Phosh

Change screen scaling

If you don't want to set the screen orientation and the scale new, after every reboot:

# nano /usr/share/phosh/phoc.ini

Insert the following text:

[output:DSI-1]
rotate = 270
scale = 1.5

Reboot.

Allow free-form windows when undocked

When the keyboard is connected, you can switch between "Docked" and "Undocked" from the quick settings. When you disconnect the keyboard, phosh automatically transitions into "Undocked" mode, automatically maximizing all of your windows. To allow free form windows, you can run the following command:

$ gsettings set sm.puri.phoc auto-maximize false

Revert to true to switch back to auto-maximized windows.

Disable pbsplash

The pbsplash works in portrait mode during boot, regardless of the actual orientation of the device. If you are confused by this, you can switch to the option of showing the boot log, which happens in landscape mode (source):

# nano /etc/deviceinfo

Edit the appropriate line, preserving your parameters if they exist:

deviceinfo_kernel_cmdline_append=" PMOS_NOSPLASH console=tty1"

And rebuild the boot kernel image:

# mkinitfs

See also