xrandr -q
为我提供了已连接显示器的列表,但我如何才能(脚本友好)找出显示器当前是否处于活动状态?
上下文:我想编写一个脚本来切换显示。如果它处于活动状态,则应将其关闭,如果不是,则应将其打开。
注意:xrandr -q
由于活动模式以 为标记,因此基本上提供了此信息*
,但此信息很难在 bash 脚本中提取。
答案1
处于活动状态的显示器的分辨率和偏移量数字显示在xrandr
输出的标识行中。我的意思是:
$ xrandr | grep connected
eDP1 connected primary 1366x768+1280+256 (normal left inverted right x axis y axis) 345mm x 194mm
DP1 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
VGA1 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 340mm x 270mm
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
在输出中,您可以看到我的笔记本电脑的内置显示器和 VGA1 都已连接,并且具有分辨率(对于内置显示器 eDP1,其分辨率为 1366x768)。因此,任务只是输出的文本处理。为此,我编写了一个小函数,您可以在脚本中使用或~/.bashrc
:
get_active_monitors()
{
xrandr | awk '/\ connected/ && /[[:digit:]]x[[:digit:]].*+/{print $1}'
}
以下是测试运行:
打开 VGA 显示器
VGA 显示器关闭
答案2
和兰德在分辨率列表中,活动显示分辨率后面应该有一个星号,如果没有,则显示器不活动。
答案3
使用以下方法连接所有显示器
xrandr -q
然后你可以创建所有连接的显示器的变量,例如
Display1=VGA1
等等
然后使用脚本
#!/bin/bash
if (xrandr | grep "$DISPLAY1 connected"); then
if (ls | grep status_flag); then
xrandr --output $DISPLAY1 --off
rm status_flag
else
xrandr --output $DISPLAY1 --auto
touch status_flag
fi
fi
第一次执行此脚本将打开显示器,而不知道显示器是打开还是关闭;从第二次开始,如果显示器打开,它将关闭;如果显示器关闭,它将打开。
答案4
xrandr --listactivemonitors | awk '{print $NF}'