Getting an RX 6700 XT to work for Gaming on Linux

Last year, due to some extreme luck and help from a viewer, I picked up an AMD RX 6700 XT for MSRP (around $500).

AMD Radeon RX 6700 XT with Raspberry Pi Compute Module 4 for scale

My initial goal was to see if I could get the card working on a Raspberry Pi. Though my initial effort was fruitless, I've since hacked the driver to work through at least a few 'rings' of AMD's doorbell init process.

Anyways, because I had that graphics card laying around, I decided to put it to use while it's not being tested on the Pi. It will be part a massive upgrade from my current HP desktop PC with integrated graphics.

Since I also wanted a faster Linux kernel build platform than my M1 Mac mini, I stretched my budget a little and bought an AMD Ryzen 5 5600x. To round out the build, I bought a B550 motherboard so I could use PCIe Gen 4.0, some Corsair RAM (RGB since my kids would enjoy seeing it), and I used a case and 144 Hz gaming monitor repurposed from my Raspberry Pi Gaming PC build.

AMD PC Build - Ryzen 5 5600x and RX 6700 XT interior RGB shot fans

The assembly went pretty well (and took a bit more than an hour—not bad for the first time building a PC from scratch in 23 years, while live streaming it!)... but watch for yourself the difficulty I had getting the AMD driver working on a fresh Ubuntu 20.04 install (starts at 02:21:13):

Towards the end of the stream, I even tried as commenters were suggesting, and ran a do-release-upgrade to install Ubuntu 21.05 (the non-LTS release), but that resulted in the display reverting to a blurry 1024x768 resolution (it was 1080p prior to the upgrade). After getting all the other benchmark results that weren't GPU-dependent, I decided to end the live stream so I could spend more time figuring out where I went wrong.

Aside: As an introvert, I have a hard time thinking as straight and/or doing any retrospective debugging on a live stream, when I know people are 'watching over my shoulder', so to speak. It brings up repressed memories of the horror of pair programming at an XP shop I worked in.

What I found out—a few people even mentioned it in live chat, but I didn't see it mid-stream—is that Google had betrayed me. The AMDGPU driver version I was downloading and trying to install was too old for my card. Instead of installing 20.50, I should've downloaded 21.50.

