I am following suit from Beryllium’s blog post setting up an Ubuntu/Windows dual boot. However, I am not dual booting Windows, instead only using Debian 10.
Pre-Installation Details
I am using a Lenovo Yoga C740-14IML with 16 GB DDR4-2666 Memory, an Intel Core i7-10510U processor, and a 1TB SSD M.2 2280 PCIe NVMe for storage. The laptop user guide can be found at the Lenovo support page.
Enter BIOS by holding down the F2 key during power on. Boot device can be changed by holding down the F12 key during power on. Disable secure boot in the BIOS to enable hibernate and suspend. I left the hotkey settings such that the holding down Fn is necessary for the function keys F1-12, and pressing them otherwise will default to the hotkey functionality Volume Up/Down/Mute.
For my operating system image, I used the debian-10.4.0-amd64-netinst image. I did not load the iwlwifi firmware, instead using a wired connection for my installation.
Installation Choices
I opted for the non-graphical installation approach. For disk partitioning, I used the guided approach for setting up an encrypted LVM with a separate /home partition, opting to use 80% of my available physical storage space. Additionally, I set the volume groups for my root and home partitions to use btrfs instead of the default ext4.
# list file systems, showing type, size, additional meta df -Th
For my desktop environment, I chose the Plasma/KDE option.
Upgrade Linux Kernel
After the OS installation finished, I noticed that my laptop could not boot into the display manager, showing only text in tty1. When I attempted to run the startx, the following errors appeared in /var/log/Xorg.0.log:
[ 3570.258] X.Org X Server 1.20.4 X Protocol Version 11, Revision 0 [ 3570.259] Build Operating System: Linux 4.9.0-8-amd64 x86_64 Debian ... Fatal server error: [ 3570.274] (EE) Cannot run in framebuffer mode. Please specify busIDs for all framebuffer devices [ 3570.274] (EE) [ 3570.274] (EE) Please consult the The X.Org Foundation support at http://wiki.x.org for help. [ 3570.274] (EE) Please also check the log file at "/var/log/Xorg.0.log" for additional information. [ 3570.274] (EE) [ 3570.277] (EE) Server terminated with error (1). Closing log file.
To resolve this error, I updated my linux kernel. First, the buster-backports source needs to be added (to the end of /etc/apt/sources.list).
deb http://deb.debian.org/debian/ buster-backports main non-free contrib deb-src http://deb.debian.org/debian/ buster-backports main non-free contrib
Next, install linux kernel 5.4.
Linux kernel >=5.5 has a known Debian issue with audio drivers not working.
sudo apt update sudo apt install linux-image-5.4.0-0.bpo.4-amd64 linux-headers-5.4.0-0.bpo.4-amd64 # after installation completes, reboot sudo reboot now
“Out of the Box” Functionality Checklist
The following devices were detected on the pci busses (output of lspci).
00:00.0 Host bridge: Intel Corporation Device 9b61 (rev 0c) 00:02.0 VGA compatible controller: Intel Corporation Device 9b41 (rev 02) 00:04.0 Signal processing controller: Intel Corporation Skylake Processor Thermal Subsystem (rev 0c) 00:08.0 System peripheral: Intel Corporation Skylake Gaussian Mixture Model 00:12.0 Signal processing controller: Intel Corporation Device 02f9 00:13.0 Serial controller: Intel Corporation Device 02fc 00:14.0 USB controller: Intel Corporation Device 02ed 00:14.2 RAM memory: Intel Corporation Device 02ef 00:14.3 Network controller: Intel Corporation Device 02f0 00:15.0 Serial bus controller [0c80]: Intel Corporation Device 02e8 00:15.1 Serial bus controller [0c80]: Intel Corporation Device 02e9 00:16.0 Communication controller: Intel Corporation Device 02e0 00:17.0 SATA controller: Intel Corporation Device 02d3 00:19.0 Serial bus controller [0c80]: Intel Corporation Device 02c5 00:19.2 Communication controller: Intel Corporation Device 02c7 00:1d.0 PCI bridge: Intel Corporation Device 02b4 (rev f0) 00:1f.0 ISA bridge: Intel Corporation Device 0284 00:1f.3 Multimedia audio controller: Intel Corporation Device 02c8 00:1f.4 SMBus: Intel Corporation Device 02a3 00:1f.5 Serial bus controller [0c80]: Intel Corporation Device 02a4 01:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller SM981/PM981
Marked items indicate no further setup required. Items not checked required additional configuration before full functionality was available.
Audio
Speakers working using Linux Kernel 5.4, does not work in Linux Kernel 5.6.
Microphone appears to have an issue. When attempting to conference call, only “Monitor of Built-in Audio Analog Stereo” was available.
Testing using audacity revealed only static noise when recording. However, the static noise was mutable by the laptop hotkey for the microphone.
Battery
Battery indicator appears in the bottom right corner and shows the charge when not plugged into AC. When plugged into AC, laptop charges.
Web Camera
Running mplayer tv://, I see myself appear on the screen. (mplayer can be installed through apt)
Bluetooth/Wifi
No adapters available.
Touchpad
Multi-touch scrolling, tap emulation worked with no issues.
Keyboard Hotkeys (Partial)
Working:
Mute F1
Volume Down F2
Volume Up F3
Microphone On/Off F4
Browser Refresh Page F5
Touchpad On/Off F6
Airplane Mode On/Off F7
Switch display device F10
Keyboard Backlight Fn+Spacebar
Not working:
Enable/Disable Integrated Camera F8
Lock Screen F9
Screen Brightness Down F11
Screen Brightness Up F12
Touchscreen
Touch inputs appear to simulate mouse events
USB/USB-C
Appears to work with no issues
Fingerprint Scanner
Not supported by fprintd. Low priority, will likely not use even if supported.
Suspend (Suspend to RAM)
Ran “Suspend to RAM”, screen shuts off. On keyboard event, screen turns back on, lock screen appears.
Hibernate (Suspend to Disk)
Ran “Hibernate”, screen shuts off. On press of power button, laptop resumed from hibernation with no issue.
To diagnose these errors, I read through the dmesg output.
Enabling WLAN and Bluetooth
sudo dmesg | grep 'wifi\|bluetooth'
[ 12.231809] iwlwifi 0000:00:14.3: firmware: failed to load iwlwifi-QuZ-a0-jf-b0-50.ucode (-2) [ 12.231884] iwlwifi 0000:00:14.3: Direct firmware load for iwlwifi-QuZ-a0-jf-b0-50.ucode failed with error -2 [ 12.231907] iwlwifi 0000:00:14.3: firmware: failed to load iwlwifi-QuZ-a0-jf-b0-49.ucode (-2) [ 12.231973] iwlwifi 0000:00:14.3: Direct firmware load for iwlwifi-QuZ-a0-jf-b0-49.ucode failed with error -2 [ 12.231991] iwlwifi 0000:00:14.3: firmware: failed to load iwlwifi-QuZ-a0-jf-b0-48.ucode (-2) [ 12.232055] iwlwifi 0000:00:14.3: Direct firmware load for iwlwifi-QuZ-a0-jf-b0-48.ucode failed with error -2 [ 12.232072] iwlwifi 0000:00:14.3: firmware: failed to load iwlwifi-QuZ-a0-jf-b0-47.ucode (-2) [ 12.232138] iwlwifi 0000:00:14.3: Direct firmware load for iwlwifi-QuZ-a0-jf-b0-47.ucode failed with error -2 [ 12.232154] iwlwifi 0000:00:14.3: firmware: failed to load iwlwifi-QuZ-a0-jf-b0-46.ucode (-2) [ 12.232220] iwlwifi 0000:00:14.3: Direct firmware load for iwlwifi-QuZ-a0-jf-b0-46.ucode failed with error -2 [ 12.232237] iwlwifi 0000:00:14.3: firmware: failed to load iwlwifi-QuZ-a0-jf-b0-45.ucode (-2) [ 12.232300] iwlwifi 0000:00:14.3: Direct firmware load for iwlwifi-QuZ-a0-jf-b0-45.ucode failed with error -2 [ 12.232317] iwlwifi 0000:00:14.3: firmware: failed to load iwlwifi-QuZ-a0-jf-b0-44.ucode (-2) [ 12.232383] iwlwifi 0000:00:14.3: Direct firmware load for iwlwifi-QuZ-a0-jf-b0-44.ucode failed with error -2 [ 12.232400] iwlwifi 0000:00:14.3: firmware: failed to load iwlwifi-QuZ-a0-jf-b0-43.ucode (-2) [ 12.232466] iwlwifi 0000:00:14.3: Direct firmware load for iwlwifi-QuZ-a0-jf-b0-43.ucode failed with error -2 [ 12.232483] iwlwifi 0000:00:14.3: firmware: failed to load iwlwifi-QuZ-a0-jf-b0-42.ucode (-2) [ 12.232549] iwlwifi 0000:00:14.3: Direct firmware load for iwlwifi-QuZ-a0-jf-b0-42.ucode failed with error -2 [ 12.232565] iwlwifi 0000:00:14.3: firmware: failed to load iwlwifi-QuZ-a0-jf-b0-41.ucode (-2) [ 12.232628] iwlwifi 0000:00:14.3: Direct firmware load for iwlwifi-QuZ-a0-jf-b0-41.ucode failed with error -2 [ 12.232645] iwlwifi 0000:00:14.3: firmware: failed to load iwlwifi-QuZ-a0-jf-b0-40.ucode (-2) [ 12.232711] iwlwifi 0000:00:14.3: Direct firmware load for iwlwifi-QuZ-a0-jf-b0-40.ucode failed with error -2 [ 12.232727] iwlwifi 0000:00:14.3: firmware: failed to load iwlwifi-QuZ-a0-jf-b0-39.ucode (-2) [ 12.232792] iwlwifi 0000:00:14.3: Direct firmware load for iwlwifi-QuZ-a0-jf-b0-39.ucode failed with error -2 [ 12.232796] iwlwifi 0000:00:14.3: minimum version required: iwlwifi-QuZ-a0-jf-b0-39 [ 12.232855] iwlwifi 0000:00:14.3: maximum version supported: iwlwifi-QuZ-a0-jf-b0-50 [ 12.232915] iwlwifi 0000:00:14.3: check git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git [ 12.523137] bluetooth hci0: firmware: failed to load intel/ibt-19-0-1.sfi (-2) [ 12.523234] bluetooth hci0: Direct firmware load for intel/ibt-19-0-1.sfi failed with error -2
The firmware requested in the dmesg logs iwlwifi-QuZ-a0-jf-b0-* is for the Intel Wireless 22000 series. The product specification for my laptop model suggests that I should have received an Intel 9560 11ac, 2x2 + BT5.0. I am unsure if this is an issue with Linux incorrectly determining the make/model of my WLAN hardware, or if I was shipped a laptop with a slightly newer components.
Output of lspci -vv -s 00:14.3 does not appear to provide any useful identifying information.
The necessary firmware is currently in buster-backports. This should already be added in your sources due to the earlier step of upgrading the kernel.
sudo apt -t buster-backports install firmware-iwlwifi # Restart the machine sudo reboot now
Bluetooth requires no additional setup after WLAN is available.
Hotkey Diagnosis
To view the scancode that maps to the hotkeys, I switched to a new tty (e.g. Ctrl+Alt+Fn+F1) and ran the showkey --scancodes command. By default, the graphical display is on tty7.
Update(July 9, 2020): It appears that after putting my laptop into hibernation (not suspend to RAM) and waking up, the brightness controls hotkeys work as intended.
Workaround: use software controls for display brightness management, or hibernate and wake up.