Desde su escenario dado, por lo que entiendo y sé por experiencias pasadas, una actualización también recreará (los archivos de configuración predeterminados ).
En su caso será necesario implementar algún tipo de gestión de configuración. Pueden ser secuencias de comandos adicionales, herramientas o incluso una infraestructura más avanzada.
У меня есть решение с использованием udev. Он не прочный,но достаточно хорошо в моем случае.
Создать файл/etc/udev/rules.d/99-monitor.rules
(точное имя файла не имеет значения, если оно содержит только буквы, цифры, _
и -
плюс расширение .rules
):
KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/local/sbin/monitor-change.udev.sh"
Создать файл /usr/local/sbin/monitor-change.udev.sh
и сделать его исполняемым:
#!/bin/bash
set -e
start_logging () {
exec >/var/log/monitor-change.log 2>&1
echo
set -x
date
}
awaken_monitor () {
# Hack: the monitor stays blank, but forcing it off then on in software
# somehow turns it on.
xset dpms force off
xset dpms force on
}
detect_xorg () {
tty=/dev/tty$(fgconsole)
# Find Xorg running on the foreground console
pids=$(fuser "$tty" 2>/dev/null)
auth_regexp=' -auth ([^ ]*)'
for pid in $pids; do
args=$(ps -o args= -p $pid)
if [[ "$args" = /usr/lib/xorg/Xorg* ]] &&
[[ "$args" =~ $auth_regexp ]]
then
# Hard-code DISPLAY=:0 because it's hard to detect
export DISPLAY=":0" XAUTHORITY="${BASH_REMATCH[1]}"
return 0
fi
done
return 1
}
#start_logging
detect_xorg
awaken_monitor
Действует на любое изменение монитора . Это включает в себя отключение монитора, а также его включение, и не различает несколько мониторов, но на этой конкретной машине всегда есть только один монитор, поэтому мне этого достаточно.
Сценарий udev обнаруживает X-сессию (, которая обычно работает на tty2 в этой настройке Ubuntu 18.04 по умолчанию ). На этой машине только один пользователь, поэтому я делаю все просто. Обратите внимание, что строка вызова X предполагает способ Gdm вызова X-сервера; вам может понадобиться изменить эту часть, если вы не используете Gdm.
Я бы предпочел решение на основе dbus -, но не знаю, на какое событие реагировать.