That doesn't explain why the mid-stream upgrade to 21.10 didn't work, but I'll chalk that up to the fact that I've never had a Linux full-version upgrade work without a hitch. (I always erase-then-reinstall on my Linux servers. Easy to do if everything's configured via Ansible and I have tested backups...).

Video

I also posted a video version of this blog post, with a few more illustrations of the points I'm making, on YouTube:

Trying the right way on Ubuntu 20.04 LTS

So I re-installed Ubuntu 20.04, since the driver documentation and release notes on AMD's driver site indicate support only for LTS releases (18.04 and 20.04), not for the latest rolling release.

AMD Radeon Software for Linux Release Notes Downloads

The release notes page and amdgpu installation guide both linked to the latest version of the driver, a .deb file download for version 21.50, so I tried it.

I installed the .deb file as directed, but when I ran amdgpu install, I got:

Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 amdgpu-lib : Depends: libwayland-amdgpu-client0 but it is not going to be installed
              Depends: libwayland-amdgpu-server0 but it is not going to be installed
              Depends: libgbm1-amdgpu but it is not going to be installed
              Depends: libegl1-amdgpu-mesa but it is not going to be installed
              Depends: libegl1-amdgpu-mesa-drivers but it is not going to be installed
              Depends: xserver-xorg-amdgpu-video-amdgpu but it is not going to be installed
 amdgpu-lib32 : Depends: libwayland-amdgpu-client0:i386
                Depends: libwayland-amdgpu-server0:i386
                Depends: libgbm1-amdgpu:i386
                Depends: libegl1-amdgpu-mesa:i386
                Depends: libegl1-amdgpu-mesa-drivers:i386
E: Unable to correct problems, you have held broken packages.

Further Googling found related issues when installing the drivers on older Ubuntu releases, but I figured at this point, maybe I should just install Ubuntu 21.10 instead.

Some people mentioned switching to or from Wayland or installing Mesa, but as someone new-ish to the graphics stack in Linux (I normally run headless servers: give me a console and I'm happy), I didn't want to mess with things I might have to unravel later. If it's not mentioned in the happy-path docs, I don't want to try it out until exhausting all options on the happy path :)

So I grabbed the 21.10 ISO, flashed it to a USB drive via Etcher, and installed Ubuntu the third time.

Ubuntu 21.10 Experience

144 Hz monitor screen setting in Ubuntu 21.10

Upon rebooting, I noticed I could set a 144 Hz refresh rate on the monitor, and the resolution was 1920x1080, so I downloaded Phoronix Test Suite while I was running system updates. It's system-info command was much more encouraging:

  GRAPHICS:               AMD Radeon RX 6700/6700 XT / 6800M
    Frequency:            2855/1000MHz     
    Monitor:              MSI G241         
    Screen:               1920x1080  

I re-ran the Heaven benchmark, and this time it was running at a blissful 242 fps average. Earlier, when I ran it without a graphics card driver, the benchmark was going about 1 fps. Much improved.

Unengine Heaven benchmark running at 248 fps on Ubuntu on RX 6700 XT

Steam and Proton

I wanted to see if playing Halo 3 from the Halo MCC was any better than the last time I'd tried it on Linux (on a Kubuntu Focus) almost two years ago, so I installed Steam, then installed MangoHUD and added the launch option mangohud %command% in Halo's settings inside Steam, and launched it.

Halo 3 MCC at 60fps on RX 6700 XT using Steam in Ubuntu Linux with Proton

The entire time playing the game, I was locked in at 60 fps. I haven't tried any more modern games yet, but being able to play Halo 3's good enough for me to chalk this experience up in the 'win' column.

Lessons Learned

First of all, if you ever mention anything about any Linux distro, expect to receive a number of comments about why that distro is [bad|great|evil] from all the wonderful distro nuts. In the live chat, there was a constant barrage of comments mentioning why [Fedora|PopOS|Mint|Arch|Debian|Manjaro|etc.] was a better option than Ubuntu.

One of the hardest problems the Linux community would have to overcome to usher in an era of 'Linux for the desktop' is not bombarding new users with decision paralysis. Every corner of the Internet is covered in "which Linux OS you should use for gaming", and every corner has a different answer.

Judging not only by my experience, but also Linus' experience, there is no way every Linux distro will work out of the box with the myriad gaming rigs (much less software like Steam), and when someone realizes their favorite blogger/site/YouTuber is 'wrong' about the best Linux distro, that drives a wedge of doubt into every other decision they follow on their Linux journey.

On the server side, it's easy—we all know Debian is the way.

🙃

Anyways, I think I came away from this experience learning three main things:

  1. Building a computer on a livestream, trying to do it so people watching the stream can remain engaged (especially solo) is quite difficult. Kudos to the production crews who do this kind of thing frequently.
  2. The Year of the Linux Desktop may never arrive, but Linux has become easy enough that anyone willing to spend time fooling with it and Googling for answers to small problems that arise will probably have a good experience. Gaming on Linux has certainly come a long way, though I have my concerns over emulating Windows being the main strategy for success.
  3. If you have newer hardware (the RX 6700 XT was released in March 2021), don't install LTS Linux releases. That's what ultimately burned me on the live stream—it's a server admin mentality, and even though I knew the kernel was older, I had assumed that because all Ubuntu and AMD's docs pointed me towards the LTS release, I should do that. Nope.

Other things I learned building a 'for-real' Linux Desktop

Here are a few other notes off the top of my head:

  • OpenRGB was easy to get going, and worked with my Aurus Elite B550 Motherboard out of the box. I'm still not able to control the Corsair Vengeance Pro SL RAM sticks, though; they seem to be perpetually stuck in rainbow mode.
  • The AMD stock CPU cooler fan is the loudest part of the entire system. Just because it's audible at idle (and ramps up more than any other fan in loudness), I might see about swapping out the cooler for a Noctua vesion. We'll see how annoying it is in my office.
  • I'm (pleasantly) surprised how everything else—including PWM fan speed control, the Aquantia 10 GbE NIC, and all other system drivers—worked out of the box in a fresh Ubuntu install. For everything besides the graphics card, this system was dead simple to get going.

Comments

From my experience, it looks a too old kernel and maybe mesa version. So I think that pretty much any recent distro would have worked.

For Ubuntu LTS, it may help to install the hwe(-edge) kernel. Updating mesa is not always fun though, so I think you made the right choice with 21.10.

Yeah; I also installed Fedora 35 this morning, and it worked out of the box there too. So it seems the thing that burned me most was trying 20.04.

I've actually had great success with running my AMD 3600X and 3950X with my AMD RX 580 and RX 5700 XT on 20.04 and even 18.04 prior to that, but you MUST update the kernel.
When running hardware that has the drivers in the Linux kernel, it is important to realize that the whole point of Ubuntu LTS is that they freeze the kernel version!
Ubuntu 20.04 only contains drivers for hardware released prior to April 2020.
Canonical solves this problem with the LTS Enablement Stack AKA Hardware Enablement (HWE) Stack, where they take the drivers from newer kernels and backport to the old LTS kernel.

Simply running `sudo apt install linux-generic-hwe-20.04` and doing a reboot would probably have solved all of your graphics problems.

I have to stress the reboot part, because while Linux will usually continue running just fine after a system upgrade, any new drivers or kernel files will not be loaded until you reboot, so the way you kept installing/uninstalling new system-level stuff even after Ubuntu asked for a reboot was almost guaranteed to mess up your system.

I've actually had great success with running my AMD 3600X and 3950X with AMD RX580 and RX5700XT on both Ubuntu 18.04 and 20.04, but the kernel MUST be updated.

It's important to realize that the point of the LTS versions is that they remain on the same kernel major version for their entire lifetime, so Ubuntu 20.04 will only contain kernel drivers that were released prior to April 2020. Canonical solves this issue by releasing their LTS Enablement Stack AKA Hardware Enablement (HWE) Stack, which backports newer drivers to the older LTS kernel.

Simply running sudo apt install linux-generic-hwe-20.04 and rebooting would likely have solved all of your driver issues.

Watching you install and uninstall and reinstall system-level packages without reboot in between was painful, as it is very likely to mess up your system.

Thanks for a great show!

Greetings from NZ, great article Jeff, keep up this awesome content.

Hi! I actually work @ a little AMD location in Poland. And have some experience with running 6700XT under 20.04 LTS.

1. You don't need closed-source drivers. That's some windows/nvidia mentality right there.
2. Kernel/mesa included in latest HWEs completely support 6700XT in the open source AMDGPU driver that's built into the kernel. The only problem is the linux-firmware freeze. Some genious @ Ubuntu refuses to update it and it does not contain the necessary firmware for navy flounder (Navi 22 codename). That couses the whole system to become unresponsive after boot. Funnily enough, before 20.04 adopted the 5.11 kernel, it lacked driver-level support for Navi22 and the system at least booted into GUI in VGA mode. Now the driver is stuck at loading firmware files that do not exist in the filesystem...

When I set-up 6700XT systems for other employees, I simply copy over the necessary firmware files form the linux-firmware github repo (with a bash script of course).

I have a RX 6500 XT in a Mint 20 system with kernel 5.14. I have compiled a fresh radeontop and can see all kind of data.. the only thing i can't see is fanspeed or any control over the fans.. I see the /sys/class/hwmon folder which contains the pwm file etc, but it seems to do nothing! Do you have any idea what i can do about that? Thanks.

I gotta tell you that there is a better way to go about it. Get a recent distro (something Arch-based, but recent is good whatever the base). You'll need a recent kernel (5.15 or something) recent mesa, and the most recent linux-firmware package that you can get your hands on.
When I tried the 6700xt in March/April of last year, I ran into problems because I didn't have a recent enough linux-firmware package installed. Without that, it wouldn't give me a display. After that, all ran fairly well.
You're better off using the open source drivers with Radeon gpu's as well, the RADV drivers that come with the linux kernel, as well as the vulkan-radeon package, or your distro's equivalent. You'll probably get that installed automatically when you install steam through your package manager.
It is NOT recommended to use the official amd closed source drivers. They don't have as good performance, and don't always work well in as many games.

I'm using the AMD Opensource Driver with the Linux kernel. I didn't bother installing the Radeon Software at all driver at all. I dunno if you are using Wayland or not, but I've found suing Xorg better for system stability and general software compatibility. Wayland doesn't work correctly with a lot of screen recording software typically and if that is important to you then I would use X with Gnome and not Wayland. For games though you might need to configure "TearFree" configuration for Xorg. Here is mine:

$ cat /etc/X11/xorg.conf.d20-amd.conf
Section "Device"
Identifier "AMD"
Driver "amdgpu"
Option "TearFree" "true"
EndSection

With this following configuration I can play most games well via Proton e.g. Dark Souls 3 [email protected] and it works flawless with the Xbox One Controller.

I upgraded to a AMD 6700XT in December on my Linux Mint 20 (ubuntu 20.04 derivative) desktop. I used Mint's update manager to install a more recent kernel version (5.11) that has built-in modules/drivers for the 6700XT, no messing with the AMDGPU driver at all.

I've played Satisfactory, MechWarrior 5, and even got Skyrim to the loading screen (haven't tested beyond that yet) running 2 2k monitors and streaming.

