web-dev-qa-db-fra.com

Ajuster l'application différemment sur différents moniteurs - Ubuntu 16.04

J'ai trouvé beaucoup d'articles/réponses très solides sur ce sujet:

Et bien sur:

Cependant, je me bats toujours. Mon ordinateur portable est Dell XPS15. Son affichage est 3840x2160. J'ai essayé différents moniteurs externes, mais celui que j'utilise actuellement est également celui de Dell avec une résolution de 1920x1080.

Lorsque je connecte un moniteur externe, certains des panneaux deviennent immédiatement très petits sur l’écran 3840x2160. Lorsque j'essaie de redimensionner l'affichage intégré, chrome échelles, mon IDE échelles, mais affiche une fenêtre avec d'autres fenêtres telles que les paramètres de NVIDIA X Server restent très petits. J'ai essayé de jouer avec Adapte tout le contenu de la fenêtre à celui de dans Affichage mais en vain. Il est trop grand sur l’écran externe ou trop petit sur l’intégration. J'ai aussi essayé xrandr avec scale param mais ça me donne:

xrandr --output HDMI-1 --scale 2x2
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  140 (RANDR)
  Minor opcode of failed request:  26 (RRSetCrtcTransform)
  Value in failed request:  0x40
  Serial number of failed request:  38
  Current serial number in output stream:  39

Idéalement, je souhaite que plusieurs fenêtres de la même application (par exemple, Chrome ou Intellij Idea soient ouvertes sur différents écrans et évoluent indépendamment l'une de l'autre).

MODIFIER

Je ne cherche pas Échelle pour les menus et la barre de titre , j'aime la façon dont les barres sont. Je veux que le contenu de Windows soit mis à l'échelle indépendamment. Affiche L’UI me force à adapter toutes les fenêtres à l’affichage Built-id ou à l’affichage externe. Par conséquent:

  1. Adapte tout le contenu de la fenêtre à la correspondance .

    Affichage intégré - tout a l'air parfait; Affichage externe - tout est énorme.

  2. Adapte tout le contenu de la fenêtre à Affichage externe:

    Affichage intégré - très petit; Affichage externe - tout a l'air parfait.

6
yuranos87

J'ai le pilote nvidia 340.98 avec GT218M [NVS 3100M], Xubuntu 16.04, tous les résultats ci-dessous proviennent de cet environnement si je ne mentionne pas le contraire. Voici informations sur mon environnement de test , le résultat de:

Sudo apt-get install pastebinit; \
Sudo sh -c "lsb_release -sd; \
 dmidecode -s system-product-name; echo ==; \
 lshw -c display; echo ==; \
 xrandr --verbose; echo ==; \
 cat /etx/X11/xorg.conf" \
 | tee ~/Desktop/ubuntu-graphic-info.txt \
 | pastebinit

Pile étrange et complexe à déboguer spécialement à l'aide de pilotes propriétaires. La plupart du temps, j'obtiens des comportements inattendus, dus peut-être au manque de connaissances sur la configuration actuelle de la pile graphique Linux.

  • J'ai écrit cette réponse avant, cela peut introduire des outils de débogage comme xtracename__
  • Évitez d'exécuter plusieurs commandes/séquentielles xrandrname__, uniquement après la réinitialisation du serveur X. La même commande peut avoir un résultat différent selon les commandes précédentes. J'ai remarqué cela avec --scale (voir le scénario de test de ma réponse, lien ci-dessus) --transform & --fb. Je ne connais toujours pas de solution de facilité uniquement par la déconnexion/connexion. Donc, déconnectez-vous/connectez-vous toujours avant de faire un autre essai.
  • Les captures d’écran ne prenant que des images de taille pixel en FB, je vais donc ajouter des photos pour montrer les résultats réels.

Méthode 1: xrandr --output .. --scale HCoefxVCoef ou --scale-from WxH

Remarque, fonctionne bien pour moi. --scale est un raccourci pour --transform, voir method3

(VGA-0 en dessous de DP-3)

xrandr \
--output DP-3 --mode 1280x800 --scale 1x1 --pos 0x0 --fb 2880x2600 \
--output VGA-0 --mode 1440x900 --scale 2x2 --pos 0x800

ou:

xrandr \
--output DP-3 --mode 1280x800 --pos 0x0 --fb 2880x2600 \
--output VGA-0 --mode 1440x900 --scale-from 2880x1800 --pos 0x800

Calcul de la taille de FrameBuffer:

width = max(1280,1440*2) = 2880
height = 800+900*2 = 2600

