Skip to content

Instantly share code, notes, and snippets.

@PhrozenByte
Last active June 7, 2026 08:02
Show Gist options
  • Select an option

  • Save PhrozenByte/0304ebf47e2f2cdce68e09f69bc2c75c to your computer and use it in GitHub Desktop.

Select an option

Save PhrozenByte/0304ebf47e2f2cdce68e09f69bc2c75c to your computer and use it in GitHub Desktop.
Toggles external monitors on/off.
#!/bin/bash
# multihead.sh - Toggles external monitors on/off.
#
# Copyright (C) 2021 Daniel Rudolf (<https://www.daniel-rudolf.de>)
# License: The MIT License <http://opensource.org/licenses/MIT>
#
# SPDX-License-Identifier: MIT
APP_NAME="$(basename "${BASH_SOURCE[0]}")"
ACTION="toggle"
while [ $# -gt 0 ]; do
case "$1" in
"--on")
ACTION="on"
;;
"--off")
ACTION="off"
;;
"--toggle")
ACTION="toggle"
;;
"--help")
echo "Usage:"
echo " $APP_NAME [--toggle|--on|--off]"
exit 0
;;
*)
echo "$APP_NAME: Invalid option: $1" >&2
exit 1
;;
esac
shift
done
CARD="card1"
INTERNAL="eDP-1"
EXTERNALS=()
EXTERNALS_ACTIVE=()
for DIR in /sys/class/drm/"$CARD"-*; do
SOURCE="$(basename "$DIR")"
SOURCE="${SOURCE:${#CARD}+1}"
if [ "$SOURCE" == "$INTERNAL" ]; then
continue
fi
EXTERNALS+=( "$SOURCE" )
if [ "$(cat "$DIR/status")" == "connected" ]; then
EXTERNALS_ACTIVE+=( "$SOURCE" )
fi
done
if [ "$ACTION" == "toggle" ]; then
if [ ${#EXTERNALS_ACTIVE[@]} -gt 0 ]; then
ACTION="off"
else
ACTION="on"
fi
fi
if [ "$ACTION" == "off" ]; then
for SOURCE in "${EXTERNALS_ACTIVE[@]}"; do
echo "Turning off $SOURCE..."
echo off > "/sys/class/drm/$CARD-$SOURCE/status"
done
else
for SOURCE in "${EXTERNALS[@]}"; do
echo -n "Probing $SOURCE... "
echo detect > "/sys/class/drm/$CARD-$SOURCE/status"
cat "/sys/class/drm/$CARD-$SOURCE/status"
done
fi
[Desktop Entry]
Version=1.0
Terminal=false
Icon=multihead
Type=Application
Categories=System;Settings;HardwareSettings;
Exec=sudo multihead
Name=Toggle External Monitors
Name[de]=Externe Bildschirme umschalten
Comment=Toggle external monitors on/off
Comment[de]=Schalte externe Bildschirme an/aus
Keywords=Panel;Projector;xrandr;Screen;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment