ASUS Zenbook Issues

I have an ASUS Zenbook UM425U, currently working great with Ubuntu 21.04 loaded. Upon installing Ubuntu 20.04, initially the keyboard worked but other aspects of the computer did not, such as being able to control screen brightness, fan speed, etc. After the kernel was automatically updated, however, suddently I was unable to use the keyboard, but intermittently. Each reboot might allow me or not. To add an additional wrinkle, I had also encrypted my hard drive using LUKS, meaning that if I was traveling or did not have access to an external keyboard, I would be locked out.

Install a compatible Kernel.

The first thing I did was to manually install a kernel I could at least unlock my computer with. I followed the instructions here to get the linux 5.8.18 kernel installed.

List all kernels:

dpkg --list | grep linux-image

Recompile your Kernel

The real solution, however, is discussed in this chain of emails, and the solution is discussed here.

  1. open software-properties-gtk and enable source code

  2. Follow instructions to build your own kernel

    1. get dependencies

    2. get source ()

      apt-get source linux-image-unsigned-$(uname -r)
      
    3. update configs

      chmod a+x debian/rules
      chmod a+x debian/scripts/*
      chmod a+x debian/scripts/misc/*
      LANG=C fakeroot debian/rules clean
      LANG=C fakeroot debian/rules editconfigs # you need to go through each (Y, Exit, Y, Exit..) or get a complaint about config late
      
    4. Use the advice from here, update yoru configuration (don’t uncheck “support for uevent”)

      ASUS UM425UA internal keyboard doesn't work on a "cold boot" (first 
      power-on). It activates only after restart.
        I noticed it when tried to boot live image of Ubuntu 20.04.3
        This problem probably appeared with kernel version 5.9 or 5.10 because with 
      Ubuntu 20.04.2 live image (Linux 5.8) keyboard loads fine. Tried kernel 5.14 
      and it's still affected.
        I tried to recompile kernels 5.11 & 5.13 with SERIO_I8042 set as a module (as 
      suggested in an Arch Linux bug report) and keyboard now works from the first 
      start.
      
        In "make config" the changes are:
        Device Drivers ->
          > Generic Driver Options -> [ ] Support for uevent #may slowdown boot, 
      needed only for U14.04
          > Input device support
             > Keyboards -> [M] AT keyboard
             > Hardware I/O ports -> [M] i8042 PC Keyboard controller
      
        It changed such lines in config:
        CONFIG_KEYBOARD_ATKBD=m
        CONFIG_SERIO_I8042=m
        CONFIG_SERIO_LIBPS2=m
      
        References:
        https://bugs.archlinux.org/task/70384
        https://ubuntuforums.org/showthread.php?t=2459149
      
      https://linux.org/threads/asus-zenbook-14-um425ua-keyboard-not-respond-during-cold-boot.33738/#post-133830
      
        P.S. Other option which helped me was a GRUB parameter "i8042.reset=1" but it 
      had a positive effect only with kernel 5.11
      
    5. These changes break the rules. Modify

      nano debian.master/config/annotations
      
      1. search for “CONFIG_KEYBOARD_ATKBD”, “CONFIG_SERIO_I8042”, and “CONFIG_SERIO_LIBPS2” and set amd64 option to “m” for each.
    6. Update version number so that the apt repository doesn’t supersede it on the next upgrade (according to the ubuntu guide)

      • add a local version modifier like “+test1” to the end of the first version number in the debian.master/changelog file before building.
      • This will help identify your kernel when running as it also appears in uname -a.
      • Note that when a new Ubuntu kernel is released that will be newer than your kernel (which needs regenerating), so care is needed when upgrading.
      • NOTE: do not attempt to use CONFIG_LOCALVERSION as this will break the build.
      nano debian.master/changelog
      
    7. build

      LANG=C fakeroot debian/rules clean
      # quicker build:
      LANG=C fakeroot debian/rules binary-headers binary-generic binary-perarch
      # if you need linux-tools or lowlatency kernel, run instead:
      LANG=C fakeroot debian/rules binary
      
    8. Install the three-package set (on your build system, or on a different target system) with dpkg -i and then reboot:

      
      sudo dpkg -i linux*5.11.0*.deb
      sudo apt install -f #to install any missing packages
      sudo apt autoremove # to remove any unused packages
      sudo reboot
      
    9. Reinstall virtualbox-dkms

      sudo apt install --reinstall virtualbox-dkms 
      sudo modprobe vboxdrv
      

Things that didn’t work

Modify initramfs

find HID modules

lsmod

add those modules to initramfs

sudo nano /etc/initramfs-tools/modules

add one per line

#amdgpu 
asus_wmi 
asus_nb_wmi
atkbd 
dm_crypt 
ext4 
fat 
i2c_hid 
i8042
ohci_pci
xhci_pci
xhci_pci_renesas
edac_mce_amd
kvm_amd
kvm
serio_raw
usbcore
uhci_hcd
ehci_hcd
usbhid

update initramfs:

sudo update-initramfs -u -k all

Blacklist amdgpu

when doing update-initramfs in kernel 5.11.0-31, there are some messages about amdgpu missing drivers

Add the following line to /etc/modprobe.d/blacklist.conf.

blacklist amdgpu

As initramfs contains modprobe configuration, update the initramfs and reboot:

sudo update-initramfs -u -k all

Check whether the driver blacklisted or not, the following command should output nothing.

$ lsmod | grep amdgpu

But this kills hdmi…