Как к автоматическому выполняют команду при запуске второго монитора?

У меня есть две установки монитора на Ubuntu 18.04 с видеокартой NVIDIA GeForce GT 1080. Первый монитор является 2k, и вторым является 4k. Мне уменьшили масштаб монитора 4k до 2k с помощью приложения Настроек X-сервера Nvidia, и это хорошо работает когда сначала загруженный. Но когда я отключил оба монитора или просто второе, гном сворачивает содержание второго монитора на первое. Когда я затем включаю оба монитора, это кладет обратно содержание второго монитора на второй экран... с неправильным масштабированием на втором мониторе теперь и едва читаемом крошечном шрифте.

Я имею 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

В настоящее время я выполняю эту команду каждый раз, когда я включаю мониторы. Существует ли способ автоматически выполнить его каждый раз, когда второй монитор идет от прочь до на?

Или есть ли другое решение для проблемы со вторым монитором, изменяющим его настройки при циклическом повторении on-on?

1
задан 15 September 2018 в 03:11

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

Сводка

Этот сценарий был создан несколько минут назад (16 сентября 2018 11:30 MST). Я обновлю его, в то время как проект прогрессирует.

2
ответ дан 7 December 2019 в 13:21

Другие вопросы по тегам:

Похожие вопросы: