Comment désactiver la configuration automatique du moniteur?

14

Im exécutant Ubuntu 16.04 (branche de développement), XFCE comme environnement de bureau.

Mon ordinateur est connecté à deux moniteurs. L'un via un câble VGA standard et l'autre est connecté à un commutateur HDMI. Cette configuration fonctionne correctement, mais chaque fois que je change temporairement le commutateur HDMI en une autre connexion HDMI, Xorg détecte que le moniteur a été déconnecté et reconfigure Xorg pour n'utiliser qu'un seul moniteur, le basculement du commutateur HDMI sur mon ordinateur ne réactive pas le double moniteur. utiliser soit, je dois déclencher manuellement avecxrandr

Comment puis-je empêcher ce type de détection et de reconfiguration automatique du moniteur? J'aimerais pouvoir commuter le commutateur HDMI sans que l'ordinateur ne fasse quoi que ce soit.

Commande utilisée pour restaurer la configuration multi-écrans:

xrandr \
 --output HDMI-1 \
   --mode "1920x1080" \
   --panning "1920x1080+1280+0/0x0+0+0" \
 --output DVI-1-I \
   --mode "1280x1024" \
   --panning "1280x1024/0x0+0+0"

Sortie xrandr en utilisation régulière:

Screen 0: minimum 320 x 200, current 3200 x 1080, maximum 8192 x 8192
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 connected 1920x1080+1280+0 (normal left inverted right x axis y axis) 443mm x 249mm panning 1920x1080+1280+0
   1920x1080     60.00*+  60.00    50.00    59.94    59.93  
   1920x1080i    60.00    50.00    59.94  
   1680x1050     59.95    59.88  
   1600x1024     60.17  
   1400x1050     74.76    70.00    59.98  
   1280x1024     75.02    60.02  
   1440x900      59.89    59.90  
   1280x960      60.00  
   1360x768      59.80    59.96  
   1280x800      59.91  
   1152x864      75.00    75.00    70.00    60.00  
   1280x720      60.00    50.00    59.94  
   1024x768      60.04    75.03    70.07    60.00  
   960x720       75.00    60.00  
   928x696       75.00    60.05  
   896x672       75.05    60.01  
   960x600       60.00  
   832x624       74.55  
   960x540       59.99  
   800x600       75.00    70.00    65.00    60.00    72.19    75.00    60.32    56.25  
   840x525       74.96    69.88    60.01    59.88  
   720x576       50.00  
   800x512       60.17  
   700x525       74.76    70.06    59.98  
   720x480       60.00    59.94  
   640x512       75.02    60.02  
   720x450       59.89  
   640x480       60.00    72.81    75.00    66.67    60.00    59.94  
   720x400       70.08  
   680x384       59.80    59.96  
   576x432       75.00    75.00    70.00    60.06  
   512x384       75.03    70.07    60.00  
   416x312       74.66  
   400x300       72.19    75.12    60.32    56.34  
   320x240       72.81    75.00    60.05  
DVI-I-1 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 359mm x 287mm
   1280x1024     60.02*+  75.02  
   1280x960      60.00  
   1280x800      74.93    59.81  
   1152x864      75.00  
   1280x768      74.89    59.87  
   1280x720      60.00  
   1024x768      75.08    75.03    70.07    60.00  
   1024x576      59.97  
   832x624       74.55  
   800x600       72.19    75.00    70.01    60.32    56.25  
   848x480       60.00  
   640x480       75.00    72.81    66.67    60.00  
   720x400       70.08  

Sortie xrandr lorsque le commutateur HDMI est commuté sur une connexion différente:

Screen 0: minimum 320 x 200, current 1280 x 1024, maximum 8192 x 8192
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 disconnected (normal left inverted right x axis y axis)
DVI-I-1 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 359mm x 287mm
   1280x1024     60.02*+  75.02  
   1280x960      60.00  
   1280x800      74.93    59.81  
   1152x864      75.00  
   1280x768      74.89    59.87  
   1280x720      60.00  
   1024x768      75.08    75.03    70.07    60.00  
   1024x576      59.97  
   832x624       74.55  
   800x600       72.19    75.00    70.01    60.32    56.25  
   848x480       60.00  
   640x480       75.00    72.81    66.67    60.00  
   720x400       70.08  

Quelques autres choses que j'ai essayées:

Avec le moniteur connecté, découvrez la modélisation:

$ xvidtune -show 
"1920x1080"   148.50   1920 2008 2052 2200   1080 1084 1089 1125 -hsync +vsync

Puis avec le moniteur déconnecté:

$ xrandr --newmode "1920x1080-new"   148.50   1920 2008 2052 2200   1080 1084 1089 1125 -hsync +vsync
$ xrandr --addmode HDMI-1 1920x1080-new
$ xrandr --output HDMI-1 --mode 1920x1080-new

Cela me permet d'activer l'affichage lorsqu'il est déconnecté, ce qui sinon échouerait en raison du mode inexistant 1920x1080. Le problème demeure cependant, si je commute le commutateur HDMI, l'affichage est désactivé, même si je l'ai réglé sur un mode personnalisé.