Résultats:

  • capture d'écran de l'échelle nvidia xrandr

    nvidia xrandr scale screenshot

  • photo d'échelle nvidia xrandr

    nvidia xrandr scale photo

Méthode 2: nvidia-settings View In/Out du port

Remarque, ne fonctionne pas bien. nvidia-settings ne modifie pas le frame-buffer à la taille requise comme dans la commande xrandrname__. Il semble qu'un bogue (une sorte de, nvidiaa son propre FB), nécessite davantage de recherche.

J'ai essayé de répliquer la configuration de xrandrdirectement à l'aide de nvidia-settings (j'ai utilisé xrandr de method1, marqué le paramètre nvidia, réinitialisé les paramètres, puis utilisé directement nvidia-settings):

  1. gksu nvidia-settings → Configuration de l'affichage du serveur X
  2. Sélectionner un moniteur externe → avancé ...
  3. Faire ViewPortIn & Panoramique double de ViewPortOut (identique à l'original résolution)
  4. Laisser le moniteur interne inchangé puis Appliquer

Exemple:

Résultats: Remarquez le pointeur de la souris, il peut atteindre tous les bords du deuxième moniteur même s'il ne dessine que le quart supérieur gauche.

  • nvidia-settings viewportin capture d'écran

    nvidia-settings viewportin screenshot

  • nvidia-settings viewportin photo

    nvidia-settings viewportin photo

Mise à jour: Eh bien, je pourrais enfin avoir un truc pour contourner le problème. Ajouter 1px à la largeur ou à la hauteur du panoramique (Panningname__)

    Panning:     2881x1800 or 2880x1801

Nouveaux résultats: je ne peux pas expliquer cela, seul l'arrière-plan est corrompu si j'utilise ci-dessous, sinon tout semble correct.

  • nvidia-settings viewportin avec panoramique capture d'écran truc

    nvidia-settings viewportin with panning trick screenshot - below abaissé la qualité de la couleur de l'image ci-dessus pour faire moins de 2 Mo limite nvidia-settings viewportin with panning trick screenshot - right of

  • nvidia -settings viewportin avec panoramique astuce photo

    nvidia-settings viewportin with panning trick photo - belownvidia-settings viewportin with panning trick photo - right of

Méthode 3: xrandr --output .. --transform "H,0,0,0,V,0,0,0,1"

Remarque, fonctionne bien pour moi, comme pour method1

(VGA-0 à droite de DP-3)

xrandr \
--output DP-3  -primary --mode 1280x800 --pos 0x0 --transform "1,0,0,0,1,0,0,0,1" --fb 4160x1800 \
--output VGA-0 --mode 1440x900 --transform "2,0,0,0,2,0,0,0,1" --right-of DP-3

Calcul de la taille de FrameBuffer:

width = 1280+1440*2 = 4160
height = max(800,900*2) = 1800

Résultats:

  • nvidia xrandr transformer capture d'écran

    nvidia xrandr transform screenshot

  • nvidia xrandr transformer photo

    nvidia xrandr transform photo

3
user.dz

J'ai trouvé une solution simple. Je suis sous Ubuntu 18.04. Ceci est ma sortie xrandr:

light@light:~$ xrandr
Screen 0: minimum 8 x 8, current 5760 x 2160, maximum 32767 x 32767
HDMI-0 connected 1920x1080+3840+92 (normal left inverted right x axis y axis) 476mm x 268mm
   1920x1080     60.00*+  59.94    50.00  
   1680x1050     59.95  
   1600x900      60.00  
   1440x900      59.89  
   1280x1024     60.02  
   1280x800      59.81  
   1280x720      60.00    59.94    50.00  
   1024x768      60.00  
   800x600       60.32  
   720x576       50.00  
   720x480       59.94  
   640x480       59.94    59.93  
DP-0 connected primary 3840x2160+0+0 (normal left inverted right x axis y axis) 382mm x 214mm
   3840x2160     60.02*+  48.02  
DP-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
DP-1-1 disconnected (normal left inverted right x axis y axis)
HDMI-1-1 disconnected (normal left inverted right x axis y axis)
DP-1-2 disconnected (normal left inverted right x axis y axis)
HDMI-1-2 disconnected (normal left inverted right x axis y axis)
light@light:~$

J'ai simplement exécuté la commande ci-dessous et cela a fonctionné parfaitement:

light@light:~$ xrandr --output HDMI-0 --scale 2x2 --mode 1920x1080
light@light:~$

--scale 2x2 implique que tout soit deux fois plus petit sur un écran externe.

--mode est la résolution souhaitée.

C'est tout

0
user9275416