如何检查外接显示器是否已打开并连接

如何检查外接显示器是否已打开并连接

我正在寻找一种脚本方法来检查外部显示器是否已打开并已连接。

我的 Ubuntu 笔记本电脑经常在睡眠或黑屏后无法打开外接显示器。我很久以前解决了问题使用xset dpms force on; xset dpms force off;

这种解决方案并不完美,因为显示器会经历黑屏/蓝屏的循环,并且xset必须在显示器处于黑屏状态时执行操作。我经常多次重复该命令直到它起作用。

如果我可以检查显示器是否正确连接,我就可以更好地自动化使用重新启动显示器的脚本xset dpms force on|off

答案1

您可以过滤(grepawksed等)几个提供屏幕/显示器信息的命令的输出。如果您只需要知道外接显示器是否已连接,那么多个命令可能就足够了。我在下面列出了我看到的几个示例。我没有外接显示器可以测试,但我想您可以弄清楚细节。

  1. 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)
    
  2. xdpyinfo

    ...
    default screen number:    0
    number of screens:    1
    
    screen #0:
      ... (a lot of useful information)
    
  3. inxi -aG

    按照手册页,它可以提供有关真实显示器的信息(例如,“真实显示器尺寸,而不是 Xorg 全屏对角线尺寸,这可能有很大不同”),尽管我没有看到这一点。

  4. 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"

相关内容