Voici les événements udev lors de la déconnexion de l'écran avec le commutateur HDMI:

$ udevadm monitor --property
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent

KERNEL[41678.571099] change   /devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0 (drm)
ACTION=change
DEVNAME=/dev/dri/card0
DEVPATH=/devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0
DEVTYPE=drm_minor
HOTPLUG=1
MAJOR=226
MINOR=0
SEQNUM=3248
SUBSYSTEM=drm

UDEV  [41678.573432] change   /devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0 (drm)
ACTION=change
DEVNAME=/dev/dri/card0
DEVPATH=/devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0
DEVTYPE=drm_minor
HOTPLUG=1
ID_FOR_SEAT=drm-pci-0000_01_00_0
ID_PATH=pci-0000:01:00.0
ID_PATH_TAG=pci-0000_01_00_0
MAJOR=226
MINOR=0
SEQNUM=3248
SUBSYSTEM=drm
TAGS=:uaccess:master-of-seat:seat:
USEC_INITIALIZED=31279519

Voici les événements udev lors de la réactivation de l'affichage avec le commutateur HDMI:

$ udevadm monitor --property
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent

KERNEL[41696.104481] change   /devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0 (drm)
ACTION=change
DEVNAME=/dev/dri/card0
DEVPATH=/devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0
DEVTYPE=drm_minor
HOTPLUG=1
MAJOR=226
MINOR=0
SEQNUM=3249
SUBSYSTEM=drm

UDEV  [41696.105685] change   /devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0 (drm)
ACTION=change
DEVNAME=/dev/dri/card0
DEVPATH=/devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0
DEVTYPE=drm_minor
HOTPLUG=1
ID_FOR_SEAT=drm-pci-0000_01_00_0
ID_PATH=pci-0000:01:00.0
ID_PATH_TAG=pci-0000_01_00_0
MAJOR=226
MINOR=0
SEQNUM=3249
SUBSYSTEM=drm
TAGS=:seat:master-of-seat:uaccess:
USEC_INITIALIZED=31279519

.

$ sudo lshw -c display
  *-display                 
       description: VGA compatible controller
       product: Redwood XT [Radeon HD 5670/5690/5730]
       vendor: Advanced Micro Devices, Inc. [AMD/ATI]
       physical id: 0
       bus info: pci@0000:01:00.0
       version: 00
       width: 64 bits
       clock: 33MHz
       capabilities: pm pciexpress msi vga_controller bus_master cap_list rom
       configuration: driver=radeon latency=0
       resources: irq:55 memory:c0000000-cfffffff memory:fea20000-fea3ffff ioport:e000(size=256) memory:c0000-dffff
Grumbel
la source
Je suppose que le moniteur est répertorié xrandrlors de la reconnexion? Pourriez-vous publier la sortie xrandrlorsque la configuration est telle que vous l'aimez? nous pouvons ensuite facilement le restaurer automatiquement lors de la reconnexion. Aussi, quelle est votre xrandrcommande pour " déclencher manuellement ".
Jacob Vlijm
Mis à jour le message. Cependant, je ne veux pas simplement restaurer automatiquement la configuration, je veux qu'elle ne soit pas gâchée en premier lieu.
Grumbel
C'est probablement hors de portée, à moins que vous ne trouviez un pilote graphique qui le corrige. Le problème est dû au fait que la communication entre le pilote et votre écran échoue lors de la connexion, sautant aux valeurs par défaut. Vous avez besoin d'une sorte d'action, soit par une touche de raccourci, soit automatiquement. Faites votre choix, réparez-le sale ou pas du tout :)
Jacob Vlijm
@Grumbel, pourriez-vous ajouter la sortie de sudo lshw -c displayà la question. Si vous avez nvidia, essayez la réponse dans askubuntu.com/q/858798/26246
user.dz

Réponses:

2

Ce n'est pas une réponse finale, juste un pointeur dans la bonne direction. Sur XFCE, le xfsettingsdprogramme est responsable de la gestion de l' RRScreenChangeNotifyévénement et du déclenchement du commutateur de mode, la fonction exacte se trouve à la xfce4-settings-4.12.0/xfsettingsd/displays.cligne 77, la fonction est appelée xfce_displays_helper_screen_on_event. La désactivation de la fonction fera que le mode ne changera plus lorsqu'un nouveau moniteur se connectera.

Les informations de débogage peuvent être obtenues avec:

DISPLAY=:0 XFSETTINGSD_DEBUG=512 xfsettingsd --replace --no-daemon
Grumbel
la source
1
Merci pour la suggestion. J'ai désactivé la gestion de RRScreenChangeNotify et cela a corrigé de nombreux problèmes sur ma configuration, y compris des problèmes où les moniteurs se réveillaient immédiatement après la suspension.
Jim Paris
0

Pour les autres cannelle et gnome, une solution peut être trouvée ici :

Cannelle:

gsettings set org.cinnamon.settings-daemon.plugins.xrandr active false

Gnome:

gsettings set org.gnome.settings-daemon.plugins.xrandr active false
Grumbel
la source