Legion Go - Microphone does not default to correct card in Gamemode

I just got Bazzite installed and working, but I have one minor issue: in Gamemode, the audio input (i.e. microphone) is set to an empty default device. The correct device exists in the dropdown and can be set, but after a reboot, my audio input defaults to an empty selection again.

I have a similar issue but with Audio out, Bazzite does not remember the last selected device after a reboot, it always defaults back to internal audio, even if you have an external display connected, or bluetooth headphones.

Desktop mode will remember previous selection, for display and audio, but Gamemode will not, it also wont remember any custom display settings you have selected.

This actually be an issue with Steam Gamescope and not Bazzite itself.

I can confirm this as well. Just docked my LEGO to my TV and had to enable the external output in desktop mode.

Just an FYI, the Steam Deck also suffers from this issue with the stock OS, so it is most likely a Steam issue that has carried over to Bazzite.

I managed to fix both these issues. I never had this issue on my Steam Deck, but it’s the way that Bazzite/wireplumber prioritizes audio sources.

This is working for me, but of course, YMMV. Basically, the issue is a matter of priority conflict with wireplumber. To fix the microphone issue, I simply made a conf file to set the microphone device to a higher priority:

To do this, ensure you have this directory. If not, create it:

/home/username/.config/wireplumber/wireplumber.conf.d/

Now, create we’ll create a couple files in this directory. First, create a file and name it 60-raise-internal-mic.conf and paste this in it:

monitor.alsa.rules = [
  {
    matches = [
      {
        node.name = "alsa_input.pci-0000_c2_00.6.analog-stereo"
      }
    ]
    actions = {
      update-props = {
         priority.driver = 8901
         priority.session = 8901
      }
    }
  }
]

We’ll need to do the same thing for HDMI when the LEGO is docked:

Now, create a file name 51-preferHDMI.conf and paste this:

monitor.alsa.rules = [
  {
    matches = [
      {
        node.name = "alsa_output.pci-0000_c2_00.1.hdmi-stereo"
      }
    ]
    actions = {
      update-props = {
         priority.driver = 1100
         priority.session = 1100
      }
    }
  }
]

Now we restart the wireplumber service:

systemctl --user restart wireplumber

That should work for the LEGO hardware. If not, you’ll have to find the specific device names using wpctl status and wpctl inspect [ID] for both the microphone and HDMI sources. This could be adapted for any number of devices. I’m not sure if this is the best solution, but it worked for me.

I did my own inspection of the LEGO hardware to figure out the problem, but I found the solution to the problem here: Bazzite HTPC Edition is not remembering last sound output · Issue #912 · ublue-os/bazzite · GitHub

1 Like

@calamityjoe87 If you want to PR this for credit, both of these configs can be placed in system_files/deck/shared/usr/share/wireplumber/hardware-profiles/lenovo-83e1/wireplumber.conf.d/ and will then auto-apply on LGO hardware.

I can do that. I’ll send over the PR as soon I get home from work.

2 Likes

Done! fix(LGO): fix audio input and output priorities for Legion Go by thecalamityjoe87 · Pull Request #1436 · ublue-os/bazzite (github.com)

Thanks for all the hard work!

1 Like

I saw the changes got merged globally. Unfortunately, it doesn’t work at the system level. The conf files are ignored. If I delete the local conf files, the fix doesn’t work anymore.

I opened a bug report on Github. I even tried moving the conf files to /etc/wireplumber, but that didn’t work either.

This is working on the deck so I’ll see what’s up