bluetooth speaker pairing with pop!_os 21.10

I need to provide audio output to my UM250 while running on Pop!_OS. In the past when the UM250 was running Windows 10 Pro I just paired a EcoXGear Bluetooth speaker (GDI-EXEGPL400-410) in about five seconds and then went on to other tasks. Absolutely no drama in pairing the speaker with Windows 10.

The last time I tried to pair this exact same speaker with a Linux system, it was with Ubuntu 18.04 running on an nVidia Jetson Xavier NX SBC ( https://arcanesciencelab.wordpress.com/2020/05/30/enabling-bluetooth-audio-for-the-jetson-xavier-nx/ ) back in May 2020. It was a long and convoluted affair that did lead to a successful pairing, but it was a total failure if you expected the pairing to be as simple as pairing with Windows 10. This time pairing the Bluetooth speaker with Pop!_OS 21.10 was as simple as pairing with Windows 10.

Bluetooth on Pop!_OS is available via Settings | Bluetooth. If you have no other Bluetooth devices, then this is the only way to work with Bluetooth. In my case I opened it up and found just the one entry for EcoXGear, and it was disconnected the first time in. All I did was click it, and it automatically connected. I didn’t have to do anything from that point. I tested it by playing back a tutorial clip on YouTube and it played back just fine.

Once enabled, if you click on the entry again, you get a dialog that allows you to remove the device if you need to.

Sound tuning is in Settings | Sound. From there you can set the maximum output volume of your speaker, as well as check that the channels are working. Since I’d already played back a clip and found the audio working along with the video, a check from here wasn’t needed. But if you do need that check…


Clicking the Test button on Sound produces this very simple dialog, which allows you to test your audio output. If you have a stereo setup then clicking the Front Right button produces a voice saying “Front right…” while clicking Front Left produces a voice saying “Front left…” Since I only had the one speaker attached I heard the right and left in that one speaker.

I am quite pleased with these little, but important, details. This is how any operating system should behave, and it’s how both Windows and macOS does behave and has behaved for decades. Even Android, a derivative of Linux (especially at the kernel level) is this easy. And it would appear that System76, the producers of Pop!_OS, are doing all they can to make their distribution (which they install on their hardware) dedicated to complete ease of setup and use. I don’t know if pure Ubuntu would be this easy. So far the Pop!_OS developers deserve a hearty well done and thank you from me.

installing python 3.10.2 on pop!_os 20.10

Running Python 3.10.2 in a virtual work environment.

You should have seen this one coming.

Pop!_OS 21.10 comes with Python 3.9.7. That’s a decent version for quite a few tasks. But I want my Python release to be as fresh as possible. I checked the Python website ( https://www.python.org/ ) and discovered that versions 3.9.10 and 3.10.2 had been released on 14 January. I’m not in the mood to install the latest Python 3.9 release, so I built and installed 3.10.2.

I’ve been building Python for some time now (just search for it on my site). The last big installation was 3.9.1 on a Xavier NX running Ubuntu 18.04 and JetPack 4.5 back on February 2021 ( https://arcanesciencelab.wordpress.com/2021/02/14/building-python-3-9-1-on-jetpack-4-5-and-the-jetson-xavier-nx/ ). You’re welcome to go back and read that, but I’m going to wrap up all those directions here, and add a few bits to make Python build with all modules on what is essentially Ubuntu 21.10.

Install Build Prerequisites

In addition to all the prerequisites from other builds, I found that there were a few holes in the base Pop!_OS installation. If you want to just get everything on one line and then install it all, copy the following and then paste into a bash shell.

sudo apt install zlib1g-dev \
libncurses5-dev \
libgdbm-dev \
libnss3-dev \
libssl-dev \
libreadline-dev \
libffi-dev \
libsqlite3-dev \
libbz2-dev \
tk \
tk-dev \
liblzma-dev \
libgdbm-compat-dev

Build And Install Python 3.10.2

  • Download the latest Python version from https://www.python.org/downloads/
  • Untar the file into a work folder of your choice
  • Make a build directory at the same level as the untarred source directory.
  • From within the build directory execute the configure script. In this example we’re building Python 3.10.2.
    ../Python-3.10.2/configure --enable-optimizations
  • Within the build directory run make.
  • Install into the alternate location for this version of Python:
    sudo -H make altinstall
  • Check for the alternate location with which python3.10 . It should return /usr/local/bin/python3.10 .

Create A Virtual Work Environment

  • In your home directory create a work folder. On my system I named it ‘vpython’, but you can call it whatever you want.
  • Change directory into it, then create a Python VE using as an example python3.10 -m venv 310.
  • There is a bin directory in the virtual directory you created, which in this example was 310. Start the environment with source 310/bin/activate .

I created an alias so that typing activate in any shell starts the environment. The alias should source the full path and the script in bin. When active, typing deactivate drops you back to a regular shell environment. See the example screen capture above for examples and some ideas.

And that’s it. Easy-peasy as they say.