Button Assignment Qground Control

I am currently working with a BlueBoat and a BlueRov. Both devices connect well to the Qground Control software. To control them, I use an xbox joystick that connects to the computer via Bluetooth. When I disconnect and reconnect the BlueRov, the assignment of buttons joystic in Qground Control is saved. My problem is that when I disconnect and reconnect from the Blueboat, the assignment of joystic buttons in Qground control is not saved. I am forced to each new connection to assign the joystick buttons in Qground Control only for the BlueBoat. Do you have a solution so that the assignment of the joystick buttons is saved in Qground Control for the BlueBoat? I was thinking of using Docker to clone Qground Control using containers in the hope that the assignment of the joystick buttons would be saved for the BluBoat and BlueRov. Do you know how containers work in Docker?


Hi @Eloi,

QGroundControl only saves one set of joystick configurations per joystick type, so if you’re using the same type of joystick with each vehicle then it will only remember the configuration for the last one.

While you could potentially run QGC from some kind of container or virtual machine, a simpler option would be to back up the settings for each vehicle type (once you’ve configured them), and just swap in the desired ones when you change to the other vehicle.

The settings are stored as described here, which I believe should be as follows (I’ve only confirmed the Mac one):

macOS: ~/.config/org.qgroundcontrol/QGroundControl.ini
Windows: %APPDATA%\org.qgroundcontrol\QGroundControl.ini

It should be fine to add additional files to that directory, so you could just duplicate QGroundControl.ini and rename it as BoatBackup.ini and SubBackup.ini as appropriate, and then duplicate the relevant vehicle file and rename it to QGroundControl.ini when you want to use it.

If you want to do that a bit more conveniently than having to manage them by hand you could run a script that handles the changeover for you when you want to run the other vehicle type, e.g.

from argparse import ArgumentParser
from pathlib import Path
import platform, shutil

parser = ArgumentParser()
parser.add_argument('action', choices=['restore', 'save'])
parser.add_argument('vehicle', choices=['sub', 'boat'])

args = parser.parse_args()

system = platform.system()
if system == 'Windows':
    import os.path
    base_path = Path(os.path.expandvars('%APPDATA%'))
    base_path = Path('~/.config/').expanduser()

settings_path = base_path / 'org.qgroundcontrol/QGroundControl.ini'
backup_path = settings_path.parent / f'{args.vehicle}Backup.ini'

if args.action == 'restore':
    shutil.copy(backup_path, settings_path)
elif args.action == 'save':
    shutil.copy(settings_path, backup_path)


I got a question regarding button / joystick assignments within QGC so I thought this topic would be the best to ask that question.

I do have a controller with two joysticks and two slider wheels. As far as I know, there’s no option to assign those slider wheels to a function like controlling the gripper, or control the light intensity. Is it possible to modify QGC to have acces to assigning additional analog inputs (such as joysticks. sliders and dials) to functions other than FWD, LAT, Throttle and Yaw etc. such as controlling light intensity, opening grippers?

My 2nd option would be to map the slider’s max and min values as digital buttons so I could assign them according to the current button assignment function in QGC. It would be ideal to map the analog values to the lights and gripper if that would be possible.

Thank you in advance!


Hi @sietse,

QGroundControl is open source, so technically pretty much anything is possible if you’re willing to develop it, but there’s no built in option to do so through QGC’s interface, if that’s what you’re asking (i.e. you would need to modify the code, and build a custom QGC version).

These are features we’re considering for Cockpit, but they have not been implemented there yet either.