# MAVLink Shell

The MAVLink Shell is an _NSH console_ that can be accessed via MAVLink over serial (USB/Telemetry) or WiFi (UDP/TCP) links (in particular, on NuttX-based systems like: Pixhawk, Pixracer, etc.).

The shell can be used for running commands and modules, and displaying their output. While the shell cannot _directly_ display the output of modules that it does not start, it can do so indirectly using the `dmesg` command (`dmesg -f &` can be used to display the output of other modules and tasks running on the work queue).

:::tip The [QGroundControl MAVLink Console](#qgroundcontrol) is the easiest way to access the console. If the system does not start properly you should instead use the [System Console](system_console). :::

## Opening the Shell

### QGroundControl MAVLink Console

The easiest way to access shell is to use the [QGroundControl MAVLink Console](https://docs.qgroundcontrol.com/master/en/analyze_view/mavlink_console.html) (see **Analyze View > Mavlink Console**).

### mavlink\_shell.py

You can also access the shell in a terminal using the **mavlink\_shell.py** script:

1. Shut down _QGroundControl_.
2.  Install dependencies:

    ```sh
    pip3 install --user pymavlink pyserial
    ```
3.  Open terminal (in PX4-Autopilot directory) and start the shell:

    ```sh
    # For serial port
    ./Tools/mavlink_shell.py /dev/ttyACM0
    ```

    ```sh
    # For Wifi connection
    ./Tools/mavlink_shell.py 0.0.0.0:14550
    ```

Use `mavlink_shell.py -h` to get a description of all available arguments.

## Using the MAVLink Shell

For information see: [PX4 Consoles/Shells > Using Consoles/Shells](..#using_the_console).
