How do you tell if a computer\'s monitor(s) are turned on/off from the command line in Linux? I\'ve traditionally thought of monitors as output-only devices, but I\'ve noticed t
First, find the name of the display you want to inspect:
xrandr -q
Then change 'THE-MONITOR' to the proper name:
#!/bin/sh
is_on="`xrandr -q | grep -A 1 'THE-MONITOR' | tail -1 | sed 's/[^\*]//g';`";
Pipeline:
xrandr -q
lists all monitors;grep -A 1 'THE-MONITOR'
filters to two lines, the one containing the name of your display, and the consecutive line, which will have an "*" next to it if the monitor is on;tail -1
discards the first line;sed 's/[^\*]//g'
filter out everything but the "*";Now "$is_on" is a boolean string as "*" or empty.
This will only work if your preferred mode is at the top of the mode list, which is very usual.
The whole script for turning on and off:
#!/bin/bash
is_on="`xrandr | grep -A 1 'DVI-I-1' | tail -1 | sed 's/[^\*]//g';`";
if [ "$is_on" ]
then
xrandr --output DVI-I-1 --off
else
xrandr --output DVI-I-1 --auto --left-of HDMI-0
fi
Not all monitors support vesa DDC. Thing might got even more complicated if you use a dock.
On the other hand, there is a way to check whether your actions are detected by monitoring the kernel/udev events. To do this, for Fedora and RHEL, type following command:
sudo udevadm monitor --property
It will display every kernel and udev events it detected. From that, you can try plug/unplug the monitor data cable; plug/unplug the monitor power cable; toggle the stand-by/on states by pressing the power button.
If no output is generated after an action, then your system cannot detect it.