Turn Bluetooth On and Off from Command Line on macOS

By  on  
bluetooth

Bluetooth has been a revelation in wireless technology: wireless mice, headphones, streaming devices, and a variety of home and office environments.  It goes without saying that wireless peripherals are so much easier to manage than wired counterparts, especially mice, that I usually have my MacBook's bluetooth turned on.

There are times, however, that I move my laptop away from the mouse (OK, I admit:  the kitchen) where the bluetooth connection is still in range but with the mouse still connected, I can't use my laptop's touchpad, leaving me to only use my keyboard which is an annoyance.  That led me to finding blueutil, a command line utility for macOS that lets me turn Bluetooth on and off with one command!

Start by installing blueutil with HomeBrew:

brew install blueutil

The -p flag is a switch for turning bluetooth on and off:

# Turn bluetooth off
blueutil -p 0

# Turn bluetooth on
blueutil -p 1

This utility will be so helpful as I move around my house.  Since I can't use my touchpad during these situations, I can't turn Bluetooth off from the command bar, so a simple command like this is exactly what I need!

Recent Features

  • By
    Being a Dev Dad

    I get asked loads of questions every day but I'm always surprised that they're rarely questions about code or even tech -- many of the questions I get are more about non-dev stuff like what my office is like, what software I use, and oftentimes...

  • By
    I’m an Impostor

    This is the hardest thing I've ever had to write, much less admit to myself.  I've written resignation letters from jobs I've loved, I've ended relationships, I've failed at a host of tasks, and let myself down in my life.  All of those feelings were very...

Incredible Demos

  • By
    CSS content and attr

    CSS is becoming more and more powerful but in the sense that it allows us to do the little things easily.  There have been larger features added like transitions, animations, and transforms, but one feature that goes under the radar is generated content.  You saw a...

  • By
    Jack Rugile’s Favorite CodePen Demos

    CodePen is an amazing source of inspiration for code and design. I am blown away every day by the demos users create. As you'll see below, I have an affinity toward things that move. It was difficult to narrow down my favorites, but here they are!

Discussion

  1. Patrick K

    Thanks for sharing this! I was trying to find an easier way to toggle Bluetooth and I kept finding articles about AppleScript, but this is way easier for people familiar with the command line.

  2. Ahmed Hossein

    Thank you! I just came across this and it was a life-saver.

    I created a small “bluetoggle.sh” to toggle the switch: ON if it was OFF, OFF if it was ON. I then used iCanHazShortcut to map the script to [^B] for ease of access.

    #!/bin/zsh
    
    if [ blueutil -p |grep 1 = "1" 2>/dev/null 2>/dev/null ]; then blueutil -p 0; else blueutil -p 1; fi
    
  3. Ahmed Hossein

    The code above was messed up by the interpreter (symbol ` is not accepted it seems). I put here the final code of my 1-line bluetoggle.sh

    https://pastebin.com/YssdgD5Z

  4. Ahmed Hossein

    This can be turned into a toggle command using:

    #!/bin/bash
    blueutil -p | grep 1 && blueutil -p 0 || blueutil -p 1
    
  5. Sean Beeg

    Thanks for this. Bluetooth has been crashing on my mac every so often, so a quick brew install and 2 aliases and I’m in business.

  6. Matt D

    Here is how I control my bluetooth from ZSH.

    bt () {
    	if [ -n $1 ]
    	then
    		echo $1
    		export btArg=$(echo $1 | tr '[:upper:]' '[:lower:]') 
    		echo $btArg
    		case $btArg in
    			(on) echo "Turning on BlueTooth" >> /tmp/bt.log
    				blueutil --power 1 | tee /tmp/bt.log ;;
    			(off) echo "Turning off BlueTooth" >> /tmp/bt.log
    				blueutil --power 0 | tee /tmp/bt.log ;;
    			(stat*) echo "Checking BlueTooth state" >> /tmp/bt.log
    				export BT=$(blueutil -p | tee /tmp/bt.log) 
    				case $BT in
    					(0) echo "BlueTooth is powered off"
    						blueutil --connected ;;
    					(1) echo "BlueTooth is powered on"
    						blueutil --connected ;;
    					(*) echo "BlueTooth in unknown state"
    						blueutil --connected ;;
    				esac ;;
    			(*) echo -n "Unknown input" ;;
    		esac
    	else
    		echo -n "Need input"
    	fi
    }
    

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!