web-dev-qa-db-fra.com

Configuration multi-écrans avec xrandr

Jusqu'à présent, j'utilisais mon écran d'ordinateur portable (3840x2160) seul, et j'essaie maintenant de configurer un moniteur secondaire (1920x1080). Étant donné que mon moniteur principal est le double de la résolution de mon secondaire, cela s'est avéré assez difficile à configurer comme je le veux. Initialement, lorsque j'ai connecté le deuxième moniteur, mon ordinateur portable a été réduit à 1920 x 1080 et mon échelle à 100%. Cela entraîne des problèmes pour deux raisons:

  • Je souhaite conserver les 3840 x 2160 que mon moniteur d'ordinateur portable prend en charge
  • La mise à l'échelle de mon application a été définie à 200%, sinon, de nombreuses applications ne semblent pas bonnes sur le moniteur 4K

Régler le moniteur à 3840x2160 crée un autre problème: avec le moniteur d'ordinateur portable double de la taille du moniteur secondaire, le curseur ne passe de l'ordinateur portable au moniteur externe que s'il se déplace dans la moitié supérieure du côté droit de mon écran. Le curseur ne peut pas se déplacer dans la moitié inférieure.

De plus, si je remets l'échelle à 200%, les applications qui évoluent pour bien s'afficher sur le moniteur 4K semblent mauvaises sur le moniteur FHD.

Pour tenter de résoudre le problème, j'ai regardé cette réponse: Est-il possible d'avoir des configurations DPI différentes pour deux écrans différents? . En suivant ses instructions lors de l'ajustement pour mes moniteurs, j'ai constaté que même si le deuxième moniteur s'affichait comme je l'espérais, je ne pouvais pas déplacer mon curseur en dehors de son premier quadrant. Ce sont les commandes que j'ai exécutées (DP-1 est mon moniteur externe et eDP-1 est mon portable):

xrandr --output DP-1 --scale 2x2 --mode 1920x1080 --fb 7680x2160 --pos 3840x0
xrandr --output eDP-1 --scale 1x1 --pos 0x0

Après avoir exécuté diverses autres commandes dans le but de réaliser ce que je recherche, j'ai réussi à le faire fonctionner - mais pas de telle manière qu'il soit clair de voir laquelle de mes étapes a fait le travail. J'ai essentiellement exécuté xrandr avec diverses options que je testais jusqu'à ce que cela fonctionne. J'ai redémarré mon système depuis et j'ai enregistré un ensemble de commandes qui définit la configuration du moniteur comme je le souhaite, répertorié ci-dessous (notez qu'après le redémarrage, le tableau de bord n'était plus dans mes noms de sortie).

xrandr --output DP1 --scale 2x2 --mode 1920x1080 --fb 7680x2160 --pos 3840x0
xrandr --output DP1 --panning 3840x2160
xrandr --output DP1 --panning 1920x1080
X Error of failed request:  BadMatch (invalid parameter attributes)
  Major opcode of failed request:  140 (RANDR)
  Minor opcode of failed request:  7 (RRSetScreenSize)
  Serial number of failed request:  40
  Current serial number in output stream:  41
xrandr --output DP1 --scale 1x1
xrandr --output DP1 --scale 2x2
xrandr --output DP1 --scale 2x2 --mode 1920x1080 --fb 7680x2160 --pos 3840x0
xrandr --output DP1 --panning 1920x1080
xrandr --output DP1 --scale 2x2 --mode 1920x1080 --fb 7680x2160 --pos 3840x0
xrandr --output eDP1 --scale 1x1 --pos 0x0
xrandr --output DP1 --pos 3840x0
xrandr --output eDP1 --pos 0x0

Pour essayer de déterminer quelles étapes sont nécessaires et lesquelles ne le sont pas, j'ai essayé d'omettre les commandes que je ne pensais pas responsables lors de la configuration de la configuration. Le problème est que le gâcher peut faire en sorte que mes écrans se retrouvent dans un état pseudo-gelé, où je peux déplacer ma souris mais aucun des autres éléments graphiques ne bougera - je dois redémarrer lorsque je ressens cela.

Initialement, lorsque le système démarre, le contenu de l'application de mon moniteur externe (y compris le curseur) apparaît assez zoomé. J'exécute les commandes dans l'ordre dans lequel elles sont répertoriées, et à l'avant-dernière étape, les graphiques se figent comme je l'ai décrit dans la dernière section - bien que continuer à taper la commande finale malgré cela, le système revient à la normale et est configuré comme je l'espérais.

Notez que le message "X Erreur de demande échouée" ne semble pas être lié directement à la commande de panoramique - dans un test où j'ai omis cette ligne, le message est apparu à la place pour la ligne qui a pris sa place (la ligne d'échelle).

Quelle est la meilleure façon pour moi de résoudre mon problème directement, plutôt que d'exécuter la série de commandes qui (en quelque sorte) fonctionnent pour moi actuellement?

EDIT: Ces commandes ne sont pas absolues non plus - elles semblent être uniquement garanties de fonctionner par rapport à la configuration par défaut de xrandr. Si je joue avec xrandr avant de les exécuter, cela peut ne pas fonctionner.

EDIT2: J'ai également vu this , ce qui ressemble à ce à quoi je suis confronté, mais il est apparemment corrigé (j'utilise la version 1.5).

1
VortixDev

