After a lot experimentation I found that its possible to have it running with Ubuntu 20.04.
But its not possible with Ubuntu 18.04 that NVIDIA provides due some incompatibility with OpenGL. See: https://forums.developer.nvidia.com/t/kde-plasma-error/121386/8
At first go I tried with a do-release-upgrade command after enabling it in the /etc/update-manager/release-upgrades file.
I could get a minimal working KDE after this but the packages were in an inconsistent state and I could not add packages further.
The working method is as follows.
Note: Here I am using the USB to boot the image so as not to affect the contents of the sdcard. Assuming that we have latest L4T 32.5.1 and the bootloader is updated to the SPI Flash in Nano .
- Get the community Xubuntu 20.04 for the Nano from here:
https://github.com/Discombobulated88/Xubuntu-20.04-L4T-32.3.1/releases/download/v1.0/Xubuntu-20.04-l4t-r32.3.1.tar.tbz2
- Get the L4T package as follow the procedure as described in the documentation ready just as you would for flashing.
https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/flashing.html#wwpID0E0HM0HA
Note: In my case I was not able to get Nano into recovery mode, so I generated an sdcard image and adapted it to boot from USB.
See: https://forums.developer.nvidia.com/t/some-clarification-required-for-usb-boot/178293
-
Instead of the rootfs from NVIDIA, extract the Xubuntu into the rootfs retaining the owner-ships.
-
Xubuntu has the older version of the L4T packages they need to be removed and few more packages need to be installed. We use the enter_chroot.sh script from here (https://forums.developer.nvidia.com/t/chroot-script-to-customize-your-rootfs-interactively/108902 ) to do this.
Also download the libffi6 (say with sudo apt dowload --download-only libffi6) and copy the deb file into the rootfs. This will be needed.
sudo enter_chroot.sh rootfs
LC_ALL=C DEBIAN_FRONTEND=noninteractive apt remove nvidia-l4t-3d-core nvidia-l4t-apt-source nvidia-l4t-bootloader
nvidia-l4t-camera nvidia-l4t-ccp-t210ref nvidia-l4t-configs nvidia-l4t-core
nvidia-l4t-cuda nvidia-l4t-firmware nvidia-l4t-graphics-demos nvidia-l4t-gstreamer
nvidia-l4t-init nvidia-l4t-initrd nvidia-l4t-jetson-io nvidia-l4t-kernel-dtbs
nvidia-l4t-kernel-headers nvidia-l4t-kernel nvidia-l4t-multimedia-utils nvidia-l4t-multimedia
nvidia-l4t-tools nvidia-l4t-wayland nvidia-l4t-weston nvidia-l4t-x11 nvidia-l4t-xusb-firmware nvidia-l4t-oem-config nvidia-settings
LC_ALL=C DEBIAN_FRONTEND=noninteractive apt -y install libgstreamer-plugins-bad1.0-0 device-tree-compiler libegl1-mesa
LC_ALL=C DEBIAN_FRONTEND=noninteractive dpkg -i libffi6_3.2.1-9_arm64.deb
adduser #Add yourself as user. This is important as we will see later
Edit the /etc/group file and add yourself as a sudoer
For some users you may have to configure your language and keyboard layout at this point
- We have to install latest L4T with apply_binaries.sh, but before that we need to adapt a few things
Edit the Linux_for_Tegra/nv_tegra/nv-apply-debs.sh file and add the --force-overwrite flag to the install as shown
LC_ALL=C PYTHONHASHSEED=0 chroot . dpkg -i –force-overwrite --path-include="/usr/share/doc/" “${pre_deb_list[@]}”*
fi
LC_ALL=C PYTHONHASHSEED=0 chroot . dpkg -i –force-overwrite --path-include="/usr/share/doc/" “${deb_list[@]}”*
Get into the Linux_for_Tegra/tools folder. Create a folder called newpack. We need to remove a python dependency with the following commands:
dpkg-deb -R python-jetson-gpio_2.0.16_arm64.deb newpack/
Get into newpack directory and remove the following line in the control file: python:any (<< 2.8), python:any (>= 2.7.5-5~),
dpkg-deb -b newpack/ python-jetson-gpio_2.0.16_arm64.deb
Now you can do the ./sudo apply_binaries.sh normally and it should get successfully installed.
- Create a sd-card image file (see the section: “To generate an image to be flashed to an SD card”) in the documentation.
For Jetson Nano B01, the command is as follows:
sudo ./jetson-disk-image-creator.sh -o sd-blob.img -b jetson-nano -r 300
Then flash the image into a USB drive using Balena Etcher.
- We need to enable the USB to mount the rootfs correctly. So mount the APP partition and edit the boot/extlinux/extlinux.conf file.
Change the /dev/mmcblk0p1 to /dev/sda1
-
Important step. Read carefully: Insert the pendrive into the Nano. Remove the sd-card and boot from USB. Note that the ubuquity installation will fail due to some error (clock OK on the GUI).
Then the system informs that it will try to boot into an graphical mode and removes the first boot ubiquity installer and tries a reboot. At this point remove the power!
Sounds comical but that is what is working! Discovered quite by accident! -
When you powerup again you find the Xubuntu login screen directly and you can login with your user credentials already configured. You can then configure your timezone.
-
Do an apt update and upgrade from command line with an additional option as follows:
sudo apt-get -o Dpkg::Options::=“–force-overwrite” upgrade
The force overwrite is required due to conflicting files between nvidia packages and systemd. When an interactive prompt is issued you can keep the original file.
- After this is complete, you can install packages sddm and sddm-theme-breeze to check if plasma is working. Then you can install the full kubuntu-desktop package
Note: Do not configure sddm as the display manager. Its not working for some reason even when sddm is added to video group.! Use lightdm itself and its quite optimal in memory usage as well.
That’s it. After this you can enjoy the beautiful KDE and Ubuntu 20.04 !