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
    LightFace:  Facebook Lightbox for MooTools

    One of the web components I've always loved has been Facebook's modal dialog.  This "lightbox" isn't like others:  no dark overlay, no obnoxious animating to size, and it doesn't try to do "too much."  With Facebook's dialog in mind, I've created LightFace:  a Facebook lightbox...

  • 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...

Incredible Demos

  • By
    CSS Animations Between Media Queries

    CSS animations are right up there with sliced bread. CSS animations are efficient because they can be hardware accelerated, they require no JavaScript overhead, and they are composed of very little CSS code. Quite often we add CSS transforms to elements via CSS during...

  • By
    Retrieve Your Gmail Emails Using PHP and IMAP

    Grabbing emails from your Gmail account using PHP is probably easier than you think. Armed with PHP and its IMAP extension, you can retrieve emails from your Gmail account in no time! Just for fun, I'll be using the MooTools Fx.Accordion plugin...

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!