Lenovo IdeaPad Duet 3 (google-wormdingler)

== Users owning this device ==
== 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"
== 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 ==
* Lenovo IdeaPad Duet Chromebook