1 votes

Comment exécuter automatiquement une commande lors du démarrage du deuxième moniteur ?

J'ai une configuration à deux moniteurs sur Ubuntu 18.04 avec une carte graphique Nvidia GeForce GTX 1080. Le premier moniteur est en 2k et le deuxième en 4k. J'ai diminué la résolution du moniteur 4k à 2k en utilisant l'application Nvidia X Server Settings, et cela fonctionne bien au démarrage. Mais lorsque j'éteins les deux moniteurs, ou juste le deuxième, Gnome rassemble le contenu du deuxième moniteur sur le premier. Ensuite, lorsque j'allume les deux moniteurs, il déplace le contenu du deuxième moniteur vers le deuxième écran... avec un mauvais ajustement de l'échelle sur le deuxième moniteur et une police minuscule à peine lisible.

J'ai une commande xrandr qui résout le problème (jusqu'à ce que je redémarre les moniteurs):

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

Actuellement, j'exécute cette commande à chaque fois que j'allume les moniteurs. Y a-t-il un moyen de l'exécuter automatiquement chaque fois que le deuxième moniteur passe de l'état éteint à allumé?

Ou existe-t-il une autre solution pour le problème d'un deuxième moniteur qui change ses paramètres lorsqu'il est allumé-éteint-allumé?

2voto

WinEunuuchs2Unix Points 91128

Ceci est un script en cours de développement pour un paquet permettant de contrôler la luminosité de l'écran et le gamma en fonction des heures de lever/coucher du soleil.

Lorsque vous fermez le capot de l'ordinateur portable, xrandr réinitialise tous les écrans externes à pleine luminosité. Le script ci-dessous détecte les changements de xrandr dans le fichier /sys/class/drm/?/status en utilisant inotify, une méthode de surveillance plus efficace que d'attendre chaque seconde.

Le script ci-dessous contient des crédits aux auteurs originaux et des parties sont commentées et pourraient être supprimées à l'avenir ou modifiées.

Utilisez ll /sys/class/drm/*/status pour découvrir le(s) nom(s) de votre carte de moniteur. Ensuite, remplacez MONITOR= ci-dessous par le nom approprié.

Script Bash

#!/bin/bash

# NOM: monitory-eyesome.sh
# CHEMIN: /usr/lib/bin
# DESC: Ajuster instantanément la luminosité de l'écran lorsque xrandr reconfigure les écrans
#       et les réinitialise à pleine luminosité.

# APPEL: /etc/cron.d appelle ce script pendant le démarrage.
#       Appelé depuis la ligne de commande pour les tests/debug.

# DATE: ?? Sepetmber, 2018.

# PARM: Pas encore de paramètres, mais $1 sera /sys/class/drm//status
#       dans le futur. c'est-à-dire $1 = 

# source eyesome-src.sh # Code commun pour les scripts bash eyesome___.sh

# Il est nécessaire d'avoir le paquet inotify-tools.
command -v inotifywait >/dev/null 2>&1 || { echo >&2 \
        "Paquet inotify-tools requis mais non installé. Abandon."; \
        exit 2; }

# Copié depuis: https://bbs.archlinux.org/viewtopic.php?id=171655
#inspiré de: 
#   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) Surveillance : $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

Exemple de sortie lors de la fermeture du capot de l'ordinateur portable

$ sudo ./monitor-eyesome.sh
Configuration des surveillances.
Surveillances établies.
/sys/class/drm/card1-DP-1/status OUVERT 
Configuration des surveillances.
Surveillances établies.
/sys/class/drm/card1-DP-1/status OUVERT 
Configuration des surveillances.
Surveillances établies.
/sys/class/drm/card1-DP-1/status OUVERT 
Configuration des surveillances.
Surveillances établies.

Exemple de sortie du fichier journal

$ cat /tmp/mon*
./monitor-eyesome.sh: Dim Sep 16 11:16:51 MDT 2018 Surveillance : /sys/class/drm/card1-DP-1/status
./monitor-eyesome.sh: Dim Sep 16 11:16:55 MDT 2018 connecté
./monitor-eyesome.sh: Dim Sep 16 11:16:56 MDT 2018 connecté
./monitor-eyesome.sh: Dim Sep 16 11:16:56 MDT 2018 connecté

Résumé

Ce script a été créé il y a quelques minutes (le 16 sept. 2018 à 11h30 MST). Je le mettrai à jour au fur et à mesure de l'avancement du projet.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X