如何在启动第二台显示器时自动执行命令?

如何在启动第二台显示器时自动执行命令?

我在 Ubuntu 18.04 上安装了两个显示器,配有 Nvidia GeForce GTX 1080 显卡。第一个显示器是 2k,第二个是 4k。我使用Nvidia X 服务器设置应用程序,首次启动时运行良好。但是当我关闭两个显示器或仅关闭第二个显示器时,gnome 会将第二个显示器的内容折叠到第一个显示器上。当我再次打开两个显示器时,它会将第二个显示器的内容移回第二个屏幕...现在第二个显示器上的缩放比例不正确,字体很小,几乎无法阅读。

我有一个xrandr命令可以修复该问题(直到我再次对监视器进行电源循环):

xrandr --fb 5120x1440 \
  --output HDMI-0 --scale 1x1 --mode 2560x1440 --pos 0x0 --panning 2560x1440+0+0 \
  --output HDMI-1 --scale .6666x.6666 --mode 3840x2160 --pos 2560x0 --panning 2560x1440+2560+0

目前,每次打开显示器时我都会运行此命令。有没有办法让第二台显示器从关闭状态变为打开状态时自动运行该命令?

或者,是否有另一种解决方案可以解决第二台显示器在循环开启-关闭-开启时改变其设置的问题?

答案1

这是我正在为一个包开发的未完成脚本,用于根据日出/日落时间来控制显示器的亮度和伽玛。

当关闭笔记本电脑的盖子时,xrandr 会将所有外接显示器重置为全亮度。下面的脚本使用比每秒休眠更有效的轮询方法检测 xrandr 对/sys/class/drm/?/status文件的更改。inotify

下面的脚本包含对原作者的致谢,部分内容已被注释掉,将来可能会被删除或更改。

使用ll /sys/class/drm/*/status来发现您的监控卡名称。然后用MONITOR=下面的适当名称替换。

Bash 脚本

#!/bin/bash

# NAME: monitory-eyesome.sh
# PATH: /usr/lib/bin
# DESC: Instantly adjust display brightness when xrandr reconfigures monitors
#       and resets them to full brightness.

# CALL: /etc/cron.d calls this script during boot.
#       Called from command line for testing/debugging.

# DATE: Sepetmber ??, 2018.

# PARM: No parameters yet, but $1 will be /sys/class/drm/<MONITOR>/status
#       in the future. ie $1 = <MONITOR>

# source eyesome-src.sh # Common code for eyesome___.sh bash scripts

# Must have the inotify-tools package.
command -v inotifywait >/dev/null 2>&1 || { echo >&2 \
        "inotify-tools package required but it is not installed.  Aborting."; \
        exit 2; }

# Copied from: https://bbs.archlinux.org/viewtopic.php?id=171655
#inspired of: 
#   http://unix.stackexchange.com/questions/4489/a-tool-for-automatically-applying-randr-configuration-when-external-display-is-p
#   http://ozlabs.org/~jk/docs/mergefb/
#   http://superuser.com/questions/181517/how-to-execute-a-command-whenever-a-file-changes/181543#181543

export MONITOR="/sys/class/drm/card1-DP-1/status"
echo "$0: $(date) Monitoring: $MONITOR" > /tmp/monitor-eyesome.sh
while inotifywait -e modify,create,delete,open,close,close_write,access \
        "$MONITOR";

dmode="$(cat "$MONITOR")"

do
    echo "$0: $(date) $dmode" >> /tmp/monitor-eyesome.sh
#    if [ "${dmode}" = disconnected ]; then
#         /usr/bin/xrandr --auto
#         echo "${dmode}"
#    elif [ "${dmode}" = connected ];then
#         /usr/bin/xrandr --output VGA1 --auto --right-of LVDS1
#         echo "${dmode}"
#    else /usr/bin/xrandr --auto
#         echo "${dmode}"
#    fi
done

关闭笔记本电脑盖时的示例输出

$ sudo ./monitor-eyesome.sh
Setting up watches.
Watches established.
/sys/class/drm/card1-DP-1/status OPEN 
Setting up watches.
Watches established.
/sys/class/drm/card1-DP-1/status OPEN 
Setting up watches.
Watches established.
/sys/class/drm/card1-DP-1/status OPEN 
Setting up watches.
Watches established.

日志文件的示例输出

$ cat /tmp/mon*
./monitor-eyesome.sh: Sun Sep 16 11:16:51 MDT 2018 Monitoring: /sys/class/drm/card1-DP-1/status
./monitor-eyesome.sh: Sun Sep 16 11:16:55 MDT 2018 connected
./monitor-eyesome.sh: Sun Sep 16 11:16:56 MDT 2018 connected
./monitor-eyesome.sh: Sun Sep 16 11:16:56 MDT 2018 connected

概括

该脚本是在几分钟前创建的(2018 年 9 月 16 日上午 11:30 MST)。我会随着项目的进展更新它。

相关内容