我正在寻找一种脚本方法来检查外部显示器是否已打开并已连接。
我的 Ubuntu 笔记本电脑经常在睡眠或黑屏后无法打开外接显示器。我很久以前解决了问题使用xset dpms force on; xset dpms force off;
。
这种解决方案并不完美,因为显示器会经历黑屏/蓝屏的循环,并且xset
必须在显示器处于黑屏状态时执行操作。我经常多次重复该命令直到它起作用。
如果我可以检查显示器是否正确连接,我就可以更好地自动化使用重新启动显示器的脚本xset dpms force on|off
。
答案1
您可以过滤(grep
、awk
、sed
等)几个提供屏幕/显示器信息的命令的输出。如果您只需要知道外接显示器是否已连接,那么多个命令可能就足够了。我在下面列出了我看到的几个示例。我没有外接显示器可以测试,但我想您可以弄清楚细节。
xrandr
。Screen 0: minimum 320 x 200, current 1344 x 744, maximum 8192 x 8192 LVDS connected primary 1344x744+0+0 (normal left inverted right x axis y axis) 344mm x 193mm 1344x744_60.00 59.90*+ ... HDMI-0 disconnected (normal left inverted right x axis y axis) VGA-0 disconnected (normal left inverted right x axis y axis)
xdpyinfo
... default screen number: 0 number of screens: 1 screen #0: ... (a lot of useful information)
inxi -aG
按照手册页,它可以提供有关真实显示器的信息(例如,“真实显示器尺寸,而不是 Xorg 全屏对角线尺寸,这可能有很大不同”),尽管我没有看到这一点。
hwinfo | grep -i -B 3 -A 3 monitor
... 37: None 00.0: 10002 LCD Monitor [Created at monitor.125] Unique ID: rdCR.0BRfQK9ozR8 Parent ID: vSkL.mJc3+3Ia6n4 Hardware Class: monitor Model: "AUO LCD Monitor" Vendor: AUO "AUO" Device: eisa 0x20ec Resolution: 1366x768@60Hz ...
答案2
我正在使用 Gnome 扩展 Argos 检查我的第二台 DELL 显示器是否已连接。如果已连接,则缩放壁纸。如果没有连接,则缩放壁纸。(https://extensions.gnome.org/extension/1176/argos/)
该脚本每 15 秒检查一次。(通过将文件命名为 ?.1r.15s+.sh 来完成)
我的Argos脚本文件是:wallpaper.1r.15s+.sh
#!/usr/bin/env bash
connected=$(xrandr | awk '/ connected/ {count++} END {print count}')
wallpaper=$(gsettings get org.gnome.desktop.background picture-options)
if [ "$connected" -gt 1 ] && [ "$wallpaper" == "'zoom'" ]; then
span=$(gsettings set org.gnome.desktop.background picture-options spanned)
fi
if [ "$connected" -lt 2 ] && [ "$wallpaper" == "'spanned'" ]; then
span=$(gsettings set org.gnome.desktop.background picture-options zoom)
fi
echo " | iconName=folder-pictures-symbolic refresh=true trim=false"
echo "---"
echo "# screens: $connected"
echo "Wallpaper: $wallpaper"