Aujourd'hui (2019-02-15) a vu une nouvelle version ponctuelle des 18.04, 18.04.02. Il comprend un nouveau Xserver qui résout le problème de la contrainte de la souris sur un quart de l'écran du moniteur externe. J'ai passé des jours à essayer de trouver une solution de contournement, et ot fonctionne maintenant comme vous l'attendez! :-)

Mais si vous êtes sur 18.04 LTS, vous n'aurez pas le correctif grâce au système de mise à jour! Vous devez installer le nouveau noyau et les pilotes matériels, qui incluent également le nouveau xserver, avec Sudo apt-get install --install-recommends linux-generic-hwe-18.04 xserver-xorg-hwe-18.04 (merci omgubuntu.co.uk d'avoir signalé que vous ne recevez pas automatiquement la mise à jour).

En tant que mise à jour de mon script posté ci-dessus, la ligne magique pour placer le moniteur externe à droite, fonctionnant maintenant sans contrainte de souris, est: xrandr --output DP-1 --auto --scale 2x2 --pos 3840x0 --fb 6000x3840 --right-of eDP-1 --rotate left --output eDP-1 --auto --scale 1x1 --pos 0x0 --primary

J'ai constaté que si je jouais avec --panning (ce qui annule la mise à l'échelle 2x2 dans mon expérience), une nouvelle commande xrandr n'annule pas le panoramique: je dois redémarrer.

1
B.Tanner

La souris ne se met pas à l'échelle avec le deuxième/troisième moniteur:

J'ai constaté que l'ajout de 1 pixel au décalage de mon troisième moniteur résout la souris contrainte à la taille d'écran d'origine (quadrant supérieur gauche).

Voici mon script xrandr pour 3 moniteurs (deux 4k un 1280x1024):

xrandr \
  --dpi 282 \
  --fb 9409x2160 \
  --output eDP --primary --mode 3840x2160 --pos 0x0 --rotate normal \
  --output DisplayPort-7 --mode 3840x2160 --right-of eDP --rotate normal \
  --output DisplayPort-4 --mode 1280x1024 --pos 7681x0 --scale 1.6875x1.6875 --rotate left;

Remarque: la position de décalage a été augmentée de 1: DisplayPort-4 --mode 1280x1024 --pos 7681x et --fb est 1 plus grand pour s'adapter à cela.

Pour supprimer certains problèmes graphiques après avoir exécuté cela, je mets également à jour le fond d'écran:

# load wallpaper (remove screen-load artifacts)
feh --bg-fill ~/Pictures/The\ Old\ School\ 2018.jpeg

Maintenant, je dois juste comprendre pourquoi les moniteurs physiques changent parfois les ports d'affichage au démarrage. Initialement, DisplayPort-4 serait échangé avec DisplayPort-5 et récemment DisplayPort-4 et 7 swap. :(

Je suis content pour tout commentaire, ce n'est pas mon domaine d'expertise.

Système: Dell Precision 7530, station d'accueil TB18DC, moniteurs U2718Q Ultrasharp 27 "4k et Ultrasharp 1703FP

Steve

2
s.judd

J'ai un ordinateur portable avec un moniteur externe, tous deux avec la même résolution que vous. Mais j'utilise mon moniteur externe en mode portrait. Mon moniteur est à gauche de l'ordinateur portable - j'ai eu du mal à faire xrandr faire ce que je voulais quand il est à droite. Je branche mon moniteur sur l'un des deux ports pour que le script détermine où il se trouve. Sans le --autos J'ai trouvé que l'affichage externe pouvait parfois être désactivé, ce qui causait beaucoup de rayures sur la tête jusqu'à ce que je le trouve désactivé dans les paramètres de l'interface graphique (j'utilise kubuntu 18.04). Voici mon script, il comprend des commentaires sur les mathématiques impliquées:

#!/bin/bash

# 2mon: adjusts displays after plugging or plugging second monitor

# Main laptop display is eDP-1 3840x2160 landscape
# Second ASUS monitor is DP-1 or DP-2 1920x1080 portrait ie. 1080x1920
#                        has to have 2x2 scale or everything appears huge

# Find current monitors
tmp=~/tmp/xrandr.txt
xrandr>$tmp

# Set $dp to DP-1 or DP-2 as appropriate
# xrandr prints "DP-1 connected" and "DP-2 disconnected" or vice versa. But
# don't match eDP-1...
dp=
if   (grep "^DP-1 connected" $tmp >/dev/null);  then dp=DP-1;
Elif (grep "^DP-2 connected" $tmp >/dev/null);  then dp=DP-2; fi

if [ "$dp" = "" ]; then
  echo External monitor is not connected

  # Reset pos and frame buffer size in case second monitor was previously connected
  xrandr --output eDP-1 --auto --scale 1x1 --pos 0x0 --fb 3840x2160 --primary
else
  echo External monitor is on $dp

  # External monitor to left of main display

  # Main display starts at 2*1080=2160 (2* because of 2x scale)
  # Frame Buffer -fb x-direction is 2*1080=2160 (external) + 3840 (main) = 6000
  #                  y-direction is largest of 2*external y= 3840 and main y = 3840
  xrandr --output $dp   --auto --scale 2x2 --pos 0x0 --fb 6000x3840 --left-of eDP-1 --rotate left
  xrandr --output eDP-1 --auto --scale 1x1 --pos 2160x0 --primary
fi
2
B.Tanner