两屏切换 xrandr
Two screen toggle xrandr
我正在尝试创建一个 bash 脚本,它允许我根据连接到笔记本电脑的屏幕(我有两个端口)切换外部屏幕。老实说,我在 bash 方面的专业知识有限,所以这也可能是一个逻辑上的 bash 错误。我有以下脚本:
#!/bin/bash
HDMI=$(xrandr | grep 'HDMI' | cut -d ' ' -f 1)
LVDS=$(xrandr | grep 'LVDS' | cut -d ' ' -f 1)
VGA=$(xrandr | grep 'VGA' | cut -d ' ' -f 1)
HDMI_CON=$(xrandr | grep "$HDMI connected")
HDMI_DIS=$(xrandr | grep "$HDMI disconnected")
VGA_CON=$(xrandr | grep "$VGA connected")
VGA_DIS=$(xrandr | grep "$VGA disconnected")
if [ VGA_CON ] && [ HDMI_CON ]
then
echo "VGA CON, HDMI CON"
elif [ VGA_CON ] && [ HDMI_DIS ]
then
echo "VGA CON, HDMI DIS"
elif [ VGA_DIS ] && [ HDMI_CON ]
then
echo "VGA DIS, HDMI CON"
else
echo "VGA DIS, HDMI DIS."
fi
发生的情况是 VGA_CON && HDMI_CON 始终 return 为真,这导致我的脚本始终认为两个显示器都已连接。谁能告诉我发生了什么事?
通过使用 $()
语法,您将这些变量设置为等于 xrandr
生成的输出字符串。更好的选择可能是这样的:
#!/bin/bash
HDMI=$(xrandr | grep 'HDMI' | cut -d ' ' -f 1)
LVDS=$(xrandr | grep 'LVDS' | cut -d ' ' -f 1)
VGA=$(xrandr | grep 'VGA' | cut -d ' ' -f 1)
HDMI_CON=$(xrandr | grep -q "$HDMI connected" ; echo $?)
HDMI_DIS=$(xrandr | grep -q "$HDMI disconnected" ; echo $?)
VGA_CON=$(xrandr | grep -q "$VGA connected" ; echo $?)
VGA_DIS=$(xrandr | grep -q "$VGA disconnected" ; echo $?)
if [[ $VGA_CON -eq 0 && $HDMI_CON -eq 0 ]]
then
echo "VGA CON, HDMI CON"
elif [[ $VGA_CON -eq 0 && $HDMI_DIS -eq 0 ]]
then
echo "VGA CON, HDMI DIS"
elif [[ $VGA_DIS -eq 0 && $HDMI_CON -eq 0 ]]
then
echo "VGA DIS, HDMI CON"
else
echo "VGA DIS, HDMI DIS."
fi
这会将这些变量设置为等于 grep 的结果代码(0 表示找到,1 表示未找到)。我为输出保留了相同的基本逻辑,但可能会根据 xrandr
输出的内容进行增强。
我正在尝试创建一个 bash 脚本,它允许我根据连接到笔记本电脑的屏幕(我有两个端口)切换外部屏幕。老实说,我在 bash 方面的专业知识有限,所以这也可能是一个逻辑上的 bash 错误。我有以下脚本:
#!/bin/bash
HDMI=$(xrandr | grep 'HDMI' | cut -d ' ' -f 1)
LVDS=$(xrandr | grep 'LVDS' | cut -d ' ' -f 1)
VGA=$(xrandr | grep 'VGA' | cut -d ' ' -f 1)
HDMI_CON=$(xrandr | grep "$HDMI connected")
HDMI_DIS=$(xrandr | grep "$HDMI disconnected")
VGA_CON=$(xrandr | grep "$VGA connected")
VGA_DIS=$(xrandr | grep "$VGA disconnected")
if [ VGA_CON ] && [ HDMI_CON ]
then
echo "VGA CON, HDMI CON"
elif [ VGA_CON ] && [ HDMI_DIS ]
then
echo "VGA CON, HDMI DIS"
elif [ VGA_DIS ] && [ HDMI_CON ]
then
echo "VGA DIS, HDMI CON"
else
echo "VGA DIS, HDMI DIS."
fi
发生的情况是 VGA_CON && HDMI_CON 始终 return 为真,这导致我的脚本始终认为两个显示器都已连接。谁能告诉我发生了什么事?
通过使用 $()
语法,您将这些变量设置为等于 xrandr
生成的输出字符串。更好的选择可能是这样的:
#!/bin/bash
HDMI=$(xrandr | grep 'HDMI' | cut -d ' ' -f 1)
LVDS=$(xrandr | grep 'LVDS' | cut -d ' ' -f 1)
VGA=$(xrandr | grep 'VGA' | cut -d ' ' -f 1)
HDMI_CON=$(xrandr | grep -q "$HDMI connected" ; echo $?)
HDMI_DIS=$(xrandr | grep -q "$HDMI disconnected" ; echo $?)
VGA_CON=$(xrandr | grep -q "$VGA connected" ; echo $?)
VGA_DIS=$(xrandr | grep -q "$VGA disconnected" ; echo $?)
if [[ $VGA_CON -eq 0 && $HDMI_CON -eq 0 ]]
then
echo "VGA CON, HDMI CON"
elif [[ $VGA_CON -eq 0 && $HDMI_DIS -eq 0 ]]
then
echo "VGA CON, HDMI DIS"
elif [[ $VGA_DIS -eq 0 && $HDMI_CON -eq 0 ]]
then
echo "VGA DIS, HDMI CON"
else
echo "VGA DIS, HDMI DIS."
fi
这会将这些变量设置为等于 grep 的结果代码(0 表示找到,1 表示未找到)。我为输出保留了相同的基本逻辑,但可能会根据 xrandr
输出的内容进行增强。