Running KDE on the Jetson Nano

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 .

  1. 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
  1. 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

  1. Instead of the rootfs from NVIDIA, extract the Xubuntu into the rootfs retaining the owner-ships.

  2. 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

  1. 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.

  1. 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.

  1. 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

  1. 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!

  2. 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.

  3. 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.

  1. 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 !

1 Like

Some notes on what is working and what is not:

  1. Sleep does not work with Xubuntu , but works with the KDE

  2. Firefox does not work on both :(

The tabs crash:

And at the command line I see the following:

firefox
Crash Annotation GraphicsCriticalError: |[0][GFX1-]: glxtest: libEGL missing eglGetDisplayDriverName (t=1.90161) [GFX1-]: glxtest: libEGL missing eglGetDisplayDriverName
Crash Annotation GraphicsCriticalError: |[0][GFX1-]: glxtest: libEGL missing eglGetDisplayDriverName (t=1.90161) |[1][GFX1-]: glxtest: libEGL missing eglGetDisplayDriverName (t=1.90172) [GFX1-]: glxtest: libEGL missing eglGetDisplayDriverName
NvRmPrivGetChipIdLimited: Could not read Tegra chip id/rev
Expected on kernels without fuse support, using Tegra K1
NvRmPrivGetChipPlatform: Could not read platform information
Expected on kernels without fuse support, using silicon
libnvrm_gpu.so: NvRmGpuLibOpen failed

If someone could help it would be great.

  1. Also I am not able to install chromium as a snap.

The following NEW packages will be installed:
chromium-browser
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/48.3 kB of archives.
After this operation, 164 kB of additional disk space will be used.
Preconfiguring packages …
(Reading database … 238701 files and directories currently installed.)
Preparing to unpack …/chromium-browser_1%3a85.0.4183.83-0ubuntu0.20.04.2_arm64.deb …
=> Installing the chromium snap
==> Checking connectivity with the snap store
==> Installing the chromium snap
error: cannot perform the following tasks:

  • Mount snap “chromium” (1641) ([start snap-chromium-1641.mount] failed with exit status 1: Job failed. See “journalctl -xe” for details.
    )
    dpkg: error processing archive /var/cache/apt/archives/chromium

So at the moment I am using vivaldi browser

I won’t be able to provide much help, but in the GUI, you will want to post the output from this (if you need glxinfo, then “sudo apt-get install mesa-utils”):
glxinfo | egrep -i '(nvidia|version)

Basically this is just seeing which version of any hardware acceleration is active. If this is not correct, then I’m not sure how you would correct it without going to Ubuntu 18.04.

I believe its working fine.

glxinfo | egrep -i ‘(nvidia|version)’
server glx vendor string: NVIDIA Corporation
server glx version string: 1.4
client glx vendor string: NVIDIA Corporation
client glx version string: 1.4
GLX version: 1.4
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: NVIDIA Tegra X1 (nvgpu)/integrated
OpenGL core profile version string: 4.6.0 NVIDIA 32.5.1
OpenGL core profile shading language version string: 4.60 NVIDIA
OpenGL version string: 4.6.0 NVIDIA 32.5.1
OpenGL shading language version string: 4.60 NVIDIA
OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 32.5.1
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
GL_EXT_shader_group_vote, GL_EXT_shader_implicit_conversions,

One thing is that firefox was working alright when I tried to get it working (with KDE only) via do-release-upgrade method. So in principle its works. It something to do with its installation initially in Xubuntu.

I don’t know what else is going on, but it does seem your NVDIA hardware acceleration drivers are correctly in place. It could be some other release of something is needed, but the basics are there.

After an error it would be interesting to see the suggested “sudo journalctl -xe”.

Here you go:

sudo journalctl -xe

Jun 24 21:28:50 jetson-nano dbus-daemon[5727]: [session uid=1000 pid=5727] Activating service name=‘org.kde.runners.baloo’ requested by ‘:1.28’ (uid=1000 pid=5984 comm=“/usr/bin/plasmashel>
Jun 24 21:28:50 jetson-nano dbus-daemon[5727]: [session uid=1000 pid=5727] Activated service ‘org.kde.runners.baloo’ failed: Process org.kde.runners.baloo exited with status 255
Jun 24 21:28:50 jetson-nano dbus-daemon[5727]: [session uid=1000 pid=5727] Activating service name=‘org.kde.runners.baloo’ requested by ‘:1.28’ (uid=1000 pid=5984 comm=”/usr/bin/plasmashel>
Jun 24 21:28:50 jetson-nano dbus-daemon[5727]: [session uid=1000 pid=5727] Activated service ‘org.kde.runners.baloo’ failed: Process org.kde.runners.baloo exited with status 255
Jun 24 21:28:50 jetson-nano dbus-daemon[5727]: [session uid=1000 pid=5727] Activating service name=‘org.kde.runners.baloo’ requested by ‘:1.28’ (uid=1000 pid=5984 comm="/usr/bin/plasmashel>
Jun 24 21:28:50 jetson-nano dbus-daemon[5727]: [session uid=1000 pid=5727] Activated service ‘org.kde.runners.baloo’ failed: Process org.kde.runners.baloo exited with status 255
Jun 24 21:29:09 jetson-nano systemd[1]: Starting Daily apt download activities…
– Subject: A start job for unit apt-daily.service has begun execution
– Defined-By: systemd
– Support: Enterprise open source support | Ubuntu

– A start job for unit apt-daily.service has begun execution.

– The job identifier is 1779.
Jun 24 21:29:12 jetson-nano systemd[1]: apt-daily.service: Succeeded.
– Subject: Unit succeeded
– Defined-By: systemd
– Support: Enterprise open source support | Ubuntu

– The unit apt-daily.service has successfully entered the ‘dead’ state.
Jun 24 21:29:12 jetson-nano systemd[1]: Finished Daily apt download activities.
– Subject: A start job for unit apt-daily.service has finished successfully
– Defined-By: systemd
– Support: Enterprise open source support | Ubuntu

– A start job for unit apt-daily.service has finished successfully.

– The job identifier is 1779.
Jun 24 21:29:32 jetson-nano sudo[29532]: pam_unix(sudo:auth): Couldn’t open /etc/securetty: No such file or directory
Jun 24 21:29:34 jetson-nano sudo[29532]: pam_unix(sudo:auth): Couldn’t open /etc/securetty: No such file or directory
Jun 24 21:29:34 jetson-nano sudo[29532]: rreddy78 : TTY=pts/2 ; PWD=/home/rreddy78 ; USER=root ; COMMAND=/usr/bin/journalctl -xe
Jun 24 21:29:34 jetson-nano sudo[29532]: pam_unix(sudo:session): session opened for user root by rreddy78(uid=0)

Baloo is a file indexing service. Is it installed? “dpkg -l | grep -i baloo” would show which baloo packages are installed. Quite possibly unrelated to any issues, but it is worth looking at since it might be related to package installs and unpacking.

The file “/etc/securetty” should probably be present on all of the “flavors” (such as KDE) of Ubuntu. If there is some application which needs this to function, then I could see a failure for that reason. The package which owns this would be “login”. What do you see from “dpkg -l | grep login”?

Baloo is installed. But I have it disabled as it could potentially slow down the system.

dpkg -l | grep login
ii libpam-gnome-keyring:arm64 3.36.0-1ubuntu1 arm64 PAM module to unlock the GNOME keyring upon login
ii login 1:4.8.1-1ubuntu5.20.04 arm64 system login tools

I added a sample securetty file from 19.10 and the securetty errors are not there anymore. But its not solving the problem.

Maybe someone from NVIDIA has better information on what problem is described by this message:

NvRmPrivGetChipPlatform: Could not read platform information

Hi,
You may check if these are put in correct paths:
https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/manifest_jetson_nano.html#wwpID0EQHA

And linked correctly.

Thanks for the hint.

I completely removed firefox (and also removed .mozilla folder in home) in rootfs and then installed it back after upgrading all packages. It has solved the problem.

1 Like

The chromium snap from ubuntu still does not work. But there is better solution provided here:

https://askubuntu.com/questions/1204571/how-to-install-chromium-without-snap

Working well and Chromium has WebGL and some hardware enabled stuff that is not there in firefox.

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.