You might try using ckb-next to control the RGB for your Corsair memory.

I normally find the in-kernel driver more reliable than the one amd has on their site

Hi, and welcome :)

You mentioned using the .deb file from AMD website as a "happy path" and I definitely get it if after installing Ubuntu you were burned with a subpar experience, but "Mesa" and all its satellite libraries are definitely the "happy path" when it comes to AMD GPUs on Linux.

It's what Valve/Proton is mostly tested against and what everyone (including gaming software devs) expects you to use with an AMD GPU on Linux.

AMDGPU-PRO is useful for OpenCL / ML / Compute stuff, though the granularity of getting it out of the big package sucks a bit, but for gaming and daily desktop use, Mesa is definitely where the game is at.

As you can see, a more up-to-date distro like Fedora didn't have this problem.

here my 2cents on the build:
The stock coolers from AMD are not sufficient or silent, even the Prism Wraith (bundled with 3900x) in speed mode sucks.
I tested Ryzen 2600, 3900x and 5900x by myself.
I needed to upgrade to some decent coolermaster / be quiet heatpipe heatsinks to avoid overheating (>90°C)under full load.
For almost silent operation under full load I use a alphacool eisbaer LT92 with a 92 to 120mm fan adapter from thingiverse.
Kudos to theMeerKat for his work : https://www.thingiverse.com/thing:21112
alphacool recommends the alphacool eisbaer LT240, I do not agree, the LT92 is OK without overclocking (5900x ~85°C under full load).
Graphic cards and Linux: my latest experience is 1080 TI vs. 5700 XT and Linux Mint with Steam
Both work, but installation and driver updates differs a lot ! I prefer NVidia GPUs with Linux.
With Windows, I do not care, both work with latest drivers.
Thanks for the hint to OpenRGB, I also use a Gigabyte motherboard as well and will give it a try.